huawei-network-instance

Layer 3 Virtual Private Network (L3VPN). An L3VPN is a virtual private network set up over public networks by Internet Service P...

  • Version: 2020-03-10

    huawei-network-instance@2020-03-10


    
      module huawei-network-instance {
    
        yang-version 1;
    
        namespace
          "urn:huawei:yang:huawei-network-instance";
    
        prefix ni;
    
        import huawei-extension {
          prefix ext;
        }
        import ietf-inet-types {
          prefix inet;
        }
    
        organization
          "Huawei Technologies Co., Ltd.";
    
        contact
          "Huawei Industrial Base
    Bantian, Longgang
    Shenzhen 518129
    People's Republic of China
    Website: http://www.huawei.com
    Email: support@huawei.com";
    
        description
          "Layer 3 Virtual Private Network (L3VPN). An L3VPN is a virtual private network set up over public networks by Internet Service Providers (ISPs) and Network Service Providers (NSPs).";
    
        revision "2020-03-10" {
          description
            "The YANG descriptions are modified according to new standards.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-04-28" {
          description "Initial revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "l3vpn";
    
        container network-instance {
          description
            "Layer 3 Virtual Private Network (L3VPN). An L3VPN is a virtual private network set up over public networks by Internet Service Providers (ISPs) and Network Service Providers (NSPs).";
          container global {
            description
              "Configure the global layer 3 virtual private network (L3VPN).";
            leaf cfg-router-id {
              type inet:ipv4-address-no-zone;
              description
                "The router id of router manager.";
            }
    
            leaf as-notation-plain {
              type boolean;
              default "false";
              description
                "Enable/disable setting the display format of the BGP 4 byte as to be unformatted integer type.";
            }
    
            leaf route-distinguisher-auto-ip {
              type inet:ipv4-address-no-zone;
              description
                "Configure IP address to automatic route-distinguisher.";
            }
          }  // container global
    
          container instances {
            description
              "List of VPN instances. VPN instances are established to separate VPN routes from public network routes, and separate the routes of different VPNs. Some software features can be bound to multiple VPN instances so that multiple instances can provide a same feature. For example, RIP, OSPF, IS-IS, and BGP multiple instances.";
            list instance {
              ext:generated-by "system" {
                ext:filter "name = '_public_'";
                description "The public instance is generated automatically.";
              }
              key "name";
              description
                "Configure VPN instances. VPN instances are established to separate VPN routes from public network routes, and separate the routes of different VPNs. Multiple software features can be bound to multiple VPN instances to form a multi-instance that provides multiple features, for example, RIP multi-instance, OSPF multi-instance, IS-IS multi-instance, and BGP multi-instance. The _public_, dcn, ason, __mpp_vpn_inner__, __mpp_vpn_outer__, __mpp_vpn_inner_server__, and __LOCAL_OAM_VPN__ instances cannot be deleted.";
              leaf name {
                type string {
                  length "1..31";
                }
                description
                  "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
              }
    
              leaf description {
                when "not(../name='_public_')";
                type string {
                  length "1..242";
                  pattern '([^?]*)';
                }
                description
                  "The description of a VPN instance. The value is a string, spaces supported.";
              }
    
              leaf sys-router-id {
                type inet:ipv4-address-no-zone;
                config false;
                description
                  "The router id of current use.";
              }
    
              leaf vrf-id {
                type uint32;
                config false;
                description "Vpn Instances ID.";
              }
    
              leaf traffic-statistic-enable {
                when "../ni:name!='_public_'";
                type boolean;
                default "false";
                description
                  "Enable/disable L3VPN traffic statistics.";
              }
    
              container parameter {
                when "../ni:name!='_public_'";
                description
                  "Configure L3VPN instances information.";
                leaf identifier {
                  type string {
                    length "3..15";
                    pattern
                      '[1-9a-f][0-9a-f]{0,5}:[1-9a-f][0-9a-f]{0,7}|0:[1-9a-f][0-9a-f]{0,7}|[1-9a-f][0-9a-f]{0,5}:0';
                  }
                  must
                    "count(/ni:network-instance/ni:instances/ni:instance[l3vpn:parameter/l3vpn:identifier=current()])=1";
                  description
                    "Configures a globally unique identifier for a VPN instance. The format of a VPN identifier are follows:HEX<0-ffffff>:HEX<0-ffffffff>, but not support 0:0.";
                }
    
                leaf vn-id {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "Configures a VN ID.";
                }
              }  // container parameter
    
              container afs {
                description
                  "List of VPN address families. A VPN instance supports the
    configurations and functions of an address family only
    after the address family is configured on the instance.";
                list af {
                  ext:generated-by "system" {
                    when "../../ni:name = '_public_'";
                    description "The address families of the public instance are generated automatically when public instance is created.";
                  }
                  key "type";
                  max-elements 2;
                  description
                    "Configure address families of the VPN instance. A VPN instance
    supports the configurations and functions of an
    address family only after the address family is
    configured on the instance. Neither of the address
    families in the _public_ VPN instance can be deleted.
    If either of a VPN instance's IPv4 and IPv6 address
    families is referenced by BGP, the referenced address
    family cannot be deleted. If one of the address
    families is referenced by BGP, the non-referenced
    address family in the VPN instance can be deleted.
    If the VPN instance is referenced by BGP but its
    address families are not referenced by BGP, neither
    address family can be deleted.";
                  leaf type {
                    type af-type;
                    description
                      "Types of the VPN address families.";
                  }
    
                  leaf route-distinguisher {
                    when
                      "../../../ni:name!='_public_'";
                    type string {
                      length "3..21";
                    }
                    description
                      "A VPN address family takes effect only after it is
    configured with a RD.The object allows configuration
    and deletion, it cannot be modified. The format of
    an RD are as follows:
    (1) 16-bit AS number :32-bit user-defined number,
        for example, 101:3. An AS number ranges from 0 to 65535,
        and a user-defined number ranges from 0 to 4294967295.
        The AS number and user-defined number cannot be both 0s.
        This means that the RD value cannot be 0:0.
    (2) 32-bit IP address:16-bit user-defined number,
        for example: 192.168.122.15:1.The IP address ranges from
        0.0.0.0 to 255.255.255.255, and the user-defined number
        ranges from 0 to 65535.
    (3) 32-bit AS number :16-bit user-defined number,
        for example, 10.11:3. An AS number ranges from 0.0 to
        65535.65535 or 0 to 4294967295, and a user-defined number
        ranges from 0 to 65535. The AS number and user-defined
        number cannot be both 0s. This means that the RD value
        cannot be 0.0:0. If a VPN instance's IPv4 or IPv6 address
        family to which the node belongs is referenced by BGP,
        the node cannot be deleted. If the IPv4 or IPv6 address
        family to which the node belongs is not referenced by
        BGP and the other address family is referenced by BGP,
        the node can be deleted. If the VPN instance is referenced
        by BGP but its address families are not referenced by BGP,
        the nodes in the address families cannot be deleted.";
                  }
    
                  leaf effect-route-distinguisher {
                    type string {
                      length "3..21";
                    }
                    config false;
                    description "Effective RD.";
                  }
    
                  choice import-policy-type {
                    description
                      "Set route policy or filter.";
                    case rtp-ref {
                      description
                        "Route policy.";
                      leaf import-policy {
                        when
                          "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                        type leafref {
                          path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                        }
                        description
                          "Name of a route import policy. The policy is associating
    the VPN instance with an inbound routing policy. If a
    mode that is more accurate than the extended community
    attribute mode is required for filtering import VPN
    instance routes, the inbound routing policy can be
    adopted. The inbound routing policy can filter imported
    routes and set routing attributes for the qualified routes.
    If the inbound routing policy is not configured, all routes
    matching the VPN-target attribute are added to the VPN instance.";
                      }
                    }  // case rtp-ref
    
                    case xpl-ref {
                      description
                        "Route filter.";
                      container import-filter {
                        when
                          "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                        description
                          "Configure an import route-filter with the current VPN instance. To control the routes imported to a VPN instance in a more precise way than using extcommunity attributes, you can specify an import route-filter. The import route-filter can be used to filter the imported routes and set attributes for the qualified routes. If no import route-filter is specified, all routes that match the VPN instance's VPN targets will be added to the VPN instance.";
                        leaf name {
                          type leafref {
                            path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                          }
                          description
                            "Specify an import route-filter name.";
                        }
    
                        leaf parameter {
                          when "../name";
                          type xpl:filter-parameter-type;
                          description
                            "Specify an import route-filter parameter.";
                        }
                      }  // container import-filter
                    }  // case xpl-ref
                  }  // choice import-policy-type
    
                  choice export-policy-type {
                    description
                      "Set route policy or filter.";
                    case rtp-ref {
                      description
                        "Route policy.";
                      leaf export-policy {
                        when
                          "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                        type leafref {
                          path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                        }
                        description
                          "Name of a route export policy. The policy is associating
    the VPN instance with an outbound routing policy.
    If a mode that is more accurate than the extended
    community attribute mode is required to control
    the advertisement ofVPN instance routes, the outbound
    routing policy can be adopted. The outbound routing
    policy can filter the routes to be advertised and set
    routing attributes for the qualified routes. If the
    outbound routing policy is not configured, all routes
    can be advertised.";
                      }
                    }  // case rtp-ref
    
                    case xpl-ref {
                      description
                        "Route filter.";
                      container export-filter {
                        when
                          "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                        description
                          "Configure an export route-filter with the current VPN instance. To control the routes to be advertised to a VPN instance in a more precise way than using extcommunity attributes, you can specify an export route-filter. The export route-filter can be used to filter the routes to be advertised and set attributes for the qualified routes. If no export route-filter is specified, all routes will be advertised to the VPN instance.";
                        leaf name {
                          type leafref {
                            path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                          }
                          description
                            "Specify an export route-filter name.";
                        }
    
                        leaf parameter {
                          when "../name";
                          type xpl:filter-parameter-type;
                          description
                            "Specify an export route-filter parameter.";
                        }
                      }  // container export-filter
                    }  // case xpl-ref
                  }  // choice export-policy-type
    
                  leaf export-policy-add-ert-first {
                    when
                      "../export-policy or ../export-filter/name";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable advertise routes to VPNv4 add ERT first.";
                  }
    
                  leaf label-mode {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    type label-mode-type;
                    default "per-instance";
                    description
                      "Method of distributing labels to VPN instance routes.
    The way which assigns the label depends on the paf value.
    If there are a large number of routes in a VPN instance,
    assign a label for each instance. This allows all routes
    in the instance to use one label.";
                  }
    
                  leaf static-label {
                    when
                      "../type = 'ipv4-unicast' and ../label-mode = 'per-instance'";
                    type uint32 {
                      range "16..1048575";
                    }
                    description
                      "Enable a device to assign the same static label to all routes destined for a remote PE in a VPN instance IPv4 address family.";
                  }
    
                  leaf vpn-frr {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the VPN FRR function.";
                  }
    
                  leaf tunnel-policy {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    type leafref {
                      path "/tnlm:tunnel-management/tnlm:tunnel-policys/tnlm:tunnel-policy/tnlm:name";
                    }
                    description
                      "Name of a tunnel policy. It is used to associate the VPN
    instance with the specified tunnel policy. If no tunnel
    policy is configured, the default tunnel policy is used.
    Only LDP LSPs or static LSPs match the default tunnel policy,
    and load balancing is not performed for LSPs.";
                  }
    
                  leaf transit-vpn {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable keeping the VPN instance status up.";
                  }
    
                  leaf lsp-operation {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    type lsp-operation-type;
                    must
                      "../label-mode and ../label-mode!='per-instance' or ../lsp-operation='pop'";
                    default "pop";
                    description
                      "Label Operation Mode.";
                  }
    
                  leaf default-color {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Set default color for nexthop iteration.";
                  }
    
                  container vpn-targets {
                    when
                      "../../../ni:name!='_public_' and (../route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    description
                      "List of RTs. The number of RTs in the group ranges from 1 to 8.";
                    list vpn-target {
                      key "value type";
                      description
                        "Configure RT (VPN Target) s to control route advertisement
    between network nodes. Before sending a VPN route to a PE,
    the local PE adds an Export RT to the route. After receiving
    a route from another PE, the local PE determines whether the
    route will be added to the VPN instance based on the local
    Import RT and the Export RT that is added to the VPN route.";
                      leaf value {
                        type string {
                          length "3..21";
                        }
                        description
                          "The formats of a VPN target value are as follows:
    (1) 16-bit AS number : 32-bit user-defined number,
        for example, 1:3. An AS number ranges from 0
        to 65535, and a user-defined number ranges from
        0 to 4294967295. The AS number and user-defined
        number cannot be both 0s. This means that the
        VPN Target value cannot be 0:0.
    (2) 32-bit IP address: 16-bit user-defined number,
        for example: 192.168.122.15:1.The IP address
        ranges from 0.0.0.0 to 255.255.255.255, and
        the user-defined number ranges from 0 to 65535.
    (3) 32-bit AS number :16-bit user-defined number,
        for example, 10.11:3. An AS number ranges from
        0.0 to 65535.65535 or 0 to 4294967295, and a
        user-defined number ranges from 0 to 65535.
        The AS number and user-defined number cannot
        be both 0s. This means that the VPN Target
        value cannot be 0.0:0.";
                      }
    
                      leaf type {
                        type vpn-target-type;
                        description
                          "RT types are as follows:
    export-extcommunity: Specifies the value of the
      extended community attribute of the route from
      an outbound interface to the destination VPN.
    import-extcommunity: Receives routes that carry
      the specified extended community attribute value.";
                      }
                    }  // list vpn-target
                  }  // container vpn-targets
    
                  container state {
                    config false;
                    description
                      "Statistics of address families of the VPN instance.";
                    leaf create-time {
                      type yang:date-and-time;
                      description
                        "The createtime of address families of the VPN instance.";
                    }
    
                    leaf up-time {
                      type pub-type:time-tick;
                      description
                        "The uptime of address families of the VPN instance.";
                    }
    
                    leaf label {
                      type uint32;
                      description
                        "The label of address families of the VPN instance.";
                    }
    
                    leaf status {
                      type vpn-status-type;
                      description
                        "VPN instance status. A VPN instance is up when there
    is at least one interface associated with the VRF
    whose ifOperStatus is up. A VRF is down when:
    a. There does not exist at least one interface whose
       ifOperStatus is up.
    b. There are no interfaces associated with the VRF.";
                    }
                  }  // container state
    
                  container tunnel-infos {
                    config false;
                    description
                      "List of tunnel informations.";
                    list tunnel-info {
                      key "type peer-ip id iid";
                      description
                        "Statistics of tunnel informations.";
                      leaf type {
                        type tnlm:tunnel-type;
                        description
                          "Tunnel's type.";
                      }
    
                      leaf peer-ip {
                        type inet:ip-address-no-zone;
                        description
                          "Next Hop address through which the packet has to be sent.";
                      }
    
                      leaf id {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Tunnel's ID.";
                      }
    
                      leaf iid {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Indirect ID.";
                      }
    
                      leaf color {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Color information for tunnel.";
                      }
    
                      leaf name {
                        type string {
                          length "0..256";
                        }
                        description
                          "Tunnel's name.";
                      }
                    }  // list tunnel-info
                  }  // container tunnel-infos
    
                  container routing {
                    description
                      "Configure routing management.";
                    container routing-manage {
                      description
                        "Configure a basic service package for routing management.";
                      container option {
                        description
                          "Configure routing management options.";
                        leaf frr-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable inter-protocol FRR. In the case where primary and secondary links are created between different protocols, if the primary link is faulty, services can be quickly switched to the secondary link.";
                        }
    
                        leaf prefix-limit-number {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "../prefix-simply-alert or ../prefix-alert-percent or not(../prefix-limit-number)";
                          description
                            "Maximum number of prefixes supported by a VPN instance.";
                        }
    
                        choice prefix-alert-type {
                          description
                            "Set prefix limit.";
                          case percent {
                            description
                              "Percent.";
                            leaf prefix-alert-percent {
                              when
                                "../prefix-limit-number";
                              type uint32 {
                                range "1..100";
                              }
                              units "%";
                              description
                                "Percentage of the maximum number of route prefixes. When the maximum number of route prefixes in a VPN instance reaches the value obtained through the formula (number * alert-percent)/100, the system generates an alarm. In this case, subsequent VPN routes can still be added to the routing table of the VPN instance. After the number of route prefixes reaches the specified number, the subsequent routes are discarded.";
                            }
    
                            leaf route-unchanged {
                              when
                                "../prefix-limit-number and ../prefix-alert-percent";
                              type empty;
                              description
                                "When the alert-percent parameter is specified and the number of routes in the routing table reaches the upper limit and then a smaller upper limit is specified. There are the following results:
    If route-unchanged is specified, the routes in the routing table remain unchanged;
    if route-unchanged is not specified, all routes in the routing table are deleted, and routes are re-added.";
                            }
                          }  // case percent
    
                          case alert {
                            description "Alert.";
                            leaf prefix-simply-alert {
                              when
                                "../prefix-limit-number";
                              type empty;
                              description
                                "When the number of VPN route prefixes exceeds the specified number, subsequent VPN routes can still be added to the routing table of the VPN instance and the system only generates an alarm. After the total number of VPN route prefixes and public network route prefixes reaches the limit on the total number of unicast routes specified in the license, the subsequent VPN routes are discarded.";
                            }
                          }  // case alert
                        }  // choice prefix-alert-type
    
                        leaf route-limit-number {
                          when
                            "../../../../../../ni:name!='_public_'";
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "../route-alert-percent or ../route-simply-alert or not(../route-limit-number)";
                          description
                            "Maximum number of routes supported by a VPN instance.";
                        }
    
                        choice route-alert-type {
                          description
                            "Set routing-table limit.";
                          case percent {
                            description
                              "Percent.";
                            leaf route-alert-percent {
                              when
                                "../route-limit-number";
                              type uint32 {
                                range "1..100";
                              }
                              units "%";
                              description
                                "Percentage of the maximum number of routes. When the maximum number of routes in a VPN instance reaches the value obtained through the formula (number * alert-percent)/100, the system generates an alarm. In this case, subsequent VPN routes can still be added to the routing table of the VPN instance. After the number of routes reaches the specified number, the subsequent routes are discarded.";
                            }
                          }  // case percent
    
                          case alert {
                            description "Alert.";
                            leaf route-simply-alert {
                              when
                                "../route-limit-number";
                              type empty;
                              description
                                "When the number of VPN routes exceeds the specified number, subsequent VPN routes can still be added to the routing table of the VPN instance and the system only generates an alarm. After the total number of VPN routes and public network routes reaches the limit on the total number of unicast routes specified in the license, the subsequent VPN routes are discarded.";
                            }
                          }  // case alert
                        }  // choice route-alert-type
                      }  // container option
    
                      container topologys {
                        description
                          "List of topology instances.";
                        list topology {
                          ext:generated-by "system" {
                            ext:filter "name = 'base'";
                            description "The base topology are generated automatically when the address families of the vpn instance is created.";
                          }
                          key "name";
                          max-elements 32;
                          description
                            "Configure a topology instance. Different logical topologies can be planned on a physical network for different services.";
                          leaf name {
                            type string {
                              length "1..31";
                            }
                            must
                              "../../../../../../../ni:name='_public_' or ../name='base'";
                            description
                              "Topology name. The base topology cannot be created or deleted. The letters in the topology name should be lowercase.";
                          }
    
                          container routes {
                            config false;
                            description
                              "Operational data of a routing table.";
                            container ipv4-unicast-routes {
                              description
                                "List of routing entries in the basic IPv4 routing table.";
                              list ipv4-unicast-route {
                                key "prefix mask-length protocol-type interface-name process-id direct-nexthop";
                                description
                                  "Operational data of the IPv4 routing table.";
                                leaf prefix {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Destination IP address.";
                                }
    
                                leaf mask-length {
                                  type uint8 {
                                    range
                                      "0..32";
                                  }
                                  description
                                    "Mask length of an IP address.";
                                }
    
                                leaf protocol-type {
                                  type rt:protocol-type;
                                  description
                                    "Protocol type.";
                                }
    
                                leaf interface-name {
                                  type string {
                                    length
                                      "1..63";
                                  }
                                  description
                                    "Outbound interface whose next hop is reachable.
    1.If a VPN instance is specified for the outbound interface of routes, the VPN instance name is displayed in this field.
    2.If a tunnel is specified for the outbound interface of routes, the tunnel name or tunnel outbound interface is displayed in this field.
    3.If a physical interface is specified as the outbound interface of routes, the physical interface name is displayed in this field.
    4.Under conditions other than the preceding ones, this field is displayed as --.";
                                }
    
                                leaf process-id {
                                  type uint32;
                                  description
                                    "Process ID.";
                                }
    
                                leaf direct-nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Direct next hop.";
                                }
    
                                leaf nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Next hop.";
                                }
    
                                leaf frr-type {
                                  type rt:frr-type;
                                  description
                                    "FRR type.";
                                }
    
                                leaf preference {
                                  type uint32 {
                                    range
                                      "0..255";
                                  }
                                  description
                                    "Priority of a route. During route selection, the route with the highest priority is selected.";
                                }
    
                                leaf cost {
                                  type uint32;
                                  description
                                    "Cost.";
                                }
    
                                leaf flag {
                                  type rt:route-flag;
                                  description
                                    "Flag.";
                                }
    
                                leaf qos-id {
                                  type pub-type:hex-binary;
                                  description
                                    "QoS information.";
                                }
    
                                leaf active {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the flag indicating whether routes are active.";
                                }
    
                                leaf tag {
                                  type uint32;
                                  description
                                    "Route tag.";
                                }
    
                                leaf priority {
                                  type rt:route-priority;
                                  description
                                    "Route convergence priority, which can be low, medium, high, or critical.";
                                }
    
                                leaf label {
                                  type uint32;
                                  description
                                    "Label that is used for traffic forwarding along a tunnel.";
                                }
    
                                leaf indirect-id {
                                  type pub-type:hex-binary;
                                  description
                                    "IID index of a route.";
                                }
    
                                leaf state {
                                  type rt:route-state;
                                  description
                                    "Route states. The following route states are supported:
    Active: Indicates that a route is activated.
    Invalid: Indicates that a route is invalid.
    Inactive: Indicates that a route is inactive.
    No advertise: Indicates that route advertisement is prohibited.
    Advertise: Indicates that a route can be advertised.
    Relied: Indicates that a route can be iterated to the next hop or the outbound interface, or iterated to a tunnel.
    Stale: Indicates that routes with this tag are used in GR.";
                                }
    
                                leaf neighbour {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Neighbor.";
                                }
    
                                leaf age {
                                  type string {
                                    length
                                      "0..20";
                                  }
                                  description
                                    "Keepalive time. The value is a string in the format of 'xdxhxmxs', for example '1d18h10m16s'.";
                                }
    
                                leaf sub-protocol-type {
                                  type rt:sub-protocol-type;
                                  description
                                    "Sub protocol type.";
                                }
    
                                leaf tunnel-type {
                                  type tnlm:tunnel-type;
                                  description
                                    "Tunnel type.";
                                }
    
                                leaf tunnel-id {
                                  type string {
                                    length
                                      "1..21";
                                  }
                                  description
                                    "Tunnel ID.";
                                }
    
                                leaf nexthop-vrf-name {
                                  type string {
                                    length
                                      "1..31";
                                  }
                                  description
                                    "Nexthop VPN instance name.";
                                }
    
                                leaf relay-nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Iteration next hop.";
                                }
    
                                leaf route-color {
                                  type uint32;
                                  description
                                    "Route color.";
                                }
    
                                choice tunnel-types {
                                  description
                                    "Tunnel type.";
                                  case mpls-tunnel {
                                    description
                                      "MPLS tunnel information.";
                                    leaf out-label {
                                      type uint32;
                                      description
                                        "Outbound label that is used for traffic forwarding along a tunnel.";
                                    }
    
                                    leaf label-stack {
                                      type string {
                                        length
                                          "0..120";
                                      }
                                      description
                                        "Label Stack that is used for traffic forwarding along a tunnel.";
                                    }
                                  }  // case mpls-tunnel
    
                                  case sr-policy {
                                    description
                                      "SR-MPLS TE Policy tunnel information.";
                                    leaf group-id {
                                      type uint32;
                                      description
                                        "Index of an SR-MPLS TE Policy group.";
                                    }
    
                                    leaf endpoint {
                                      type inet:ip-address-no-zone;
                                      description
                                        "Destination address of an SR-MPLS TE Policy.";
                                    }
    
                                    leaf color {
                                      type uint32;
                                      description
                                        "Color of an SR-MPLS TE Policy.";
                                    }
    
                                    leaf policy-name {
                                      type string {
                                        length
                                          "0..31";
                                      }
                                      description
                                        "Policy Name of an SR-MPLS TE Policy.";
                                    }
                                  }  // case sr-policy
    
                                  case vxlan {
                                    description
                                      "VXLAN tunnel information.";
                                    leaf vni {
                                      type uint32;
                                      description
                                        "VXLAN network identifier.";
                                    }
    
                                    leaf gateway {
                                      type inet:ip-address-no-zone;
                                      description
                                        "Gateway IP address.";
                                    }
                                  }  // case vxlan
                                }  // choice tunnel-types
                              }  // list ipv4-unicast-route
                            }  // container ipv4-unicast-routes
    
                            container ipv6-unicast-routes {
                              description
                                "List of routing entries in the basic IPv6 routing table.";
                              list ipv6-unicast-route {
                                key "prefix mask-length protocol-type interface-name process-id direct-nexthop";
                                description
                                  "Operational data of the IPv6 routing table.";
                                leaf prefix {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Destination IP address.";
                                }
    
                                leaf mask-length {
                                  type uint8 {
                                    range
                                      "0..128";
                                  }
                                  description
                                    "Mask length of an IP address.";
                                }
    
                                leaf protocol-type {
                                  type ipv6-protocol-type;
                                  description
                                    "Protocol type.";
                                }
    
                                leaf interface-name {
                                  type string {
                                    length
                                      "1..63";
                                  }
                                  description
                                    "Outbound interface whose next hop is reachable.
    1.If a VPN instance is specified for the outbound interface of routes, the VPN instance name is displayed in this field.
    2.If a tunnel is specified for the outbound interface of routes, the tunnel name or tunnel outbound interface is displayed in this field.
    3.If a physical interface is specified as the outbound interface of routes, the physical interface name is displayed in this field.
    4.Under conditions other than the preceding ones, this field is displayed as --.";
                                }
    
                                leaf process-id {
                                  type uint32;
                                  description
                                    "Process ID.";
                                }
    
                                leaf direct-nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Direct next hop.";
                                }
    
                                leaf nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Next hop.";
                                }
    
                                leaf frr-type {
                                  type rt:frr-type;
                                  description
                                    "FRR type.";
                                }
    
                                leaf preference {
                                  type uint32 {
                                    range
                                      "0..255";
                                  }
                                  description
                                    "Priority of a route. During route selection, the route with the highest priority is selected.";
                                }
    
                                leaf cost {
                                  type uint32;
                                  description
                                    "Cost.";
                                }
    
                                leaf flag {
                                  type rt:route-flag;
                                  description
                                    "Flag.";
                                }
    
                                leaf qos-id {
                                  type pub-type:hex-binary;
                                  description
                                    "QoS information.";
                                }
    
                                leaf active {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the flag indicating whether routes are active.";
                                }
    
                                leaf tag {
                                  type uint32;
                                  description
                                    "Route tag.";
                                }
    
                                leaf priority {
                                  type rt:route-priority;
                                  description
                                    "Route convergence priority, which can be low, medium, high, or critical.";
                                }
    
                                leaf label {
                                  type uint32;
                                  description
                                    "Label that is used for traffic forwarding along a tunnel.";
                                }
    
                                leaf indirect-id {
                                  type pub-type:hex-binary;
                                  description
                                    "IID index of a route.";
                                }
    
                                leaf state {
                                  type rt:route-state;
                                  description
                                    "Route states. The following route states are supported:
    Active: Indicates that a route is activated.
    Invalid: Indicates that a route is invalid.
    Inactive: Indicates that a route is inactive.
    No advertise: Indicates that route advertisement is prohibited.
    Advertise: Indicates that a route can be advertised.
    Relied: Indicates that a route can be iterated to the next hop or the outbound interface, or iterated to a tunnel.
    Stale: Indicates that routes with this tag are used in GR.";
                                }
    
                                leaf neighbour {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Neighbor.";
                                }
    
                                leaf age {
                                  type string {
                                    length
                                      "0..20";
                                  }
                                  description
                                    "Keepalive time. The value is a string in the format of 'xdxhxmxs', for example '1d18h10m16s'.";
                                }
    
                                leaf sub-protocol-type {
                                  type rt:sub-protocol-type;
                                  description
                                    "Sub protocol type.";
                                }
    
                                leaf tunnel-type {
                                  type tnlm:tunnel-type;
                                  description
                                    "Tunnel type.";
                                }
    
                                leaf tunnel-id {
                                  type string {
                                    length
                                      "1..21";
                                  }
                                  description
                                    "Tunnel ID.";
                                }
    
                                leaf nexthop-vrf-name {
                                  type string {
                                    length
                                      "1..31";
                                  }
                                  description
                                    "Nexthop VPN instance name.";
                                }
    
                                leaf relay-nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Iteration next hop.";
                                }
    
                                leaf route-color {
                                  type uint32;
                                  description
                                    "Route color.";
                                }
    
                                choice tunnel-types {
                                  description
                                    "Tunnel type.";
                                  case vxlan {
                                    description
                                      "VXLAN tunnel information.";
                                    leaf vni {
                                      type uint32;
                                      description
                                        "VXLAN network identifier.";
                                    }
    
                                    leaf gateway {
                                      type inet:ip-address-no-zone;
                                      description
                                        "Gateway IP address.";
                                    }
                                  }  // case vxlan
                                }  // choice tunnel-types
                              }  // list ipv6-unicast-route
                            }  // container ipv6-unicast-routes
    
                            container ipv4-route-statistics {
                              description
                                "List of route statistics in the basic IPv4 routing table.";
                              list ipv4-route-statistic {
                                key "protocol-type";
                                description
                                  "Route statistics.";
                                leaf protocol-type {
                                  type statistic-protocol-type;
                                  description
                                    "Route protocol.";
                                }
    
                                leaf total-num {
                                  type uint32;
                                  description
                                    "Number of routes in the routing table.";
                                }
    
                                leaf active-num {
                                  type uint32;
                                  description
                                    "Number of active routes in the routing table.";
                                }
    
                                leaf added-num {
                                  type uint32;
                                  description
                                    "Number of active and inactive routes added to the routing table.";
                                }
    
                                leaf deleted-num {
                                  type uint32;
                                  description
                                    "Number of routes deleted from the routing table.";
                                }
    
                                leaf freed-num {
                                  type uint32;
                                  description
                                    "Number of routes that are permanently released from the routing table.";
                                }
                              }  // list ipv4-route-statistic
                            }  // container ipv4-route-statistics
    
                            container ipv6-route-statistics {
                              description
                                "List of route statistics in the basic IPv6 routing table.";
                              list ipv6-route-statistic {
                                key "protocol-type";
                                description
                                  "Route statistics.";
                                leaf protocol-type {
                                  type ipv6-statistic-protocol-type;
                                  description
                                    "Route protocol.";
                                }
    
                                leaf total-num {
                                  type uint32;
                                  description
                                    "Number of routes in the routing table.";
                                }
    
                                leaf active-num {
                                  type uint32;
                                  description
                                    "Number of active routes in the routing table.";
                                }
    
                                leaf added-num {
                                  type uint32;
                                  description
                                    "Number of active and inactive routes added to the routing table.";
                                }
    
                                leaf deleted-num {
                                  type uint32;
                                  description
                                    "Number of routes deleted from the routing table.";
                                }
    
                                leaf freed-num {
                                  type uint32;
                                  description
                                    "Number of routes that are permanently released from the routing table.";
                                }
                              }  // list ipv6-route-statistic
                            }  // container ipv6-route-statistics
    
                            container ipv4-localmt-routes {
                              description
                                "List of routing entries in the IPv4 Local MT routing table.";
                              list ipv4-localmt-route {
                                key "prefix mask-length protocol-type interface-name process-id direct-nexthop";
                                description
                                  "Operational data of the IPv4 Local MT routing table.";
                                leaf prefix {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Destination IP address.";
                                }
    
                                leaf mask-length {
                                  type uint8 {
                                    range
                                      "0..32";
                                  }
                                  description
                                    "Mask length of an IP address.";
                                }
    
                                leaf protocol-type {
                                  type rt:protocol-type;
                                  description
                                    "Protocol type.";
                                }
    
                                leaf interface-name {
                                  type string {
                                    length
                                      "1..63";
                                  }
                                  description
                                    "Outbound interface whose next hop is reachable.
    1.If a VPN instance is specified for the outbound interface of routes, the VPN instance name is displayed in this field.
    2.If a tunnel is specified for the outbound interface of routes, the tunnel name or tunnel outbound interface is displayed in this field.
    3.If a physical interface is specified as the outbound interface of routes, the physical interface name is displayed in this field.
    4.Under conditions other than the preceding ones, this field is displayed as --.";
                                }
    
                                leaf process-id {
                                  type uint32;
                                  description
                                    "Process ID.";
                                }
    
                                leaf direct-nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Direct next hop.";
                                }
    
                                leaf nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Next hop.";
                                }
    
                                leaf frr-type {
                                  type rt:frr-type;
                                  description
                                    "FRR type.";
                                }
    
                                leaf preference {
                                  type uint32 {
                                    range
                                      "0..255";
                                  }
                                  description
                                    "Priority of a route. During route selection, the route with the highest priority is selected.";
                                }
    
                                leaf cost {
                                  type uint32;
                                  description
                                    "Cost.";
                                }
    
                                leaf flag {
                                  type rt:route-flag;
                                  description
                                    "Flag.";
                                }
    
                                leaf qos-id {
                                  type pub-type:hex-binary;
                                  description
                                    "QoS information.";
                                }
    
                                leaf active {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the flag indicating whether routes are active.";
                                }
    
                                leaf tag {
                                  type uint32;
                                  description
                                    "Route tag.";
                                }
    
                                leaf priority {
                                  type rt:route-priority;
                                  description
                                    "Route convergence priority, which can be low, medium, high, or critical.";
                                }
    
                                leaf label {
                                  type uint32;
                                  description
                                    "Label that is used for traffic forwarding along a tunnel.";
                                }
    
                                leaf indirect-id {
                                  type pub-type:hex-binary;
                                  description
                                    "IID index of a route.";
                                }
    
                                leaf state {
                                  type rt:route-state;
                                  description
                                    "Route states. The following route states are supported:
    Active: Indicates that a route is activated.
    Invalid: Indicates that a route is invalid.
    Inactive: Indicates that a route is inactive.
    No advertise: Indicates that route advertisement is prohibited.
    Advertise: Indicates that a route can be advertised.
    Relied: Indicates that a route can be iterated to the next hop or the outbound interface, or iterated to a tunnel.
    Stale: Indicates that routes with this tag are used in GR.";
                                }
    
                                leaf neighbour {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Neighbor.";
                                }
    
                                leaf age {
                                  type string {
                                    length
                                      "0..20";
                                  }
                                  description
                                    "Keepalive time. The value is a string in the format of 'xdxhxmxs', for example '1d18h10m16s'.";
                                }
    
                                leaf relay-nexthop {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Iteration next hop.";
                                }
                              }  // list ipv4-localmt-route
                            }  // container ipv4-localmt-routes
    
                            container ipv4-prefix-statistics {
                              config false;
                              description
                                "Statistics of IPv4 route prefixes of a specified VPN instance.";
                              leaf unicast-route {
                                type uint32;
                                description
                                  "The number of unicast route prefixes for a specified VPN instance.";
                              }
                            }  // container ipv4-prefix-statistics
    
                            container ipv6-prefix-statistics {
                              config false;
                              description
                                "Statistics of IPv6 route prefixes of a specified VPN instance.";
                              leaf unicast-route {
                                type uint32;
                                description
                                  "The number of unicast route prefixes for a specified VPN instance.";
                              }
                            }  // container ipv6-prefix-statistics
                          }  // container routes
                        }  // list topology
                      }  // container topologys
                    }  // container routing-manage
    
                    container direct-routing {
                      description
                        "Configure a direct route.";
                      container import-ribs {
                        description
                          "List of routes imported from a VPN instance into the public network routing table.";
                        list import-rib {
                          key "source-vpn";
                          description
                            "Configure the import of routes from a VPN instance into the public network routing table.";
                          leaf source-vpn {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            must
                              "../../../../../../../ni:name != current()";
                            must
                              "/ni:network-instance/ni:instances/ni:instance[ni:name = current()]/l3vpn:afs/l3vpn:af[l3vpn:type = current()/../../../../../l3vpn:type]";
                            description
                              "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
                          }
    
                          choice policy-type {
                            description
                              "When routes are imported from other routing protocols, the Route-Policy filter specified by the parameter can be used to filter the routes and change the route attributes.";
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify an import rib route policy name.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route policy.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify an import rib route filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify an import rib route filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice policy-type
                        }  // list import-rib
                      }  // container import-ribs
    
                      container interfaces {
                        description
                          "List of configure direct route attributes on the interface.";
                        list interface {
                          must
                            "cost or degrade-cost or binding-topologys";
                          key "name";
                          description
                            "Configure direct route attributes on the interface.";
                          leaf name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Name of an interface.";
                          }
    
                          leaf cost {
                            when
                              "(../../../../../l3vpn:type='ipv4-unicast' and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='VBridge' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Remote-Ap')) or ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Global-VE' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Virtual-Ethernet') and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:class='sub-interface')";
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Cost configured for direct routes on a specified interface.";
                          }
    
                          leaf degrade-cost {
                            when
                              "(../../../../../l3vpn:type='ipv4-unicast' and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Tunnel'))";
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Specifies the cost for IPv4 direct routes on a specified IPsec tunnel interface.";
                          }
    
                          container binding-topologys {
                            when
                              "../../../../../../../ni:name='_public_' and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:class='sub-interface' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Serial' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='100GE' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='10GE' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='25GE' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='40GE' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Eth-Trunk' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Ethernet' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='GigabitEthernet' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Ip-Trunk' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='LoopBack' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Mp-group' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../rt:name]/ifm:type='Pos')";
                            description
                              "List of Interface binding topology.";
                            list binding-topology {
                              key "topology-name";
                              description
                                "Configure interface bound to a topology. To add direct routes or IS-IS routes to the multiple-topology network, the interfaces of the direct routes or IS-IS routes must be bound to specified topology instances. By default, interfaces are bound to only base topology instances and cannot be unbound or re-bound. One interface can be bound to multiple topology instances, and multiple interfaces can be bound to one topology instance.";
                              leaf topology-name {
                                type leafref {
                                  path "/ni:network-instance/ni:instances/ni:instance/l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                                }
                                description
                                  "Name of the topology to which an interface is bound. Topologies must have been created before the interfaces of direct routes or IS-IS routes are bound to the topologies.";
                              }
                            }  // list binding-topology
                          }  // container binding-topologys
                        }  // list interface
                      }  // container interfaces
                    }  // container direct-routing
    
                    container static-routing {
                      description
                        "Configure a basic service package for static routes.";
                      container import-ribs {
                        description
                          "List of routes imported from a VPN instance into the public network routing table.";
                        list import-rib {
                          key "source-vpn";
                          description
                            "Configure the import of routes from a VPN instance into the public network routing table.";
                          leaf source-vpn {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            must
                              "../../../../../../../ni:name != current()";
                            must
                              "/ni:network-instance/ni:instances/ni:instance[ni:name = current()]/l3vpn:afs/l3vpn:af[l3vpn:type = current()/../../../../../l3vpn:type]";
                            description
                              "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
                          }
    
                          leaf valid-route {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function of importing only the valid routes of a specified route type.";
                          }
    
                          choice policy-type {
                            description
                              "When routes are imported from other routing protocols, the Route-Policy filter specified by the parameter can be used to filter the routes and change the route attributes.";
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify an import rib route policy name.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route policy.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify an import rib route filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify an import rib route filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice policy-type
                        }  // list import-rib
                      }  // container import-ribs
    
                      container unicast-routes {
                        status deprecated;
                        description
                          "List of configured static routes. The node unicast-routes is deprecated. You are advised to use the node unicast-route2s.";
                        list unicast-route {
                          key "topology-name prefix mask-length interface-name vpn-destination-name next-hop";
                          status deprecated;
                          description
                            "Configure static routes. Static routes can be configured on a network with a simple topology to ensure normal running of the network, and can be configured when a router cannot run dynamic routing protocols or cannot generate routes to destination networks. Reasonable configuration of static routes can improve network performance and ensure bandwidths for important services.";
                          leaf topology-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                            }
                            must
                              "../vpn-destination-name='_public_' or ../topology-name='base'";
                            status deprecated;
                            description
                              "Name of the specified topology.";
                          }
    
                          leaf prefix {
                            type inet:ip-address-no-zone;
                            status deprecated;
                            description
                              "Destination IP address.";
                          }
    
                          leaf mask-length {
                            type uint8 {
                              range "0..128";
                            }
                            status deprecated;
                            description
                              "Mask length of an IP address.";
                          }
    
                          leaf interface-name {
                            type string {
                              length "0..63";
                            }
                            status deprecated;
                            description
                              "Transmission interface of a route.";
                          }
    
                          leaf vpn-destination-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            must
                              "../topology-name='base' or ../vpn-destination-name='_public_'";
                            status deprecated;
                            description
                              "Name of the destination VPN instance.";
                          }
    
                          leaf next-hop {
                            type inet:ip-address-no-zone;
                            status deprecated;
                            description
                              "Next hop IP address of a route.";
                          }
    
                          leaf preference {
                            ext:dynamic-default;
                            type int32 {
                              range "1..255";
                            }
                            status deprecated;
                            description
                              "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                          }
    
                          leaf description {
                            type string {
                              length "1..150";
                            }
                            status deprecated;
                            description
                              "Description of a static route.";
                          }
    
                          leaf tag {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            status deprecated;
                            description
                              "Tag of a static route.";
                          }
    
                          leaf cost {
                            when
                              "../interface-name";
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            must
                              "../ldp-sync='false'";
                            status deprecated;
                            description
                              "Cost of static route.";
                          }
    
                          leaf inherit-cost {
                            type boolean;
                            must
                              "(../interface-name='' and ../next-hop!='0.0.0.0') or ../inherit-cost='false'";
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the function of allowing a static route to inherit the cost of a recursive route. The cost of the static route changes according to the cost of the recursive route.";
                          }
    
                          leaf permanent {
                            type boolean;
                            must
                              "(((../../../../../l3vpn:type='ipv4-unicast' and ../next-hop!='0.0.0.0') or (../../../../../l3vpn:type='ipv6-unicast' and ../next-hop!='::')) and ../topology-name='base') or ../permanent='false'";
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable permanent advertisement of a static route.";
                          }
    
                          leaf no-advertise {
                            type boolean;
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the function of preventing a static route from being advertised.";
                          }
    
                          leaf no-install {
                            type boolean;
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the function of preventing a static route from being delivered to the FIB.";
                          }
    
                          leaf relay-host-route {
                            type boolean;
                            must
                              "(../interface-name='' and ../next-hop!='0.0.0.0') or ../relay-host-route='false'";
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the function of recursing a static route to a host route.";
                          }
    
                          leaf dhcp-enable {
                            type boolean;
                            must
                              "(../interface-name!='' and ../next-hop='0.0.0.0' and ../ldp-sync='false') or ../dhcp-enable='false'";
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the function of associating a static route with DHCP.";
                          }
    
                          leaf ldp-sync {
                            type boolean;
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the synchronization between LDP and a static route.";
                          }
    
                          leaf inter-protocol-ecmp {
                            type boolean;
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable inter-protocol load balancing among a static route and the routes of dynamic routing protocols.";
                          }
    
                          leaf bfd-enable {
                            type boolean;
                            must
                              "../bfd-enable='false' or (../permanent='false' and ../inherit-cost='false' and ../topology-name='base')";
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable the function of binding a dynamic BFD session to a static route. Dynamic BFD sessions can quickly detect link changes for static routes, which improves network reliability. Precaution: When enabling BFD for a single static route, you need to check whether BFD parameters are set for the static route.";
                          }
    
                          leaf relay-arp-vlink-route {
                            when
                              "../relay-host-route='true'";
                            type boolean;
                            must
                              "../../../../../l3vpn:type='ipv4-unicast'";
                            default "false";
                            status deprecated;
                            description
                              "Enable/disable static routes to be iterated only to ARP Vlink routes.";
                          }
    
                          choice track-setting {
                            status deprecated;
                            description
                              "Track set.";
                            case bfd {
                              status
                                deprecated;
                              description
                                "Track BFD.";
                              leaf session-name {
                                type leafref {
                                  path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                                }
                                must
                                  "(../permanent='false' and ../inherit-cost='false' and ../topology-name='base') or not(../session-name)";
                                status
                                  deprecated;
                                description
                                  "Bind a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                              }
                            }  // case bfd
    
                            case efm {
                              status
                                deprecated;
                              description
                                "Track EFM.";
                              leaf name {
                                type leafref {
                                  path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                }
                                must
                                  "../../../../../l3vpn:type='ipv4-unicast' and ../next-hop!='0.0.0.0' and ../inherit-cost='false' and ../permanent='false' and ../topology-name='base'";
                                status
                                  deprecated;
                                description
                                  "Track EFM Interface Name.";
                              }
                            }  // case efm
                          }  // choice track-setting
                        }  // list unicast-route
                      }  // container unicast-routes
    
                      container unicast-route2s {
                        description
                          "List of configured static routes.";
                        list unicast-route2 {
                          key "topology-name prefix mask-length";
                          description
                            "Configure static routes. Static routes can be configured on a network with a simple topology to ensure normal running of the network, and can be configured when a router cannot run dynamic routing protocols or cannot generate routes to destination networks. Reasonable configuration of static routes can improve network performance and ensure bandwidths for important services.";
                          leaf topology-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                            }
                            must
                              "(../../../../../../../ni:name='_public_' or ../topology-name='base') and (count(../nexthop-interfaces/nexthop-interface)> 0 or count(../nexthop-interface-addresses/nexthop-interface-address)> 0 or count(../nexthop-addresses/nexthop-address)> 0 or count(../nexthop-sdwans/nexthop-sdwan)> 0 or count(../nexthop-vrf-addresses/nexthop-vrf-address)> 0 or count(../nexthop-vrf-sdwans/nexthop-vrf-sdwan)> 0 or count(../nexthop-vrf-onlys/nexthop-vrf-only)> 0)";
                            description
                              "Name of the specified topology.";
                          }
    
                          leaf prefix {
                            type inet:ip-address-no-zone;
                            description
                              "Destination IP address.";
                          }
    
                          leaf mask-length {
                            type uint8 {
                              range "0..128";
                            }
                            description
                              "Mask length of an IP address.";
                          }
    
                          container nexthop-interfaces {
                            description
                              "List of outbound interfaces.";
                            list nexthop-interface {
                              must
                                "not(../../nexthop-vrf-onlys/nexthop-vrf-only)";
                              key "interface-name";
                              description
                                "Configure outbound interfaces.";
                              leaf interface-name {
                                type string {
                                  length "0..63";
                                }
                                must
                                  "../interface-name!=''";
                                description
                                  "Configure outbound interface of the route.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
    
                              leaf cost {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                must
                                  "../ldp-sync='false'";
                                description
                                  "Cost of static route.";
                              }
    
                              leaf permanent {
                                type boolean;
                                must
                                  "../../../topology-name='base' or ../permanent='false'";
                                default "false";
                                description
                                  "Enable/disable permanent advertisement of a static route.";
                              }
    
                              leaf no-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being advertised.";
                              }
    
                              leaf no-install {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being delivered to the FIB.";
                              }
    
                              leaf dhcp-enable {
                                type boolean;
                                must
                                  "../ldp-sync='false' or ../dhcp-enable='false'";
                                default "false";
                                description
                                  "Enable/disable the function of associating a static route with DHCP.";
                              }
    
                              leaf ldp-sync {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the synchronization between LDP and a static route.";
                              }
    
                              leaf inter-protocol-ecmp {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable inter-protocol load balancing among a static route and the routes of dynamic routing protocols.";
                              }
    
                              choice track-setting {
                                description
                                  "Track set.";
                                case bfd-session {
                                  description
                                    "Track BFD session.";
                                  leaf bfd-session-name {
                                    type leafref {
                                      path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                                    }
                                    must
                                      "(../permanent='false' and ../../../topology-name='base') or not(../bfd-session-name)";
                                    description
                                      "Bind a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                                  }
                                }  // case bfd-session
    
                                case bfd-enable {
                                  description
                                    "Track dynamic BFD.";
                                  leaf bfd-enable {
                                    type boolean;
                                    must
                                      "(../permanent='false' and ../../../topology-name='base' and ../dhcp-enable='true') and ../bfd-enable='true'";
                                    description
                                      "Enable/disable the function of binding a dynamic BFD session to a static route. Dynamic BFD sessions can quickly detect link changes for static routes, which improves network reliability. Precaution: When enabling BFD for a single static route, you need to check whether BFD parameters are set for the static route.";
                                  }
                                }  // case bfd-enable
    
                                case efm {
                                  description
                                    "Track EFM.";
                                  leaf efm-interface-name {
                                    type leafref {
                                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                    }
                                    must
                                      "(../../../../../../../l3vpn:type='ipv4-unicast' and ../permanent='false' and ../../../topology-name='base') or not(../efm-interface-name)";
                                    description
                                      "Track EFM Interface Name.";
                                  }
                                }  // case efm
                              }  // choice track-setting
                            }  // list nexthop-interface
                          }  // container nexthop-interfaces
    
                          container nexthop-interface-addresses {
                            description
                              "List of outbound interfaces and next hops.";
                            list nexthop-interface-address {
                              must
                                "not(../../nexthop-vrf-onlys/nexthop-vrf-only)";
                              key "interface-name address";
                              description
                                "Configure outbound interfaces and next hops.";
                              leaf interface-name {
                                type string {
                                  length "0..63";
                                }
                                must
                                  "../interface-name!=''";
                                description
                                  "Configure outbound interface of the route.";
                              }
    
                              leaf address {
                                type inet:ip-address-no-zone;
                                must
                                  "not(../address='0.0.0.0')";
                                description
                                  "Next hop IP address of a route.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
    
                              leaf cost {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                must
                                  "../ldp-sync='false'";
                                description
                                  "Cost of static route.";
                              }
    
                              leaf permanent {
                                type boolean;
                                must
                                  "../../../topology-name='base' or ../permanent='false'";
                                default "false";
                                description
                                  "Enable/disable permanent advertisement of a static route.";
                              }
    
                              leaf no-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being advertised.";
                              }
    
                              leaf no-install {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being delivered to the FIB.";
                              }
    
                              leaf ldp-sync {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the synchronization between LDP and a static route.";
                              }
    
                              leaf inter-protocol-ecmp {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable inter-protocol load balancing among a static route and the routes of dynamic routing protocols.";
                              }
    
                              choice track-setting {
                                description
                                  "Track set.";
                                case bfd-session {
                                  description
                                    "Track BFD.";
                                  leaf bfd-session-name {
                                    type leafref {
                                      path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                                    }
                                    must
                                      "(../permanent='false' and ../../../topology-name='base') or not(../bfd-session-name)";
                                    description
                                      "Bind a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                                  }
                                }  // case bfd-session
    
                                case bfd-enable {
                                  description
                                    "Track dynamic BFD.";
                                  leaf bfd-enable {
                                    type boolean;
                                    must
                                      "(../permanent='false' and ../../../topology-name='base') and ../bfd-enable='true'";
                                    description
                                      "Enable/disable the function of binding a dynamic BFD session to a static route. Dynamic BFD sessions can quickly detect link changes for static routes, which improves network reliability. Precaution: When enabling BFD for a single static route, you need to check whether BFD parameters are set for the static route.";
                                  }
                                }  // case bfd-enable
    
                                case efm {
                                  description
                                    "Track EFM.";
                                  leaf efm-interface-name {
                                    type leafref {
                                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                    }
                                    must
                                      "(../../../../../../../l3vpn:type='ipv4-unicast' and ../permanent='false' and ../../../topology-name='base') or not(../efm-interface-name)";
                                    description
                                      "Track EFM Interface Name.";
                                  }
                                }  // case efm
                              }  // choice track-setting
                            }  // list nexthop-interface-address
                          }  // container nexthop-interface-addresses
    
                          container nexthop-addresses {
                            description
                              "List of next hops.";
                            list nexthop-address {
                              must
                                "not(../../nexthop-vrf-onlys/nexthop-vrf-only)";
                              key "address";
                              description
                                "Configure next hops.";
                              leaf address {
                                type inet:ip-address-no-zone;
                                must
                                  "not(../address='0.0.0.0')";
                                description
                                  "Next hop IP address of a route.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
    
                              leaf inherit-cost {
                                type boolean;
                                must
                                  "../permanent='false' or ../inherit-cost='false'";
                                default "false";
                                description
                                  "Enable/disable the function of allowing a static route to inherit the cost of a recursive route. The cost of the static route changes according to the cost of the recursive route.";
                              }
    
                              leaf permanent {
                                type boolean;
                                must
                                  "../../../topology-name='base' or ../permanent='false'";
                                default "false";
                                description
                                  "Enable/disable permanent advertisement of a static route.";
                              }
    
                              leaf no-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being advertised.";
                              }
    
                              leaf no-install {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being delivered to the FIB.";
                              }
    
                              leaf relay-host-route {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of recursing a static route to a host route.";
                              }
    
                              leaf inter-protocol-ecmp {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable inter-protocol load balancing among a static route and the routes of dynamic routing protocols.";
                              }
    
                              leaf relay-arp-vlink-route {
                                when
                                  "../relay-host-route='true'";
                                type boolean;
                                must
                                  "../../../../../../../l3vpn:type='ipv4-unicast'";
                                default "false";
                                description
                                  "Enable/disable static routes to be iterated only to ARP Vlink routes.";
                              }
    
                              choice track-setting {
                                description
                                  "Track set.";
                                case bfd-session {
                                  description
                                    "Track BFD.";
                                  leaf bfd-session-name {
                                    type leafref {
                                      path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                                    }
                                    must
                                      "(../permanent='false' and ../inherit-cost='false' and ../../../topology-name='base') or not(../bfd-session-name)";
                                    description
                                      "Bind a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                                  }
                                }  // case bfd-session
    
                                case bfd-enable {
                                  description
                                    "Track dynamic BFD.";
                                  leaf bfd-enable {
                                    type boolean;
                                    must
                                      "(../permanent='false' and ../inherit-cost='false' and ../../../topology-name='base') and ../bfd-enable='true'";
                                    description
                                      "Enable/disable the function of binding a dynamic BFD session to a static route. Dynamic BFD sessions can quickly detect link changes for static routes, which improves network reliability. Precaution: When enabling BFD for a single static route, you need to check whether BFD parameters are set for the static route.";
                                  }
                                }  // case bfd-enable
    
                                case efm {
                                  description
                                    "Track EFM.";
                                  leaf efm-interface-name {
                                    type leafref {
                                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                    }
                                    must
                                      "(../../../../../../../l3vpn:type='ipv4-unicast' and ../inherit-cost='false' and ../permanent='false' and ../../../topology-name='base') or not(../efm-interface-name)";
                                    description
                                      "Track EFM Interface Name.";
                                  }
                                }  // case efm
                              }  // choice track-setting
                            }  // list nexthop-address
                          }  // container nexthop-addresses
    
                          container nexthop-sdwans {
                            when
                              "(../../../../../../../ni:name='_public_' and ../../../../../l3vpn:type='ipv4-unicast') and ../topology-name='base'";
                            description
                              "List of SD-WAN next hops.";
                            list nexthop-sdwan {
                              must
                                "not(../../nexthop-vrf-onlys/nexthop-vrf-only)";
                              key "color";
                              description
                                "Configure SD-WAN next hops.";
                              leaf color {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Color of a static route.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
                            }  // list nexthop-sdwan
                          }  // container nexthop-sdwans
    
                          container nexthop-vrf-addresses {
                            when
                              "../topology-name='base'";
                            description
                              "List of inter-VPN next hops.";
                            list nexthop-vrf-address {
                              must
                                "not(../../nexthop-vrf-onlys/nexthop-vrf-only)";
                              key "vpn-destination-name address";
                              description
                                "Configure Inter-VPN next hops.";
                              leaf vpn-destination-name {
                                type leafref {
                                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                }
                                must
                                  "../../../../../../../../../ni:name!=current()";
                                description
                                  "Name of the destination VPN instance.";
                              }
    
                              leaf address {
                                type inet:ip-address-no-zone;
                                must
                                  "not(../address='0.0.0.0')";
                                description
                                  "Next hop IP address of a route.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
    
                              leaf inherit-cost {
                                type boolean;
                                must
                                  "../permanent='false' or ../inherit-cost='false'";
                                default "false";
                                description
                                  "Enable/disable the function of allowing a static route to inherit the cost of a recursive route. The cost of the static route changes according to the cost of the recursive route.";
                              }
    
                              leaf permanent {
                                type boolean;
                                must
                                  "../../../topology-name='base' or ../permanent='false'";
                                default "false";
                                description
                                  "Enable/disable permanent advertisement of a static route.";
                              }
    
                              leaf no-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being advertised.";
                              }
    
                              leaf no-install {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being delivered to the FIB.";
                              }
    
                              leaf relay-host-route {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of recursing a static route to a host route.";
                              }
    
                              leaf inter-protocol-ecmp {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable inter-protocol load balancing among a static route and the routes of dynamic routing protocols.";
                              }
    
                              leaf relay-arp-vlink-route {
                                when
                                  "../relay-host-route='true'";
                                type boolean;
                                must
                                  "../../../../../../../l3vpn:type='ipv4-unicast'";
                                default "false";
                                description
                                  "Enable/disable static routes to be iterated only to ARP Vlink routes.";
                              }
    
                              choice track-setting {
                                description
                                  "Track set.";
                                case bfd-session {
                                  description
                                    "Track BFD.";
                                  leaf bfd-session-name {
                                    type leafref {
                                      path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                                    }
                                    must
                                      "(../permanent='false' and ../inherit-cost='false' and ../../../topology-name='base') or not(../bfd-session-name)";
                                    description
                                      "Bind a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                                  }
                                }  // case bfd-session
    
                                case bfd-enable {
                                  description
                                    "Track dynamic BFD.";
                                  leaf bfd-enable {
                                    type boolean;
                                    must
                                      "(../permanent='false' and ../inherit-cost='false' and ../../../topology-name='base') and ../bfd-enable='true'";
                                    description
                                      "Enable/disable the function of binding a dynamic BFD session to a static route. Dynamic BFD sessions can quickly detect link changes for static routes, which improves network reliability. Precaution: When enabling BFD for a single static route, you need to check whether BFD parameters are set for the static route.";
                                  }
                                }  // case bfd-enable
    
                                case efm {
                                  description
                                    "Track EFM.";
                                  leaf efm-interface-name {
                                    type leafref {
                                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                    }
                                    must
                                      "(../../../../../../../l3vpn:type='ipv4-unicast' and ../inherit-cost='false' and ../permanent='false' and ../../../topology-name='base') or not(../efm-interface-name)";
                                    description
                                      "Track EFM Interface Name.";
                                  }
                                }  // case efm
                              }  // choice track-setting
                            }  // list nexthop-vrf-address
                          }  // container nexthop-vrf-addresses
    
                          container nexthop-vrf-sdwans {
                            when
                              "../../../../../l3vpn:type='ipv4-unicast' and ../topology-name='base'";
                            description
                              "List of inter-VPN SD-WAN next hops.";
                            list nexthop-vrf-sdwan {
                              must
                                "not(../../nexthop-vrf-onlys/nexthop-vrf-only)";
                              key "vpn-destination-name color";
                              description
                                "Configure Inter-VPN SD-WAN next hops.";
                              leaf vpn-destination-name {
                                type leafref {
                                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                }
                                must
                                  "../../../../../../../../../ni:name!=current() and ../vpn-destination-name='_public_'";
                                description
                                  "Name of the destination VPN instance.";
                              }
    
                              leaf color {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Color of a static route.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
    
                              leaf vn-id {
                                type uint32 {
                                  range
                                    "1..16777215";
                                }
                                mandatory true;
                                description
                                  "Virtual network ID of a static route.";
                              }
                            }  // list nexthop-vrf-sdwan
                          }  // container nexthop-vrf-sdwans
    
                          container nexthop-vrf-onlys {
                            when
                              "../topology-name='base'";
                            description
                              "List of VPN instances as next hops.";
                            list nexthop-vrf-only {
                              key "vpn-destination-name";
                              description
                                "Configure VPN instances as next hops.";
                              leaf vpn-destination-name {
                                type leafref {
                                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                }
                                must
                                  "../../../../../../../../../ni:name!=current()";
                                description
                                  "Name of the destination VPN instance.";
                              }
    
                              leaf preference {
                                ext:dynamic-default;
                                type int32 {
                                  range "1..255";
                                }
                                description
                                  "Priority of a static route. If the parameter is not configured, the global default value is used.
    To change the global default priority of IPv4 static routes, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 static routes, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:preference object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                              }
    
                              leaf description {
                                type string {
                                  length
                                    "1..150";
                                }
                                description
                                  "Description of a static route.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Tag of a static route.";
                              }
    
                              leaf no-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being advertised.";
                              }
    
                              leaf no-install {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of preventing a static route from being delivered to the FIB.";
                              }
                            }  // list nexthop-vrf-only
                          }  // container nexthop-vrf-onlys
                        }  // list unicast-route2
                      }  // container unicast-route2s
    
                      container ipv4-multicast-routes {
                        when
                          "../../../l3vpn:type='ipv4-unicast'";
                        description
                          "List of multicast static routes.";
                        list ipv4-multicast-route {
                          key "prefix mask-length next-hop interface-name";
                          description
                            "Configure a multicast static route. The RPF check is performed based on multicast static routes. An RPF interface and an RPF neighbor can be specified for a packet source on the local device by configuring a multicast static route. Multicast static routes can provide two functions in different scenarios:
    1. Changing an RPF route: When the multicast topology is the same as the unicast topology on a network, the paths for transmitting multicast data are consistent with that for transmitting unicast data. The RPF route can be configured as a multicast route to work as a transmission path different from unicast transmission paths.
    2. Connecting an RPF route: This method is used on a network where unicast routes are blocked, no multicast static route is configured, and therefore no RFP route can be used to forward packets. An RPF multicast static route can be configured after an RPF check, and then can be used to forward packets.";
                          leaf prefix {
                            type inet:ipv4-address-no-zone;
                            description
                              "Destination IP address.";
                          }
    
                          leaf mask-length {
                            type uint8 {
                              range "0..32";
                            }
                            description
                              "Mask length of the destination IP address.";
                          }
    
                          leaf next-hop {
                            type inet:ipv4-address-no-zone;
                            description
                              "Next hop IP address of a route.";
                          }
    
                          leaf interface-name {
                            type string {
                              length "0..63";
                            }
                            must
                              "(../interface-name!='' and ../next-hop='0.0.0.0') or (not(../next-hop='0.0.0.0') and ../interface-name='')";
                            description
                              "Transmission interface of a route.";
                          }
    
                          leaf preference {
                            type uint32 {
                              range "1..255";
                            }
                            default "1";
                            description
                              "Priority of a route.";
                          }
    
                          leaf interface-state {
                            type string {
                              length "1..8";
                            }
                            config false;
                            description
                              "Interface status.";
                          }
    
                          leaf bfd-detect {
                            type string {
                              length "1..36";
                            }
                            config false;
                            description
                              "Establishment status of a BFD session:
    Disable: indicates that the BFD session is not enabled.
    Up: indicates that the BFD session is established successfully.
    Down: indicates that the BFD session fails to be established.";
                          }
    
                          leaf state {
                            type string {
                              length "1..20";
                            }
                            config false;
                            description
                              "Route selection result:
    Active Primary: indicates an active primary route.
    Active Backup: indicates an active backup route.
    Inactive Valid: indicates a route that takes part in the route selection but is not preferred.
    Inactive Invalid: indicates a route that cannot take part in the route selection.";
                          }
    
                          leaf indirect-id {
                            type pub-type:hex-binary;
                            config false;
                            description
                              "Keyword of indirect next hop.";
                          }
    
                          leaf local-address {
                            type inet:ip-address-no-zone;
                            config false;
                            description
                              "IP address of the local interface. If no IP address is configured for the local interface, this item is displayed as 0.0.0.0.";
                          }
    
                          leaf remote-ip {
                            type inet:ip-address-no-zone;
                            config false;
                            description
                              "IP address of the remote P2P interface. If no IP address is configured for the remote P2P interface, this item is displayed as 0.0.0.0.";
                          }
    
                          leaf relay-nexthop {
                            type inet:ip-address-no-zone;
                            config false;
                            description
                              "Next hop address to which a static route is iterated. If the static route is iterated to a tunnel, this item is displayed as 0.0.0.0.";
                          }
    
                          leaf relay-interface {
                            type string {
                              length "0..63";
                            }
                            config false;
                            description
                              "Name of an iteration outbound interface. If the static route is iterated to a tunnel, this item is displayed as a tunnel name.";
                          }
    
                          leaf tunnel-id {
                            type string {
                              length "1..21";
                            }
                            config false;
                            description
                              "ID of a tunnel.";
                          }
                        }  // list ipv4-multicast-route
                      }  // container ipv4-multicast-routes
    
                      container bfd-templates {
                        description
                          "List of parameters configured in a BFD template.";
                        list bfd-template {
                          key "interface-name nexthop";
                          description
                            "Configure a dynamic BFD template and related parameters for static routes. When configuring dynamic BFD for a single static route, check whether a BFD template has been configured for the static route. If the BFD template is not configured, dynamic BFD for the static route fails to be enabled. You can search for the corresponding BFD template based on the static route's outbound interface, next hop, and VPN instance to which the next hop belongs.";
                          leaf interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "Transmission interface of a route. When configured on a private network, the private network bound to the interface must be consistent with it.";
                          }
    
                          leaf nexthop {
                            type inet:ip-address-no-zone;
                            description
                              "Next hop address.";
                          }
    
                          leaf local-address {
                            type inet:ip-address-no-zone;
                            must
                              "(../local-address!='0.0.0.0') or not(../interface-name='')";
                            default "0.0.0.0";
                            description
                              "Local address.";
                          }
    
                          leaf min-tx-interval {
                            ext:dynamic-default;
                            type uint32 {
                              range
                                "3..4294967295";
                            }
                            units "ms";
                            description
                              "Minimum interval at which BFD packets are sent to the peer end. If no minimum interval is specified, the global default minimum value is used.
    To change the global default priority of IPv4 BFD templates, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:min-tx-interval object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 BFD templates, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:min-tx-interval object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                          }
    
                          leaf min-rx-interval {
                            ext:dynamic-default;
                            type uint32 {
                              range
                                "3..4294967295";
                            }
                            units "ms";
                            description
                              "Minimum interval at which BFD packets are received from the peer end. If no minimum interval is specified, the global default value is used.
    To change the global default priority of IPv4 BFD templates, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:min-rx-interval object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 BFD templates, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:min-rx-interval object or the PAF file. The global default priority varies according to hardware. To query the default value, you can perform a get operation.";
                          }
    
                          leaf multiplier {
                            ext:dynamic-default;
                            type uint32 {
                              range "3..50";
                            }
                            description
                              "Local detection multiplier. If no detection multiplier is specified locally, the global default value is used.
    To change the global default priority of IPv4 BFD templates, use the /rt:routing/rt:static-routing/rt:ipv4-site/rt:multiplier object. To query the default value, you can perform a get operation.
    To change the global default priority of IPv6 BFD templates, use the /rt:routing/rt:static-routing/rt:ipv6-site/rt:multiplier object. To query the default value, you can perform a get operation.";
                          }
    
                          leaf dhcp-enable {
                            type boolean;
                            must
                              "(../../../../../l3vpn:type='ipv4-unicast' and ../interface-name!='' and ../nexthop='0.0.0.0' and ../dhcp-enable='true') or ../dhcp-enable='false'";
                            default "false";
                            description
                              "Enable/disable the function of associating static routes with DHCP.";
                          }
                        }  // list bfd-template
                      }  // container bfd-templates
    
                      container route-frr-set {
                        description
                          "Configure FRR.";
                        leaf unicast-route-frr-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable FRR. Before configuring FRR for VPN static routes, you need to configure VPN instances.";
                        }
    
                        leaf multicast-route-frr-enable {
                          when
                            "../../../../l3vpn:type='ipv4-unicast'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable FRR. Before configuring FRR for multicast VPN static routes, you need to configure VPN instances.";
                        }
                      }  // container route-frr-set
    
                      container ipv4-routes {
                        config false;
                        description
                          "List of static routes.";
                        list ipv4-route {
                          key "topology-name prefix mask-length interface-name vpn-destination-name next-hop relay-next-hop relay-interface-name tunnel-id color";
                          description
                            "Operational state of the IPv4 static routing table.";
                          leaf topology-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                            }
                            description
                              "Name of the specified topology.";
                          }
    
                          leaf prefix {
                            type inet:ip-address-no-zone;
                            description
                              "Destination IP address.";
                          }
    
                          leaf mask-length {
                            type uint8 {
                              range "0..128";
                            }
                            description
                              "Mask length of an IP address.";
                          }
    
                          leaf interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "Transmission interface of a route.";
                          }
    
                          leaf vpn-destination-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            description
                              "Name of the destination VPN instance.";
                          }
    
                          leaf next-hop {
                            type inet:ip-address-no-zone;
                            description
                              "Next-hop IP address of a route.";
                          }
    
                          leaf relay-next-hop {
                            type inet:ip-address-no-zone;
                            description
                              "Next hop address to which a static route is iterated. If the static route is iterated to a tunnel, this item is displayed as 0.0.0.0.";
                          }
    
                          leaf relay-interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "Name of an iteration outbound interface. If the static route is iterated to a tunnel, this item is displayed as a tunnel name.";
                          }
    
                          leaf tunnel-id {
                            type string {
                              length "1..21";
                            }
                            description
                              "ID of a tunnel.";
                          }
    
                          leaf color {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Color of static route.";
                          }
    
                          leaf preference {
                            type uint32 {
                              range "1..255";
                            }
                            description
                              "Priority of a static routing protocol. If no priority is specified for the protocol, the global default priority is used.";
                          }
    
                          leaf cost {
                            type uint32;
                            description
                              "Cost of static route.";
                          }
    
                          leaf tag {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Tag of a static route.";
                          }
    
                          leaf interface-state {
                            type string {
                              length "1..8";
                            }
                            description
                              "Interface status.";
                          }
    
                          leaf state {
                            type string {
                              length "1..25";
                            }
                            description
                              "Route selection result:
    Active Primary: indicates an active primary route.
    Active Backup: indicates an active backup route.
    Inactive Valid: indicates a route that takes part in the route selection but is not preferred.
    Inactive Invalid: indicates a route that cannot take part in the route selection.";
                          }
    
                          leaf indirect-id {
                            type pub-type:hex-binary;
                            description
                              "Keyword of indirect next hop.";
                          }
    
                          leaf local-address {
                            type inet:ip-address-no-zone;
                            description
                              "IP address of the local interface.";
                          }
    
                          leaf remote-ip {
                            type inet:ip-address-no-zone;
                            description
                              "IP address of the remote P2P interface.";
                          }
    
                          leaf inherit-cost {
                            type boolean;
                            description
                              "The cost value of the static route will change according to the iterative route cost value.";
                          }
    
                          leaf label {
                            type uint32;
                            description "Label.";
                          }
    
                          leaf permanent {
                            type boolean;
                            description
                              "Static route permanent advertisement status.";
                          }
    
                          leaf no-advertise {
                            type boolean;
                            description
                              "No advertise the static route.";
                          }
    
                          leaf no-install {
                            type boolean;
                            description
                              "No install the static route.";
                          }
    
                          leaf bfd-type {
                            type string {
                              length "0..15";
                            }
                            description
                              "Type of BFD enabled for the static route.";
                          }
    
                          leaf bfd-session-name {
                            type leafref {
                              path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                            }
                            description
                              "Binds a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                          }
    
                          leaf bfd-detect {
                            type string {
                              length "1..36";
                            }
                            description
                              "Establishment status of a BFD session:
    Disable: indicates that the BFD session is not enabled.
    Up: indicates that the BFD session is established successfully.
    Down: indicates that the BFD session fails to be established.";
                          }
    
                          leaf efm-interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "EFM interface name.";
                          }
    
                          leaf efm-detect {
                            type string {
                              length "1..8";
                            }
                            description
                              "Detection status of EFM:
    Disable: indicates that the EFM detection is not enabled.
    Up: indicates the EFM detection succeeds.
    Down: indicates the EFM detection fails.
    UNKNOWN: indicates the detection status of the EFM test instance is no result.";
                          }
    
                          leaf nqa-detect {
                            type string {
                              length "1..8";
                            }
                            description
                              "Detection status of an NQA test instance:
    Disable: indicates that the NQA test instance is not enabled.
    Up: indicates the detection of the NQA test instance succeeds.
    Down: indicates the detection of the NQA test instance fails.
    UNKNOWN: indicates the detection status of the NQA test instance is no result.";
                          }
                        }  // list ipv4-route
                      }  // container ipv4-routes
    
                      container ipv6-routes {
                        config false;
                        description
                          "List of static routes.";
                        list ipv6-route {
                          key "topology-name prefix mask-length interface-name vpn-destination-name next-hop relay-next-hop relay-interface-name tunnel-id";
                          description
                            "Operational state of the IPv6 static routing table.";
                          leaf topology-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                            }
                            description
                              "Name of the specified topology.";
                          }
    
                          leaf prefix {
                            type inet:ip-address-no-zone;
                            description
                              "Destination IP address.";
                          }
    
                          leaf mask-length {
                            type uint8 {
                              range "0..128";
                            }
                            description
                              "Mask length of an IP address.";
                          }
    
                          leaf interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "Transmission interface of a route.";
                          }
    
                          leaf vpn-destination-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            description
                              "Name of the destination VPN instance.";
                          }
    
                          leaf next-hop {
                            type inet:ip-address-no-zone;
                            description
                              "Next-hop IP address of a route.";
                          }
    
                          leaf relay-next-hop {
                            type inet:ip-address-no-zone;
                            description
                              "Next hop address to which a static route is iterated. If the static route is iterated to a tunnel, this item is displayed as 0.0.0.0.";
                          }
    
                          leaf relay-interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "Name of an iteration outbound interface. If the static route is iterated to a tunnel, this item is displayed as a tunnel name.";
                          }
    
                          leaf tunnel-id {
                            type string {
                              length "1..21";
                            }
                            description
                              "ID of a tunnel.";
                          }
    
                          leaf preference {
                            type uint32 {
                              range "1..255";
                            }
                            description
                              "Priority of a static routing protocol. If no priority is specified for the protocol, the global default priority is used.";
                          }
    
                          leaf cost {
                            type uint32;
                            description
                              "Cost of static route.";
                          }
    
                          leaf tag {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Tag of a static route.";
                          }
    
                          leaf interface-state {
                            type string {
                              length "1..8";
                            }
                            description
                              "Interface status.";
                          }
    
                          leaf state {
                            type string {
                              length "1..25";
                            }
                            description
                              "Route selection result:
    Active Primary: indicates an active primary route.
    Active Backup: indicates an active backup route.
    Inactive Valid: indicates a route that takes part in the route selection but is not preferred.
    Inactive Invalid: indicates a route that cannot take part in the route selection.";
                          }
    
                          leaf indirect-id {
                            type pub-type:hex-binary;
                            description
                              "Keyword of indirect next hop.";
                          }
    
                          leaf local-address {
                            type inet:ip-address-no-zone;
                            description
                              "IP address of the local interface.";
                          }
    
                          leaf remote-ip {
                            type inet:ip-address-no-zone;
                            description
                              "IP address of the remote P2P interface.";
                          }
    
                          leaf inherit-cost {
                            type boolean;
                            description
                              "The cost value of the static route will change according to the iterative route cost value.";
                          }
    
                          leaf label {
                            type uint32;
                            description "Label.";
                          }
    
                          leaf permanent {
                            type boolean;
                            description
                              "Static route permanent advertisement status.";
                          }
    
                          leaf no-advertise {
                            type boolean;
                            description
                              "No advertise the static route.";
                          }
    
                          leaf no-install {
                            type boolean;
                            description
                              "No install the static route.";
                          }
    
                          leaf bfd-type {
                            type string {
                              length "0..15";
                            }
                            description
                              "Type of BFD enabled for the static route.";
                          }
    
                          leaf bfd-session-name {
                            type leafref {
                              path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                            }
                            description
                              "Binds a static BFD session to a static route. The static BFD session can detect the session link status and quickly detect link status changes, which improves network reliability.";
                          }
    
                          leaf bfd-detect {
                            type string {
                              length "1..36";
                            }
                            description
                              "Establishment status of a BFD session:
    Disable: indicates that the BFD session is not enabled.
    Up: indicates that the BFD session is established successfully.
    Down: indicates that the BFD session fails to be established.";
                          }
    
                          leaf efm-interface-name {
                            type string {
                              length "0..63";
                            }
                            description
                              "EFM interface name.";
                          }
    
                          leaf efm-detect {
                            type string {
                              length "1..8";
                            }
                            description
                              "Detection status of EFM:
    Disable: indicates that the EFM detection is not enabled.
    Up: indicates the EFM detection succeeds.
    Down: indicates the EFM detection fails.
    UNKNOWN: indicates the detection status of the EFM test instance is no result.";
                          }
    
                          leaf nqa-detect {
                            type string {
                              length "1..8";
                            }
                            description
                              "Detection status of an NQA test instance:
    Disable: indicates that the NQA test instance is not enabled.
    Up: indicates the detection of the NQA test instance succeeds.
    Down: indicates the detection of the NQA test instance fails.
    UNKNOWN: indicates the detection status of the NQA test instance is no result.";
                          }
                        }  // list ipv6-route
                      }  // container ipv6-routes
                    }  // container static-routing
                  }  // container routing
    
                  container ospf-import-rts {
                    description
                      "List of import route information from another routing protocol.";
                    list ospf-import-rt {
                      key "src-vrf process-id";
                      description
                        "Configure import route information from another routing protocol.";
                      leaf src-vrf {
                        type leafref {
                          path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                        }
                        must
                          "../src-vrf!=../../../../../ni:name";
                        description
                          "VPN instance route information.";
                      }
    
                      leaf process-id {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description
                          "Process ID.";
                      }
    
                      leaf valid-route {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the valid routes.";
                      }
    
                      choice policy-type {
                        description
                          "Type of import route rule.";
                        case route-policy {
                          description
                            "Set a route policy name.";
                          leaf route-policy {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Set a route policy name.";
                          }
                        }  // case route-policy
    
                        case route-filter {
                          description
                            "Set a route filter name.";
                          leaf route-filter {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Set a route filter name.";
                          }
                        }  // case route-filter
                      }  // choice policy-type
                    }  // list ospf-import-rt
                  }  // container ospf-import-rts
    
                  container evpn {
                    when
                      "../../../ni:name!='_public_' and (../l3vpn:route-distinguisher or ../../../../../ni:global/ni:route-distinguisher-auto-ip)";
                    description
                      "Configure EVPN.";
                    leaf import-policy-name {
                      type leafref {
                        path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                      }
                      description
                        "Specifies the name of an import routing policy.";
                    }
    
                    leaf export-policy-name {
                      type leafref {
                        path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                      }
                      description
                        "Specifies the name of an export routing policy.";
                    }
    
                    leaf mpls-routing {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the EVPN MPLS layer 3 routing function.";
                    }
    
                    leaf tunnel-policy-name {
                      type leafref {
                        path "/tnlm:tunnel-management/tnlm:tunnel-policys/tnlm:tunnel-policy/tnlm:name";
                      }
                      description
                        "Specify tunnel policy name for EVPN.";
                    }
    
                    leaf default-color {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Set default color for nexthop iteration.";
                    }
    
                    leaf irb2ip {
                      type irb2ip-enable-type;
                      default "default";
                      description
                        "Enable/disable IRB routing rebirth into prefix routing.";
                    }
    
                    container extend-vpn-targets {
                      description
                        "List of extended RTs.";
                      list extend-vpn-target {
                        key "vrf-rt-value vrf-rt-type";
                        description
                          "Configure RT (VPN Target) to control route advertisement between network nodes. Before sending a VPN route to a PE, the local PE adds an Export RT to the route. After receiving a route from another PE, the local PE determines whether the route will be added to the VPN instance based on the local Import RT and the Export RT that is added to the VPN route.";
                        leaf vrf-rt-value {
                          type string {
                            length "3..21";
                          }
                          description
                            "The formats of a VPN target value are as follows:
    (1) 16-bit AS number : 32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the VPN Target value cannot be 0:0.
    (2) 32-bit IP address: 16-bit user-defined number, for example: 192.168.122.15:1.The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    (3) 32-bit AS number :16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535 or 0 to 4294967295, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the VPN Target value cannot be 0.0:0.";
                        }
    
                        leaf vrf-rt-type {
                          type vrf-rt-type;
                          description
                            "RT types are as follows:
    export-extcommunity: Specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN. import-extcommunity: Receives routes that carry the specified extended community attribute value.";
                        }
                      }  // list extend-vpn-target
                    }  // container extend-vpn-targets
    
                    container state {
                      config false;
                      description
                        "Operational state of EVPN attribute.";
                      leaf label {
                        type uint32;
                        config false;
                        description
                          "EVPN label of the VPN instance address family.";
                      }
                    }  // container state
                  }  // container evpn
    
                  container bas {
                    description
                      "Configure the bas under vpn-instance.";
                    container ipv4-address-manage {
                      when
                        "../../l3vpn:type='ipv4-unicast' and ../../../../ni:name!='_public_'";
                      description
                        "Configure the bas-pool information about vpn-instance.";
                      container warning-threshold {
                        description
                          "Configure the warning threshold of IPv4 pools who bound with the vpn instance.";
                        leaf percent-value {
                          type uint8 {
                            range "0..100";
                          }
                          default "80";
                          description
                            "The percentage of IPv4 pools warning threshold.";
                        }
                      }  // container warning-threshold
                    }  // container ipv4-address-manage
    
                    container ipv6-address-manage {
                      when
                        "../../l3vpn:type='ipv6-unicast' and ../../../../ni:name!='_public_'";
                      description
                        "Configure the vpn instance who is enabled the IPv6 address family.";
                      container warning-threshold {
                        description
                          "Configure the warning threshold of IPv6 pools who bound with the vpn instance.";
                        leaf value {
                          type uint8 {
                            range "0..100";
                          }
                          default "80";
                          description
                            "The percentage of IPv6 pools warning threshold.";
                        }
                      }  // container warning-threshold
                    }  // container ipv6-address-manage
                  }  // container bas
    
                  container vrfpipe {
                    description
                      "Configure L3VPN pipe.";
                    leaf split-mode {
                      type boolean;
                      must
                        "((../split-mode='false' and ../pipe-mode and not(../ingress-pipe-mode) and not(../egress-pipe-mode)) or (../split-mode='true' and not(../pipe-mode) and ../ingress-pipe-mode and ../egress-pipe-mode))";
                      default "false";
                      description
                        "Enable/disable pipe mode.";
                    }
    
                    leaf pipe-mode {
                      when
                        "../split-mode='false'";
                      type l3vpn-pipe-mode;
                      default "uniform";
                      description "Pipe mode.";
                    }
    
                    leaf ingress-pipe-mode {
                      when
                        "../split-mode='true'";
                      type l3vpn-ingpipe-mode;
                      default "uniform";
                      description
                        "Ingress pipe mode.";
                    }
    
                    leaf service-class {
                      when
                        "(../pipe-mode='pipe' or ../pipe-mode='shortpipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortpipe')";
                      type l3vpn-service-class;
                      default "be";
                      description
                        "Service class.";
                    }
    
                    leaf color {
                      when
                        "(../pipe-mode='pipe' or ../pipe-mode='shortpipe'  or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortpipe')";
                      type l3vpn-color;
                      default "green";
                      description "Color.";
                    }
    
                    leaf egress-pipe-mode {
                      when
                        "../split-mode='true'";
                      type l3vpn-egpipe-mode;
                      default "uniform";
                      description
                        "Egress pipe mode.";
                    }
    
                    leaf domain-name {
                      when
                        "(../pipe-mode='shortpipe'  or ../egress-pipe-mode='shortpipe')";
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                      }
                      default "default";
                      description
                        "DS domain name.";
                    }
                  }  // container vrfpipe
    
                  container vpn-ttlmode {
                    description
                      "Configure TTL mode.";
                    leaf ttlmode {
                      type l3vpn-ttl-mode;
                      default "pipe";
                      description
                        "TTL mode value.";
                    }
                  }  // container vpn-ttlmode
    
                  container isis-import-rts {
                    description
                      "List of import route information from another routing protocol.";
                    list isis-import-rt {
                      key "src-vrf process-id";
                      description
                        "Configure import route information from another routing protocol.";
                      leaf src-vrf {
                        type leafref {
                          path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                        }
                        must
                          "../src-vrf!=../../../../../ni:name";
                        description
                          "VPN instance route information.";
                      }
    
                      leaf process-id {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description
                          "Process ID.";
                      }
    
                      leaf valid-route {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the valid routes.";
                      }
    
                      choice policy-type {
                        description
                          "Type of import route rule.";
                        case route-policy {
                          description
                            "Set a route policy name.";
                          leaf route-policy {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Set a route policy name.";
                          }
                        }  // case route-policy
    
                        case route-filter {
                          description
                            "Set a route filter name.";
                          leaf route-filter {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Set a route filter name.";
                          }
                        }  // case route-filter
                      }  // choice policy-type
                    }  // list isis-import-rt
                  }  // container isis-import-rts
                }  // list af
              }  // container afs
    
              container bgp {
                description
                  "Configure BGP network instance. All nodes of private VPN Instance in this container can be used only when the value of the global BGP enabling node (/bgp:bgp/bgp:global/bgp:yang-enable) is set to true.";
                container base-process {
                  ext:generated-by "system" {
                    when "../../ni:name = '_public_'";
                    description "The BGP public instance is generated automatically when BGP is enabled.";
                  }
                  when
                    "/bgp:bgp/bgp:base-process/bgp:enable='true'";
                  presence "Create vrf session.";
                  description
                    "Enable/disable BGP instances.";
                  leaf router-id-auto-select {
                    when
                      "../../../ni:name!='_public_'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable router ID auto select. If a BGP VPN instance is not enabled to select a router ID, a router ID can be configured for the BGP VPN instance. If no router ID is configured for the BGP VPN instance, the BGP VPN instance inherits the router ID of the public network instance. If a BGP VPN instance is enabled to select a router ID, it uses the address of an interface bound to a VPN as the router ID based on the following rules:
    
    1. If Loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the Loopback interfaces is selected as the router ID.
    
    2. If there is no Loopback interface configured with an IP address, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.";
                  }
    
                  leaf router-id {
                    when
                      "not(../router-id-auto-select) or ../router-id-auto-select = 'false'";
                    type inet:ipv4-address-no-zone;
                    description
                      "ID of a router that is in IPv4 address format. Certain dynamic routing protocols require a router ID. If no router ID is specified for a router when these protocols are enabled, the router ID in the RM module is used by default. The default router ID in the RM module is 0.0.0.0 when the router is not configured with any interface.
    The rules for selecting a router ID are as follows:
    1. If a router ID is set through this configuration, the set router ID is used. If the router ID is not set, a router ID is selected according to the following rules:
    (1) If loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the loopback interfaces is selected as the router ID.
    (2) If no loopback interface configured with an IP address exists, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.
    The router ID is reselected only when the interface address that is selected as the router ID is deleted or changed. The router ID is not reselected in any of the following cases:
    a. The interface is Down.
    b. A loopback interface is configured when the IP address of a non-loopback interface is selected as the router ID.
    c. A larger IP address of an interface is configured.
    2. Each VPN instance selects the router ID from the addresses of the interfaces of the VPN instance according to the preceding rules.
    3. When both the AMB and SMB exist on the router, the system backs up the router ID set through the related command and the router ID that is selected from IP addresses of the interfaces. After the active/standby switchover is performed, the system checks the validity of the router ID selected from the interface addresses. If the router ID is invalid, the system reselects a router ID.";
                  }
    
                  leaf effect-router-id {
                    type inet:ipv4-address-no-zone;
                    default "0.0.0.0";
                    config false;
                    description
                      "Router ID that takes effect.";
                  }
    
                  container afs {
                    description
                      "List of BGP address family instances.";
                    list af {
                      ext:generated-by "system" {
                        when "../../../../ni:name = '_public_'";
                        ext:filter "type = 'ipv4uni'";
                        description "The IPv4 unicast of the BGP public instance is generated automatically when BGP is enabled.";
                      }
                      key "type";
                      description
                        "Configure BGP address family instance. In public network instances, all types of address families can be configured. In IPv4 VPN instances, the IPv4 unicast, IPv4 flow, and IPv4 labeled unicast address families can be configured. In IPv6 VPN instances, the IPv6 unicast and IPv6 flow address families can be configured. The IPv4 address family in the BGP _public_ VPN instance cannot be deleted.";
                      leaf type {
                        type bgp:af-type;
                        description
                          "Address family type of a BGP instance.";
                      }
    
                      container ipv4-unicast {
                        when
                          "../type = 'ipv4uni'";
                        must
                          "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                        description
                          "Configure IPv4 unicast options.";
                        container common {
                          description
                            "Configure IPv4 unicast common options.";
                          leaf auto-frr {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP Auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                          }
    
                          leaf tunnel-selector-name {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Configure a tunnel selector and apply it to the BGP IPv4 unicast, BGP VPNv4 address families and BGP VPNv6 address families so that IPv4,VPNv4 and VPNv6 labeled routes can be iterated to tunnels based on the tunnel selector. By default, no tunnel selector is configured.";
                          }
    
                          leaf tunnel-selector-all {
                            when
                              "../tunnel-selector-name";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable tunnel selector for labeled, imported, and network segment routes.";
                          }
    
                          leaf maximum-load-balancing-ibgp {
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "not (../maximum-load-balancing>1 or ../maximum-load-balancing-eibgp or ../load-balancing-eibgp-enable='true') or ../maximum-load-balancing-ibgp=1";
                            default "1";
                            description
                              "Specify the maximum number of equal-cost IBGP routes. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf maximum-load-balancing-ebgp {
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "not (../maximum-load-balancing>1 or ../maximum-load-balancing-eibgp or ../load-balancing-eibgp-enable='true') or ../maximum-load-balancing-ebgp=1";
                            default "1";
                            description
                              "Specify the maximum number of equal-cost EBGP routes. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf nexthop-select-depend-type {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type select-depend-type;
                            default "depend-ip";
                            description
                              "Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                          }
    
                          leaf nexthop-inherit-ip-cost {
                            when
                              "../nexthop-select-depend-type='depend-tunnel'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop iteration mode to IP. Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP.";
                          }
    
                          leaf nexthop-resolve-aigp {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable route with AIGP attribute for route selection.";
                          }
    
                          leaf summary-automatic {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable automatic summarization for imported routes. Manual summarization takes precedence over automatic summarization. After automatic summarization is enabled, BGP summarizes routes based on the natural network segment (for example, 10.1.1.1/24 and 10.2.1.1/24 are summarized into 10.0.0.0/8, a Class A address), and sends only the summarized route to peers. This reduces the number of routes.";
                          }
    
                          leaf best-route-bit-error-detection {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to reroute traffic when a bit error event occurs.";
                          }
    
                          leaf supernet-unicast-advertise {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to advertise supernet unicast routes.";
                          }
    
                          leaf supernet-label-advertise {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable the function to advertise supernet labeled routes.";
                          }
    
                          leaf lsp-mtu {
                            type uint16 {
                              range "46..65535";
                            }
                            default "1500";
                            description
                              "BGP LSP MTU.";
                          }
    
                          leaf label-free-delay {
                            type uint8 {
                              range "0..180";
                            }
                            units "s";
                            default "0";
                            description
                              "Label Free Delay.";
                          }
    
                          leaf bestroute-med-confederation {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare MED value only within the federation.";
                          }
    
                          leaf bestroute-as-path-ignore {
                            type boolean;
                            must
                              "../bestroute-as-path-ignore = 'false' or ../load-balanc-as-path-ignore ='false' or not(../load-balanc-as-path-ignore)";
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path attribute when selecting the optimal route. By default, BGP uses the AS_Path attribute as one of route selection rules, and a route with a shorter AS_Path is preferred. After bestroute-as-path-ignore is selected, BGP does not compare the AS_Path length.";
                          }
    
                          leaf determin-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable deterministic MED so that the route selection result is relevant to the sequence in which routes are received.";
                          }
    
                          leaf best-external {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            must
                              "../best-external ='false' or ../determin-med ='false'";
                            default "false";
                            description
                              "Enable/disable best external route selection.";
                          }
    
                          leaf attribute-set-enable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the capability of processing attribute set.";
                          }
    
                          leaf attribute-set-mode {
                            when
                              "../attribute-set-enable='true'";
                            type bgp:attribute-set-type;
                            default "both";
                            description
                              "The processing mode of attribute set.";
                          }
    
                          leaf add-path-select-num {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type uint8 {
                              range "2..64";
                            }
                            must
                              "../determin-med ='false'";
                            description
                              "Number of Add-Path routes.";
                          }
    
                          leaf load-balanc-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same IGP cost can participate in load balancing.";
                          }
    
                          leaf load-balanc-as-path-ignore {
                            type boolean;
                            must
                              "../load-balanc-as-path-ignore ='false' or (../load-balanc-as-path-relax ='false' and ../bestroute-as-path-ignore ='false')";
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                          }
    
                          leaf load-balanc-as-path-relax {
                            type boolean;
                            must
                              "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                            default "false";
                            description
                              "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                          }
    
                          leaf maximum-load-balancing {
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1 or ../maximum-load-balancing-eibgp) or ../maximum-load-balancing=1";
                            default "1";
                            description
                              "Specify the maximum number of equal-cost routes in the BGP routing table. The value can be 1 or an integer greater than 1. The value depends on the associated license. Equal-cost BGP routes can be generated for load balancing only when the BGP routes meet the first nine rules of the route-selection policy and have the same AS-Path attribute. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf import-rib-nexthop-invariable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to advertise the route without modifying the next-hop.";
                          }
    
                          leaf route-relay-tunnel {
                            type boolean;
                            must
                              "not(../route-relay-tunnel='true' and /rt:routing/rt:routing-manage/rt:relay-tunnel/rt:enable='true')";
                            default "false";
                            description
                              "Enable/disable unicast route recursive-lookup tunnel.";
                          }
    
                          leaf route-relay-tunnel-selector {
                            when
                              "../route-relay-tunnel='true'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Unicast route tunnel selector name.";
                          }
    
                          leaf route-relay-tunnel-v6-selector {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Enable/disable unicast route recursive-lookup IPv6 tunnel by tunnel selector name.";
                          }
    
                          leaf bestroute-med-plus-igp {
                            type boolean;
                            must
                              "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                            default "false";
                            description
                              "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                          }
    
                          leaf bestroute-med-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of med product factor.";
                          }
    
                          leaf bestroute-igp-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of IGP cost product factor.";
                          }
    
                          leaf bestroute-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                          }
    
                          leaf bestroute-router-id-prior-clusterlist {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare originator before clusterlist in route selection.";
                          }
    
                          leaf bestroute-med-none-as-maximum {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP considers its MED as the largest MED value (4294967295). If a route does not carry MED, BGP considers its MED as the default value (0) during route selection.";
                          }
    
                          leaf bestroute-rd-large-first {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable a BGP device to select the route with the largest route distinguisher (RD) during route selection.";
                          }
    
                          leaf ebgp-ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing-ebgp and ../maximum-load-balancing-ebgp>1";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost EBGP routes is changed. When equal-cost EBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost EBGP routes is greater than 1.";
                          }
    
                          leaf ibgp-ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing-ibgp and ../maximum-load-balancing-ibgp>1";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost IBGP routes is changed. When equal-cost IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost IBGP routes is greater than 1.";
                          }
    
                          leaf ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing and ../maximum-load-balancing>1";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost routes is changed. When equal-cost BGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost BGP routes is greater than 1.";
                          }
    
                          leaf maximum-load-balancing-eibgp {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "../maximum-load-balancing-ibgp=1 and ../maximum-load-balancing-ebgp=1 and ../maximum-load-balancing=1 and ../load-balancing-eibgp-enable='false'";
                            description
                              "Specify the maximum number of equal-cost EBGP routes and IBGP routes. After the attribute is set, load balancing is performed among equal-cost BGP VPN routes, regardless of the route type, EBGP or IBGP. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf eibgp-ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing-eibgp";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost EBGP and IBGP routes is changed. When equal-cost EBGP and IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised.";
                          }
    
                          leaf load-balancing-eibgp-enable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            must
                              "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1 or ../maximum-load-balancing-eibgp) or ../load-balancing-eibgp-enable='false'";
                            default "false";
                            description
                              "Enable/disable EIBGP route load balancing.";
                          }
    
                          leaf nexthop-priority {
                            type nexthop-priority-address-type;
                            description
                              "Routes with next-hop IPv4 addresses and routes with next-hop IPv6 addresses coexist. If the next-hop address type is set to IPv4, routes with next-hop IPv4 addresses have a higher priority. If the next-hop address type is set to IPv6, routes with next-hop IPv6 addresses have a higher priority.";
                          }
    
                          leaf prefix-origin-as-validation {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the BGP prefix origin validation.";
                          }
    
                          leaf bestroute-origin-as-validation {
                            when
                              "../prefix-origin-as-validation='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the BGP origin AS validation result.";
                          }
    
                          leaf bestroute-allow-invalid-as {
                            when
                              "../bestroute-origin-as-validation='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable routes with BGP origin AS validation result invalid to be selected.";
                          }
    
                          leaf advertise-route-mode {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type bgp-advertise-route-mode;
                            default "all";
                            description
                              "VPN advertise route mode.";
                          }
    
                          leaf reoriginate-route {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable route reorigination.";
                          }
    
                          leaf rpd-policy-change-delay {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type uint16 {
                              range "0..180";
                            }
                            default "30";
                            description
                              "Specify the delay time of RPD policy's change.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          leaf always-compare-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare the MEDs of routes from peers in different ASs in route selection. If
     there are multiple reachable routes to the same destination, the route with the smallest MED is preferred. Do not use this option unless different ASs use the same IGP and route selection mode.";
                          }
    
                          leaf default-med {
                            type uint32;
                            default "0";
                            description
                              "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                          }
    
                          leaf nexthop-third-party {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP third-party next hop.";
                          }
    
                          leaf default-local-preference {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "100";
                            description
                              "The local preference of BGP routes.";
                          }
    
                          leaf default-route-import {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to import default routes into the BGP routing table. Default-route-imported must be used with import-routes so that default routes can be imported to the BGP routing table. If only import-routes is used, no default routes can be added to the BGP routing table. In addition, default-route-imported can only import the default routes in the routing table into the BGP routing table.";
                          }
    
                          leaf routerid-neglect {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore router IDs when selecting the optimal route. Comparing router IDs is the last resort in route selection. This means that if one optimal route must be selected and no other parameters can be used to break the tie, router IDs can be used. If this option is selected, the first received route will be selected as the optimal route, and BGP will ignore the router ID and peer address in route selection.";
                          }
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          leaf ext-community-change {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to change the extended community attribute.";
                          }
    
                          leaf active-route-advertise {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to advertise the optimal routes in the RM module to peers.";
                          }
    
                          leaf ebgp-interface-sensitive {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable the function of EBGP interface fast sensing. If this function is enabled, the sessions of directly connected EBGP peers are immediately cleared from the associated interface when the interface becomes down.";
                          }
    
                          leaf load-balancing-ucmp {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function of BGP UCMP.";
                          }
                        }  // container common
    
                        container preference {
                          description
                            "Configure parameters relating to options for BGP routes preference.";
                          choice set-value-or-policy {
                            default "set-value";
                            description
                              "Set BGP routes preference by value or policy.";
                            case set-value {
                              description
                                "Set BGP routes preference by value.";
                              leaf external {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of EBGP routes. The value is an integer. An EBGP route is the optimal route learned from a peer outside the local AS.";
                              }
    
                              leaf internal {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of IBGP routes. The value is an integer. An IBGP route is a route learned from a peer inside the local AS.";
                              }
    
                              leaf local {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of a local BGP route. A local route refers to an automatically or manually summarized route.";
                              }
                            }  // case set-value
    
                            case rtp-ref {
                              description
                                "Set BGP routes preference by route policy.";
                              leaf route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify a routing policy to filter routes so that a configured priority is applied to the routes that match the specified policy.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice set-value-or-policy
                        }  // container preference
    
                        container nexthop-recursive-lookup {
                          description
                            "Configure next hop iteration.";
                          container common {
                            description
                              "Configure next hop iteration common options.";
                            leaf restrain {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf default-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable default route.";
                            }
                          }  // container common
    
                          container delay {
                            description
                              "Configure time of next hop change responding delay.";
                            leaf time {
                              type uint8 {
                                range "1..100";
                              }
                              units "s";
                              description
                                "Specify the delay in responding to the next hop change.";
                            }
    
                            leaf no-critical-event-time {
                              type uint8 {
                                range "0..100";
                              }
                              units "s";
                              default "10";
                              description
                                "Specify the delay in responding to the next hop change on non critical relay change event.";
                            }
                          }  // container delay
                        }  // container nexthop-recursive-lookup
    
                        container import-routes {
                          description
                            "List of imported routes.";
                          list import-route {
                            key "protocol process-id";
                            description
                              "Configure route import. Routes of other protocol types can be imported by BGP. By default, BGP does not import routes of other protocol types.";
                            leaf protocol {
                              type bgp:ipv4-import-route-protocol-type;
                              description
                                "Routing protocol from which routes can be imported.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              description
                                "Process ID of an imported routing protocol. The process ID is 0, if the imported routing protocol is direct routes, static routes, UNRs, or OP-routes. The process ID must be specified range from 1 to 4294967295, if the imported routing protocol is RIP, OSPF, ISIS.";
                            }
    
                            leaf med {
                              type uint32;
                              description
                                "Specifies the MED metric of the imported route.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf non-relay-tunnel {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported route relay a tunnel.";
                            }
                          }  // list import-route
                        }  // container import-routes
    
                        container aggregate-routes {
                          description
                            "List of summarized routes.";
                          list aggregate-route {
                            key "address mask-length";
                            description
                              "Configure a summarized route in the BGP routing table. The local outbound interface of the summarized route is Null0. When another router receives the route, the route adds an outbound interface to the route. If the Origin attributes of the specific routes for the route summarization are different, the Origin attribute of the summarized route is that with the highest priority. Origin attributes are arranged in the priority order of complete > egp > igp. A summarized route carries the community attribute of each specific route.";
                            leaf address {
                              type inet:ip-address-no-zone;
                              must
                                "not(contains(../address,':'))";
                              description
                                "Specify the IPv4 address or IPv6 address of a summarized route. Only IPv4 summarized routes can be configured in the IPv4 address family and only IPv6 summarized routes can be configured in the IPv6 address family.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "1..128";
                              }
                              must
                                "../mask-length<=32";
                              description
                                "Specify the mask length of a summarized address.";
                            }
    
                            leaf as-set {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the generation of routes with the AS-SET attribute. This option can be used to create a summarized route. The AS_Path attribute of the summarized route contains the AS-Path attributes of the specific routes for the route summarization. Exercise caution when using this option if multiple AS_Paths need to be summarized to prevent route flapping.";
                            }
    
                            leaf detail-suppressed {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable detail-suppressed. Suppress the advertisement of specific routes for the route summarization. Only the summarized route is advertised.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf attribute-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify an attribute of summarized routes. If apply as-path is used to configure the AS_Path attribute that is used in the route Summarization policy, and the as-set keyword is set, the AS_Path attribute in the policy does not take effect. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
    
                                leaf origin-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a policy for generating summarized routes. Summarized routes are generated only when the routes match route-policy. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
    
                                leaf suppress-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify a policy for suppressing the advertisement of specified routes. The routes matching the policy are not advertised, and other routes are advertised. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf attribute-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf attribute-filter-parameter {
                                  when
                                    "../attribute-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
    
                                leaf origin-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf origin-filter-parameter {
                                  when
                                    "../origin-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
    
                                leaf suppress-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf suppress-filter-parameter {
                                  when
                                    "../suppress-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list aggregate-route
                        }  // container aggregate-routes
    
                        container aggregate-default-route {
                          description
                            "Configure aggregate default route.";
                          leaf origin-ip-prefix {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                            }
                            description
                              "Specify the name of an IPv4 prefix list for a summary default route. Only the name of an IPv4 prefix list can be configured in a BGP IPv4 address family.";
                          }
    
                          leaf attribute-policy {
                            when
                              "../origin-ip-prefix";
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Specify an attribute policy of a summary default route.";
                          }
                        }  // container aggregate-default-route
    
                        container network-routes {
                          description
                            "List of network routes.";
                          list network-route {
                            key "address mask-length";
                            description
                              "Configure a network route in the BGP routing table.";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specify the IP address advertised by BGP. An IPv4 address can be configured in the IPv4 address family. Note: During the configuration of a network route, the IP address is adjusted based on the mask. It is recommended that you click Synchronize All after creating a network route.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "0..32";
                              }
                              description
                                "Specify the mask length of an IP address.";
                            }
    
                            choice policy-type {
                              description
                                "Specify the route-policy or filter for route advertisement.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf non-relay-tunnel {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported route relay a tunnel.";
                            }
    
                            leaf label-index {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type uint32 {
                                range
                                  "0..4294967294";
                              }
                              description
                                "Management label value assigned for imported routes.";
                            }
                          }  // list network-route
                        }  // container network-routes
    
                        container advertise-route-to-evpns {
                          when
                            "../../../../../../ni:name!='_public_'";
                          description
                            "Configure advertise route protocol.";
                          list advertise-route-to-evpn {
                            key "protocol";
                            description
                              "Configure the advertise route protocol.";
                            leaf protocol {
                              type enumeration {
                                enum "all" {
                                  value 0;
                                  description
                                    "Advertise all the types of route protocol.";
                                }
                              }
                              description
                                "Route protocol.";
                            }
    
                            leaf import-multipath {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route import from multiple paths.";
                            }
    
                            leaf include-local-cross {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable local cross route to advertise l2vpn evpn.";
                            }
    
                            leaf advertise-route-mode {
                              type enumeration {
                                enum "all" {
                                  value 0;
                                  description
                                    "All:";
                                }
                                enum "best" {
                                  value 1;
                                  description
                                    "Best:";
                                }
                                enum "valid" {
                                  value 2;
                                  description
                                    "Valid:";
                                }
                              }
                              default "all";
                              description
                                "VPN advertise route mode to evrf.";
                            }
                          }  // list advertise-route-to-evpn
                        }  // container advertise-route-to-evpns
    
                        container import-ribs {
                          description
                            "List of imported RIBs configuration.";
                          list import-rib {
                            key "source-vpn source-address-family";
                            description
                              "Configure imported RIBs.";
                            leaf source-vpn {
                              type leafref {
                                path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                              }
                              must
                                "not(../../../../../../../../ni:name = current() and ../source-address-family = 'ipv4uni')";
                              description
                                "Source VPN name.";
                            }
    
                            leaf source-address-family {
                              type bgp:import-rib-ipv4-safi-type;
                              description
                                "Source address family type.";
                            }
    
                            leaf valid-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported valid route.";
                            }
    
                            leaf include-label-route {
                              when
                                "../source-address-family='ipv4uni'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported include label route.";
                            }
    
                            choice policy-type {
                              description
                                "Set policy or filter.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list import-rib
                        }  // container import-ribs
    
                        container import-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv4-import-filter-protocol-policy-type {
                            description
                              "Set IPv4 filter protocol policy.";
                            case acl-ref {
                              description
                                "ACL Route Policy.";
                              leaf acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl-ref
    
                            case ip-prefix-ref {
                              description
                                "IP prefix Policy.";
                              leaf ipv4-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 prefix list name.";
                              }
                            }  // case ip-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv4-import-filter-protocol-policy-type
                        }  // container import-filter-policy
    
                        container export-filter-policys {
                          description
                            "List of filtering policies.";
                          list export-filter-policy {
                            key "protocol process-id";
                            description
                              "Apply a filtering policy. It is used to filter the routes to be advertised to the peer. By default, routes are not filtered.";
                            leaf protocol {
                              type bgp:ipv4-export-filter-protocol-type;
                              description
                                "Specify the name of a routing protocol. The routing protocol takes effect only on the routes to be advertised. The IPv4 address family supports the direct, IS-IS, OSPF, RIP, and static routing protocols. The IPv6 unicast address family of a public network instance supports the direct, IS-IS, OSPFv3, RIPng, and static routing protocols. The IPv6 address family of a VPNv6 instance supports the direct, IS-IS, RIPng, and static routing protocols.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              description
                                "Specify the process ID required to be matched. The value is an integer ranging from 0 to 4294967295. If direct or static routes need to be filtered, no process ID is required.";
                            }
    
                            choice ipv4-filter-protocol-policy-type {
                              mandatory true;
                              description
                                "Set IPv4 filter protocol policy.";
                              case acl-ref {
                                description
                                  "ACL Route Policy.";
                                leaf acl-name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  description
                                    "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                                }
                              }  // case acl-ref
    
                              case ip-prefix-ref {
                                description
                                  "IP prefix Policy.";
                                leaf ipv4-prefix-filter {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Specify the IPv4 prefix list name.";
                                }
                              }  // case ip-prefix-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice ipv4-filter-protocol-policy-type
                          }  // list export-filter-policy
                        }  // container export-filter-policys
    
                        container lsp-options {
                          description
                            "Configure parameters for lsp.";
                          leaf ingress-protect-mode-bgp-frr {
                            type boolean;
                            must
                              "(../ingress-protect-mode-bgp-frr='false') or (../ingress-protect-mode-bgp-frr='true' and ../maximum-load-balancing-ingress=1)";
                            default "false";
                            description
                              "Enable/disable ingress LSP protection mode to FRR.";
                          }
    
                          leaf maximum-load-balancing-ingress {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Maximum number of ingress LSPs for load balancing. The default value is 1, indicating that this attribute is not configured. Configuring the number of ingress LSPs for load balancing and configuring BGP FRR of ingress LSPs are mutually exclusive.";
                          }
    
                          leaf maximum-load-balancing-transit {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Maximum number of transit LSPs for load balancing.";
                          }
    
                          leaf unicast-rt-label-advertise {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable a device to convert received IPv4 public network unicast routes to labeled routes by allocating one BGP label to each route and advertise the labeled routes to peers with the labeled route exchange capability.";
                          }
    
                          leaf unicast-rt-label-advertise-popgo {
                            when
                              "../unicast-rt-label-advertise = 'true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable a device to convert received IPv4 public network unicast routes to labeled routes by adding a BGP label to each route and advertise the labeled routes to peers with the labeled route exchange capability. If the IP address of an outbound interface is reachable but no LSP is reachable, traffic is forwarded through the outbound interface and a specific next hop, during which the label POPGO action is performed.";
                          }
    
                          leaf lsp-operation {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type lsp-operation-type;
                            default "pop";
                            description
                              "Label operation type.";
                          }
    
                          choice ingress-trigger-policy {
                            description
                              "Specify the route-policy or filter for ingress LSPs.";
                            case trigger-route-policy-ref {
                              description
                                "Route policy.";
                              leaf trigger-route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify the name of a routing policy.";
                              }
                            }  // case trigger-route-policy-ref
    
                            case trigger-xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case trigger-xpl-ref
                          }  // choice ingress-trigger-policy
                        }  // container lsp-options
    
                        container segment-routing-ipv6 {
                          description
                            "Configure BGP segment-routing IPv6.";
                          leaf srv6-best-effort-enable {
                            type empty;
                            description
                              "Enable SRv6 BE iteration.";
                          }
    
                          leaf srv6-traffic-engineer-enable {
                            type empty;
                            description
                              "Enable SRv6 TE iteration.";
                          }
                        }  // container segment-routing-ipv6
    
                        container hierarchy-convergence {
                          when
                            "../../../../../../ni:name='_public_'";
                          description
                            "Configure unicast route hierarchy convergence.";
                          container common {
                            presence
                              "Configure hierarchy convergence.";
                            description
                              "Configure hierarchy convergence parameters.";
                            leaf enable {
                              type empty;
                              mandatory true;
                              description
                                "Enable the hierarchy convergence.";
                            }
                          }  // container common
    
                          container hierarchy-convergence-routes {
                            description
                              "List of hierarchy convergence routes.";
                            list hierarchy-convergence-route {
                              key "base-route-address base-route-mask-length";
                              max-elements 1;
                              description
                                "Configure the hierarchy convergence route.";
                              leaf base-route-address {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set the base ip address. Base ip address will be higher convergence when processed.";
                              }
    
                              leaf base-route-mask-length {
                                type uint8 {
                                  range "1..32";
                                }
                                description
                                  "Specify the mask length of a summarized address.";
                              }
    
                              choice hierarchy-route {
                                mandatory true;
                                description
                                  "Set hierarchy route.";
                                case all {
                                  description
                                    "All route without hierarchy attribute will be set to current base route.";
                                  leaf all-route {
                                    type empty;
                                    description
                                      "All routes.";
                                  }
                                }  // case all
    
                                case route-policy {
                                  description
                                    "The route without hierarchy attribute and match the policy will be set to current base route.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify an route policy.";
                                  }
                                }  // case route-policy
                              }  // choice hierarchy-route
                            }  // list hierarchy-convergence-route
                          }  // container hierarchy-convergence-routes
                        }  // container hierarchy-convergence
    
                        container dampening-routes {
                          description
                            "List of route dampening.";
                          list dampening-route {
                            must
                              "reuse < suppress and suppress < ceiling";
                            key "peer-type";
                            description
                              "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                            leaf peer-type {
                              type dampening-route-peer-type;
                              description
                                "Configure the peer type.";
                            }
    
                            leaf half-life-time {
                              type uint16 {
                                range "1..45";
                              }
                              units "min";
                              default "15";
                              description
                                "Configure a half-life for reachable routes.";
                            }
    
                            leaf reuse {
                              type uint16 {
                                range "1..20000";
                              }
                              default "750";
                              description
                                "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                            }
    
                            leaf suppress {
                              type uint16 {
                                range "1..20000";
                              }
                              default "2000";
                              description
                                "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                            }
    
                            leaf ceiling {
                              type uint16 {
                                range
                                  "1001..20000";
                              }
                              default "16000";
                              description
                                "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                            }
    
                            leaf update-standard {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable update standard.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list dampening-route
                        }  // container dampening-routes
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
    
                        container routing-table-rib-only {
                          description
                            "Configure disable route delivery to the IP routing table.";
                          leaf enable {
                            type boolean;
                            must
                              "not (../../common/active-route-advertise = 'true' and ../enable = 'true')";
                            default "false";
                            description
                              "Enable/disable prevent BGP routes from being added to the IP routing table.";
                          }
    
                          choice policy-type {
                            description
                              "Set route policy or filter.";
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf policy-name {
                                when
                                  "../enable = 'true'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                when
                                  "../enable = 'true'";
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice policy-type
                        }  // container routing-table-rib-only
    
                        container qos {
                          description
                            "Configure QoS.";
                          choice local-id-policy {
                            description
                              "Configure QoS local ID.";
                            case value {
                              description
                                "Specify the QoS local ID value.";
                              leaf local-id {
                                type uint8 {
                                  range "1..255";
                                }
                                description
                                  "Specify the QoS local ID value.";
                              }
                            }  // case value
    
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf local-id-policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a routing policy to filter routes so that a configured QoS ID is applied to the routes that match the specified policy.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf local-id-filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf local-id-filter-parameter {
                                when
                                  "../local-id-filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice local-id-policy
                        }  // container qos
    
                        container instance-import-ribs {
                          description
                            "List of imported RIBs from multi BGP instances configuration.";
                          list instance-import-rib {
                            key "source-instance source-vpn source-address-family";
                            description
                              "Configure imported RIBs.";
                            leaf source-instance {
                              type leafref {
                                path "/bgp:bgp/bgp:instance-processs/bgp:instance-process/bgp:name";
                              }
                              description
                                "Configure source BGP instance.";
                            }
    
                            leaf source-vpn {
                              type leafref {
                                path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                              }
                              must
                                "../../../../../../../../ni:name != current() and ../../../../../../../../ni:name != '_public_'";
                              description
                                "Source VPN name.";
                            }
    
                            leaf source-address-family {
                              type bgp:vrf-import-rib-ipv4-safi-type;
                              description
                                "Source address family type.";
                            }
    
                            leaf valid-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported valid route.";
                            }
    
                            leaf include-label-route {
                              when
                                "../source-address-family='ipv4uni'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported include label route.";
                            }
    
                            choice policy-type {
                              description
                                "Set policy or filter.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list instance-import-rib
                        }  // container instance-import-ribs
    
                        container region-validation {
                          presence
                            "Enable the BGP region validation.";
                          description
                            "Configure BGP region validation.";
                          leaf region-confederation-check-strict {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable strict check on BGP region confederation routes.";
                          }
    
                          leaf bestroute {
                            type region-validation-bestroute-type;
                            description
                              "BGP region validation result applied to route selection.";
                          }
                        }  // container region-validation
                      }  // container ipv4-unicast
    
                      container ipv6-unicast {
                        when
                          "../type = 'ipv6uni'";
                        must
                          "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                        description
                          "Configure IPv6 unicast options.";
                        container common {
                          description
                            "Configure IPv6 unicast common options.";
                          leaf router-id-auto-select {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable router ID auto select. If a BGP VPN instance is not enabled to select a router ID, a router ID can be configured for the BGP VPN instance. If no router ID is configured for the BGP VPN instance, the BGP VPN instance inherits the router ID of the public network instance. If a BGP VPN instance is enabled to select a router ID, it uses the address of an interface bound to a VPN as the router ID based on the following rules:
    
    1. If Loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the Loopback interfaces is selected as the router ID.
    
    2. If there is no Loopback interface configured with an IP address, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.";
                          }
    
                          leaf router-id {
                            when
                              "../../../../../../../ni:name!='_public_' and ../router-id-auto-select = 'false'";
                            type inet:ipv4-address-no-zone;
                            description
                              "ID of a router that is in IPv4 address format. Certain dynamic routing protocols require a router ID. If no router ID is specified for a router when these protocols are enabled, the router ID in the RM module is used by default. The default router ID in the RM module is 0.0.0.0 when the router is not configured with any interface.
    The rules for selecting a router ID are as follows:
    1. If a router ID is set through this configuration, the set router ID is used. If the router ID is not set, a router ID is selected according to the following rules:
    (1) If loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the loopback interfaces is selected as the router ID.
    (2) If no loopback interface configured with an IP address exists, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.
    The router ID is reselected only when the interface address that is selected as the router ID is deleted or changed. The router ID is not reselected in any of the following cases:
    a. The interface is Down.
    b. A loopback interface is configured when the IP address of a non-loopback interface is selected as the router ID.
    c. A larger IP address of an interface is configured.
    2. Each VPN instance selects the router ID from the addresses of the interfaces of the VPN instance according to the preceding rules.
    3. When both the AMB and SMB exist on the router, the system backs up the router ID set through the related command and the router ID that is selected from IP addresses of the interfaces. After the active/standby switchover is performed, the system checks the validity of the router ID selected from the interface addresses. If the router ID is invalid, the system reselects a router ID.";
                          }
    
                          leaf auto-frr {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                          }
    
                          leaf maximum-load-balancing-ibgp {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Specify the maximum number of equal-cost IBGP routes. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf maximum-load-balancing-ebgp {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Specify the maximum number of equal-cost EBGP routes. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf explicit-null {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            must
                              "not(../lsp-operation='pop-go' and ../explicit-null='true')";
                            default "false";
                            description
                              "Enable/disable the function to explicit null. After 6PE routes are enabled to share a single label, all routes share the explicit-null label 2 when the 6PE sends IPv6 routes to its 6PE peer. This can save label resources on the 6PE. Therefore, when there are a large number of IPv6 routes that need to be sent, the problem that the IPv6 routes cannot be forwarded due to the shortage of labels can be avoided.";
                          }
    
                          leaf lsp-operation {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type lsp-operation-type;
                            must
                              "not(../lsp-operation='pop-go' and ../explicit-null='true')";
                            default "pop";
                            description
                              "Label operation mode.";
                          }
    
                          leaf nexthop-select-depend-type {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type select-depend-type;
                            default
                              "depend-tunnel";
                            description
                              "Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                          }
    
                          leaf nexthop-inherit-ip-cost {
                            when
                              "../nexthop-select-depend-type='depend-tunnel'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop iteration mode to IP. Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP.";
                          }
    
                          leaf nexthop-resolve-aigp {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable route with AIGP attribute for route selection.";
                          }
    
                          leaf supernet-unicast-advertise {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable advertise supernet unicast routes.";
                          }
    
                          leaf bestroute-med-confederation {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare Med value only within the federation.";
                          }
    
                          leaf bestroute-as-path-ignore {
                            type boolean;
                            must
                              "../bestroute-as-path-ignore = 'false' or ../load-balanc-as-path-ignore ='false' or not(../load-balanc-as-path-ignore)";
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path attribute when selecting the optimal route. By default, BGP uses the AS_Path attribute as one of route selection rules, and a route with a shorter AS_Path is preferred. After bestroute-as-path-ignore is selected, BGP does not compare the AS_Path length.";
                          }
    
                          leaf determin-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable deterministic MED so that the route selection result is relevant to the sequence in which routes are received.";
                          }
    
                          leaf best-external {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            must
                              "../best-external ='false' or ../determin-med ='false'";
                            default "false";
                            description
                              "Enable/disable best external route selection.";
                          }
    
                          leaf attribute-set-enable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the capability of processing attribute set.";
                          }
    
                          leaf attribute-set-mode {
                            when
                              "../attribute-set-enable='true'";
                            type bgp:attribute-set-type;
                            default "both";
                            description
                              "The processing mode of attribute set.";
                          }
    
                          leaf add-path-select-num {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type uint8 {
                              range "2..64";
                            }
                            must
                              "../determin-med ='false'";
                            description
                              "Number of add-path routes.";
                          }
    
                          leaf load-balanc-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same IGP cost can participate in load balancing.";
                          }
    
                          leaf load-balanc-as-path-ignore {
                            type boolean;
                            must
                              "../load-balanc-as-path-ignore ='false' or (../load-balanc-as-path-relax ='false' and ../bestroute-as-path-ignore ='false')";
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                          }
    
                          leaf load-balanc-as-path-relax {
                            type boolean;
                            must
                              "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                            default "false";
                            description
                              "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                          }
    
                          leaf maximum-load-balancing {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Specify the maximum number of equal-cost routes in the BGP routing table. The value depends on the associated license. Equal-cost BGP routes can be generated for load balancing only when the BGP routes meet the first nine rules of the route-selection policy and have the same AS-Path attribute. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf best-route-bit-error-detection {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to reroute traffic when a bit error event occurs.";
                          }
    
                          leaf import-rib-nexthop-invariable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable advertise the route without modifying the next-hop.";
                          }
    
                          leaf route-relay-tunnel-v4 {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable unicast-route recursive-lookup tunnel.";
                          }
    
                          leaf route-relay-tunnel-v4-selector {
                            when
                              "../route-relay-tunnel-v4='true'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Unicast route tunnel selector name.";
                          }
    
                          leaf route-relay-tunnel-v6-selector {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Enable/disable unicast route recursive-lookup IPv6 tunnel by tunnel selector name.";
                          }
    
                          leaf bestroute-med-plus-igp {
                            type boolean;
                            must
                              "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                            default "false";
                            description
                              "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                          }
    
                          leaf bestroute-med-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of med product factor.";
                          }
    
                          leaf bestroute-igp-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of IGP cost product factor.";
                          }
    
                          leaf bestroute-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                          }
    
                          leaf bestroute-router-id-prior-clusterlist {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare originator before clusterlist in route selection.";
                          }
    
                          leaf bestroute-med-none-as-maximum {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP considers its MED as the largest MED value (4294967295). If a route does not carry MED, BGP considers its MED as the default value (0) during route selection.";
                          }
    
                          leaf bestroute-rd-large-first {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable a BGP device to select the route with the largest route distinguisher (RD) during route selection.";
                          }
    
                          leaf nexthop-priority {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type nexthop-priority-address-type;
                            description
                              "In the VRF instance, routes with next-hop IPv4 addresses and routes with next-hop IPv6 addresses coexist. If the next-hop address type is set to IPv4, routes with next-hop IPv4 addresses have a higher priority. If the next-hop address type is set to IPv6, routes with next-hop IPv6 addresses have a higher priority.";
                          }
    
                          leaf ebgp-ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing-ebgp and ../maximum-load-balancing-ebgp>1";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost EBGP routes is changed. Enable/disable next hop of equal-cost EBGP routes is changed. When equal-cost EBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost EBGP routes is greater than 1.";
                          }
    
                          leaf ibgp-ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing-ibgp and ../maximum-load-balancing-ibgp>1";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost IBGP routes is changed. When equal-cost IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost IBGP routes is greater than 1.";
                          }
    
                          leaf ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing and ../maximum-load-balancing>1";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost routes is changed. When equal-cost BGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost BGP routes is greater than 1.";
                          }
    
                          leaf maximum-load-balancing-eibgp {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "../maximum-load-balancing-ibgp=1 and ../maximum-load-balancing-ebgp=1 and ../maximum-load-balancing=1 and ../load-balancing-eibgp-enable='false'";
                            description
                              "Specify the maximum number of equal-cost EBGP routes and IBGP routes. After the attribute is set, load balancing is performed among equal-cost BGP VPN routes, regardless of the route type, EBGP or IBGP. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf eibgp-ecmp-nexthop-changed {
                            when
                              "../maximum-load-balancing-eibgp";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop of equal-cost EBGP and IBGP routes is changed. When equal-cost EBGP and IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised.";
                          }
    
                          leaf load-balancing-eibgp-enable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            must
                              "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1 or ../maximum-load-balancing-eibgp) or ../load-balancing-eibgp-enable='false'";
                            default "false";
                            description
                              "Enable/disable EIBGP route load balancing.";
                          }
    
                          leaf prefix-origin-as-validation {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the BGP prefix origin validation.";
                          }
    
                          leaf bestroute-origin-as-validation {
                            when
                              "../prefix-origin-as-validation='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the BGP origin AS validation result.";
                          }
    
                          leaf bestroute-allow-invalid-as {
                            when
                              "../bestroute-origin-as-validation='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable routes with BGP origin AS validation result invalid to be selected.";
                          }
    
                          leaf advertise-route-mode {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type bgp-advertise-route-mode;
                            default "all";
                            description
                              "VPN advertise route mode.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          leaf always-compare-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare the MEDs of routes from peers in different ASs in route selection. If
     there are multiple reachable routes to the same destination, the route with the smallest MED is preferred. Do not use this option unless different ASs use the same IGP and route selection mode.";
                          }
    
                          leaf default-med {
                            type uint32;
                            default "0";
                            description
                              "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                          }
    
                          leaf nexthop-third-party {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP third-party next hop.";
                          }
    
                          leaf default-local-preference {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "100";
                            description
                              "The local preference of BGP routes.";
                          }
    
                          leaf default-route-import {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to import default routes into the BGP routing table. Default-route-imported must be used with import-routes so that default routes can be imported to the BGP routing table. If only import-routes is used, no default routes can be added to the BGP routing table. In addition, default-route-imported can only import the default routes in the routing table into the BGP routing table.";
                          }
    
                          leaf routerid-neglect {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore router IDs when selecting the optimal route. Comparing router IDs is the last resort in route selection. This means that if one optimal route must be selected and no other parameters can be used to break the tie, router IDs can be used. If this option is selected, the first received route will be selected as the optimal route, and BGP will ignore the router ID and peer address in route selection.";
                          }
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          leaf ext-community-change {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to change the extended community attribute.";
                          }
    
                          leaf active-route-advertise {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to advertise the optimal routes in the RM module to peers.";
                          }
    
                          leaf ebgp-interface-sensitive {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable the function of EBGP interface fast sensing. If this function is enabled, the sessions of directly connected EBGP peers are immediately cleared from the associated interface when the interface becomes down.";
                          }
    
                          leaf load-balancing-ucmp {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function of BGP UCMP.";
                          }
                        }  // container common
    
                        container preference {
                          description
                            "Configure parameters relating to options for BGP routes preference.";
                          choice set-value-or-policy {
                            default "set-value";
                            description
                              "Set BGP routes preference by value or policy.";
                            case set-value {
                              description
                                "Set BGP routes preference by value.";
                              leaf external {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of EBGP routes. The value is an integer. An EBGP route is the optimal route learned from a peer outside the local AS.";
                              }
    
                              leaf internal {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of IBGP routes. The value is an integer. An IBGP route is a route learned from a peer inside the local AS.";
                              }
    
                              leaf local {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of a local BGP route. A local route refers to an automatically or manually summarized route.";
                              }
                            }  // case set-value
    
                            case rtp-ref {
                              description
                                "Set BGP routes preference by route policy.";
                              leaf route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify a routing policy to filter routes so that a configured priority is applied to the routes that match the specified policy.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice set-value-or-policy
                        }  // container preference
    
                        container nexthop-recursive-lookup {
                          description
                            "Configure next hop iteration.";
                          container common {
                            description
                              "Configure next hop iteration common options.";
                            leaf restrain {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf default-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable default route.";
                            }
                          }  // container common
    
                          container delay {
                            description
                              "Configure time of next hop change responding delay.";
                            leaf time {
                              type uint8 {
                                range "1..100";
                              }
                              units "s";
                              description
                                "Specify the delay in responding to the next hop change.";
                            }
    
                            leaf no-critical-event-time {
                              type uint8 {
                                range "0..100";
                              }
                              units "s";
                              default "10";
                              description
                                "Specify the delay in responding to the next hop change on non critical relay change event.";
                            }
                          }  // container delay
                        }  // container nexthop-recursive-lookup
    
                        container import-routes {
                          description
                            "List of imported routes.";
                          list import-route {
                            key "protocol process-id";
                            description
                              "Configure route import. Routes of other protocol types can be imported by BGP. By default, BGP does not import routes of other protocol types.";
                            leaf protocol {
                              type bgp:ipv6-import-route-protocol-type;
                              description
                                "Routing protocol from which routes can be imported.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              description
                                "Process ID of an imported routing protocol. The process ID is 0, if the imported routing protocol is direct routes, static routes, UNRs, or OP-routes. The process ID must be specified range from 1 to 4294967295, if the imported routing protocol is ISIS, RIPng, or OSPFv3.";
                            }
    
                            leaf med {
                              type uint32;
                              description
                                "Specifies the MED metric of the imported route.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list import-route
                        }  // container import-routes
    
                        container aggregate-routes {
                          description
                            "List of summarized routes.";
                          list aggregate-route {
                            key "address mask-length";
                            description
                              "Configure a summarized route in the BGP routing table. The local outbound interface of the summarized route is Null0. When another router receives the route, the route adds an outbound interface to the route. By default, route summarization is not performed. If the Origin attributes of the specific routes for the route summarization are different, the Origin attribute of the summarized route is that with the highest priority. Origin attributes are arranged in the priority order of complete > egp > igp. A summarized route carries the community attribute of each specific route.";
                            leaf address {
                              type inet:ip-address-no-zone;
                              description
                                "Specify the IPv4 address or IPv6 address of a summarized route. Only IPv4 summarized routes can be configured in the IPv4 address family and only IPv6 summarized routes can be configured in the IPv6 address family.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "1..128";
                              }
                              description
                                "Specify the mask length of a summarized address.";
                            }
    
                            leaf as-set {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the generation of routes with the AS-SET attribute. This option can be used to create a summarized route. The AS_Path attribute of the summarized route contains the AS-Path attributes of the specific routes for the route summarization. Exercise caution when using this option if multiple AS_Paths need to be summarized to prevent route flapping.";
                            }
    
                            leaf detail-suppressed {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable detail-suppressed. Suppress the advertisement of specific routes for the route summarization. Only the summarized route is advertised.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf attribute-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify an attribute of summarized routes. If apply as-path is used to configure the AS_Path attribute that is used in the route Summarization policy, and the as-set keyword is set, the AS_Path attribute in the policy does not take effect. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
    
                                leaf origin-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a policy for generating summarized routes. Summarized routes are generated only when the routes match route-policy. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
    
                                leaf suppress-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify a policy for suppressing the advertisement of specified routes. The routes matching the policy are not advertised, and other routes are advertised. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf attribute-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf attribute-filter-parameter {
                                  when
                                    "../attribute-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
    
                                leaf origin-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf origin-filter-parameter {
                                  when
                                    "../origin-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
    
                                leaf suppress-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf suppress-filter-parameter {
                                  when
                                    "../suppress-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list aggregate-route
                        }  // container aggregate-routes
    
                        container aggregate-default-route {
                          description
                            "Configure aggregate default route.";
                          leaf origin-ipv6-prefix {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                            }
                            description
                              "Specify the name of an IPv6 prefix list for a summary default route. Only the name of an IPv6 prefix list can be configured in a BGP IPv6 address family.";
                          }
    
                          leaf attribute-policy {
                            when
                              "../origin-ipv6-prefix";
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Specify an attribute policy of a summary default route.";
                          }
                        }  // container aggregate-default-route
    
                        container network-routes {
                          description
                            "List of network routes.";
                          list network-route {
                            key "address mask-length";
                            description
                              "Configure a network route in the BGP routing table.";
                            leaf address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Specify the IP address advertised by BGP. An IPv6 routes can be configured in the IPv6 address family. Note: During the configuration of a network route, the IP address is adjusted based on the mask. It is recommended that you click Synchronize All after creating a network route.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "0..128";
                              }
                              description
                                "Specify the mask length of an IP address.";
                            }
    
                            choice policy-type {
                              description
                                "Specify the route-policy or filter for route advertisement.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list network-route
                        }  // container network-routes
    
                        container advertise-route-to-evpns {
                          when
                            "../../../../../../ni:name!='_public_'";
                          description
                            "Configure advertise route protocol.";
                          list advertise-route-to-evpn {
                            key "protocol";
                            description
                              "Configure the advertise route protocol.";
                            leaf protocol {
                              type enumeration {
                                enum "all" {
                                  value 0;
                                  description
                                    "Advertise all the types of route protocol.";
                                }
                              }
                              description
                                "Route protocol.";
                            }
    
                            leaf import-multipath {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route import from multiple paths.";
                            }
    
                            leaf include-local-cross {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable local cross route to advertise l2vpn evpn.";
                            }
    
                            leaf advertise-route-mode {
                              type enumeration {
                                enum "all" {
                                  value 0;
                                  description
                                    "All:";
                                }
                                enum "best" {
                                  value 1;
                                  description
                                    "Best:";
                                }
                                enum "valid" {
                                  value 2;
                                  description
                                    "Valid:";
                                }
                              }
                              default "all";
                              description
                                "VPN advertise route mode to evrf.";
                            }
                          }  // list advertise-route-to-evpn
                        }  // container advertise-route-to-evpns
    
                        container import-ribs {
                          description
                            "List of imported RIBs configuration.";
                          list import-rib {
                            key "source-vpn source-address-family";
                            description
                              "Configure imported RIBs.";
                            leaf source-vpn {
                              type leafref {
                                path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                              }
                              must
                                "../../../../../../../../ni:name != current()";
                              description
                                "Source VPN name for imported RIBs.";
                            }
    
                            leaf source-address-family {
                              type bgp:import-rib-ipv6-safi-type;
                              description
                                "Source address family type for imported RIBs.";
                            }
    
                            leaf valid-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported valid route.";
                            }
    
                            leaf include-label-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported include label route.";
                            }
    
                            choice policy-type {
                              description
                                "Set policy or filter.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list import-rib
                        }  // container import-ribs
    
                        container segment-routing-ipv6 {
                          description
                            "Configure BGP segment-routing IPv6.";
                          leaf srv6-best-effort-enable {
                            type empty;
                            description
                              "Enable SRv6 BE iteration.";
                          }
    
                          leaf srv6-traffic-engineer-enable {
                            type empty;
                            description
                              "Enable SRv6 TE iteration.";
                          }
                        }  // container segment-routing-ipv6
    
                        container hierarchy-convergence {
                          when
                            "../../../../../../ni:name='_public_'";
                          description
                            "Configure unicast route hierarchy convergence.";
                          container common {
                            presence
                              "Configure hierarchy convergence.";
                            description
                              "Configure hierarchy convergence parameters.";
                            leaf enable {
                              type empty;
                              mandatory true;
                              description
                                "Enable the hierarchy convergence.";
                            }
                          }  // container common
    
                          container hierarchy-convergence-routes {
                            description
                              "List of hierarchy convergence routes.";
                            list hierarchy-convergence-route {
                              key "base-route-address base-route-mask-length";
                              max-elements 1;
                              description
                                "Configure the hierarchy convergence route.";
                              leaf base-route-address {
                                type inet:ipv6-address-no-zone;
                                description
                                  "Set the base ip address. Base ip address will be higher convergence when processed.";
                              }
    
                              leaf base-route-mask-length {
                                type uint8 {
                                  range "1..128";
                                }
                                description
                                  "Specify the mask length of a summarized address.";
                              }
    
                              choice hierarchy-route {
                                mandatory true;
                                description
                                  "Set hierarchy route.";
                                case all {
                                  description
                                    "All route without hierarchy attribute will be set to current base route.";
                                  leaf all-route {
                                    type empty;
                                    description
                                      "All routes.";
                                  }
                                }  // case all
    
                                case route-policy {
                                  description
                                    "The route without hierarchy attribute and match the policy will be set to current base route.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify an route policy.";
                                  }
                                }  // case route-policy
                              }  // choice hierarchy-route
                            }  // list hierarchy-convergence-route
                          }  // container hierarchy-convergence-routes
                        }  // container hierarchy-convergence
    
                        container dampening-routes {
                          description
                            "List of route dampening.";
                          list dampening-route {
                            must
                              "reuse < suppress and suppress < ceiling";
                            key "peer-type";
                            description
                              "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                            leaf peer-type {
                              type dampening-route-peer-type;
                              description
                                "Configure the peer type.";
                            }
    
                            leaf half-life-time {
                              type uint16 {
                                range "1..45";
                              }
                              units "min";
                              default "15";
                              description
                                "Configure a half-life for reachable routes.";
                            }
    
                            leaf reuse {
                              type uint16 {
                                range "1..20000";
                              }
                              default "750";
                              description
                                "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                            }
    
                            leaf suppress {
                              type uint16 {
                                range "1..20000";
                              }
                              default "2000";
                              description
                                "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                            }
    
                            leaf ceiling {
                              type uint16 {
                                range
                                  "1001..20000";
                              }
                              default "16000";
                              description
                                "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                            }
    
                            leaf update-standard {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable update standard.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list dampening-route
                        }  // container dampening-routes
    
                        container import-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv6-import-filter-protocol-policy-type {
                            description
                              "Set IPv6 filter protocol policy.";
                            case acl6-ref {
                              description
                                "ACL route policy.";
                              leaf acl6-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL6 Rule. The number value ranges from 2000 to 2999 and is used by basic ACL6 rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl6-ref
    
                            case ipv6-prefix-ref {
                              description
                                "IPv6 prefix Policy.";
                              leaf ipv6-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 prefix list name.";
                              }
                            }  // case ipv6-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv6-import-filter-protocol-policy-type
                        }  // container import-filter-policy
    
                        container export-filter-policys {
                          description
                            "List of filtering policies.";
                          list export-filter-policy {
                            key "protocol process-id";
                            description
                              "Apply a filtering policy. It is used to filter the routes to be advertised to the peer. By default, routes are not filtered.";
                            leaf protocol {
                              type bgp:ipv6-export-filter-protocol-type;
                              description
                                "Specify the name of a routing protocol. The routing protocol takes effect only on the routes to be advertised. The IPv4 address family supports the direct, IS-IS, OSPF, RIP, and static routing protocols. The IPv6 unicast address family of a public network instance supports the direct, IS-IS, OSPFv3, RIPng, and static routing protocols. The IPv6 address family of a VPNv6 instance supports the direct, IS-IS, RIPng, and static routing protocols.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              description
                                "Specify the process ID required to be matched. The value is an integer ranging from 0 to 4294967295. If direct or static routes need to be filtered, no process ID is required.";
                            }
    
                            choice ipv6-filter-protocol-policy-type {
                              mandatory true;
                              description
                                "Set IPv6 filter protocol policy.";
                              case acl6-ref {
                                description
                                  "The ACL Route Policy.";
                                leaf acl6-name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                  }
                                  description
                                    "Specify the name or number of an ACL6 Rule. The number value ranges from 2000 to 2999 and is used by basic ACL6 rules. The name must start with a letter, and the name is case-sensitive.";
                                }
                              }  // case acl6-ref
    
                              case ipv6-prefix-ref {
                                description
                                  "IPv6 prefix Policy.";
                                leaf ipv6-prefix-filter {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Specify the IPv6 prefix list name.";
                                }
                              }  // case ipv6-prefix-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice ipv6-filter-protocol-policy-type
                          }  // list export-filter-policy
                        }  // container export-filter-policys
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
    
                        container routing-table-rib-only {
                          description
                            "Configure disable route delivery to the IP routing table.";
                          leaf enable {
                            type boolean;
                            must
                              "not (../../common/active-route-advertise = 'true' and ../enable = 'true')";
                            default "false";
                            description
                              "Enable/disable prevent BGP routes from being added to the IP routing table.";
                          }
    
                          choice policy-type {
                            description
                              "Set route policy or filter.";
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf policy-name {
                                when
                                  "../enable = 'true'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                when
                                  "../enable = 'true'";
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice policy-type
                        }  // container routing-table-rib-only
    
                        container qos {
                          description
                            "Configure QoS.";
                          choice local-id-policy {
                            description
                              "Configure QoS local ID.";
                            case value {
                              description
                                "Specify the QoS local ID value.";
                              leaf local-id {
                                type uint8 {
                                  range "1..255";
                                }
                                description
                                  "Specify the QoS local ID value.";
                              }
                            }  // case value
    
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf local-id-policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a routing policy to filter routes so that a configured QoS ID is applied to the routes that match the specified policy.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf local-id-filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf local-id-filter-parameter {
                                when
                                  "../local-id-filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice local-id-policy
    
                          leaf ipv6-qppb {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable IPv6 QPPB for BGP.";
                          }
                        }  // container qos
    
                        container region-validation {
                          presence
                            "Enable the BGP region validation.";
                          description
                            "Configure BGP region validation.";
                          leaf region-confederation-check-strict {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable strict check on BGP region confederation routes.";
                          }
    
                          leaf bestroute {
                            type region-validation-bestroute-type;
                            description
                              "BGP region validation result applied to route selection.";
                          }
                        }  // container region-validation
                      }  // container ipv6-unicast
    
                      container ipv4-vpn {
                        when
                          "../type = 'ipv4vpn'";
                        description
                          "Configure IPv4 VPNv4 options.";
                        leaf policy-vpntarget {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable VPN target-based filtering for the received VPN routes. Only the VPN route whose Export RT attribute matches the local Import RT attribute can be added to the routing table. This option can be used in the inter-AS VPN Option B solution and the ASBR MP-EBGP inter-AS L2VPN solution in Kompella mode.";
                        }
    
                        choice reflector-type {
                          description
                            "Set IPv4 address or id.";
                          case address {
                            description
                              "IPv4 address.";
                            leaf reflector-cluster-ipv4 {
                              type inet:ipv4-address-no-zone;
                              description
                                "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                            }
                          }  // case address
    
                          case id {
                            description
                              "Set value.";
                            leaf reflector-cluster-id {
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                            }
                          }  // case id
                        }  // choice reflector-type
    
                        leaf reflect-change-path {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable an RR to use an export policy to change route AS_Path.";
                        }
    
                        leaf auto-frr {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP Auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                        }
    
                        leaf tunnel-selector-name {
                          type leafref {
                            path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                          }
                          description
                            "Configure a tunnel selector and apply it to the BGP IPv4 unicast, BGP VPNv4 address families and BGP VPNv6 address families so that IPv4,VPNv4 and VPNv6 labeled routes can be iterated to tunnels based on the tunnel selector.";
                        }
    
                        leaf route-select-delay {
                          type uint16 {
                            range "0..3600";
                          }
                          units "s";
                          default "0";
                          description
                            "Route selection delay.";
                        }
    
                        leaf apply-label-mode {
                          type apply-label-type;
                          default "per-route";
                          description
                            "Method of distributing labels to VPNV4 and VPNV6 routes. The way which assigns the label depends on the paf value. If there are a large number of routes, assign a label for the routes that have same nexthop and out-label. This allows all routes which have same nexthop and out-label to use one label.";
                        }
    
                        leaf nexthop-select-depend-type {
                          type select-depend-type-ext;
                          default "depend-ip";
                          description
                            "In none mode, route selection does not depend on whether the next hop is reachable. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                        }
    
                        leaf default-med {
                          type uint32;
                          default "0";
                          description
                            "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                        }
    
                        leaf best-external {
                          when
                            "../../../../../../ni:name='_public_'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable best external route selection.";
                        }
    
                        leaf label-free-delay {
                          type uint8 {
                            range "0..180";
                          }
                          units "s";
                          default "0";
                          description
                            "Label free delay.";
                        }
    
                        leaf add-path-select-num {
                          when
                            "../../../../../../ni:name='_public_'";
                          type uint8 {
                            range "2..64";
                          }
                          description
                            "Number of Add-Path routes.";
                        }
    
                        leaf default-local-preference {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          default "100";
                          description
                            "The local preference of BGP routes.";
                        }
    
                        leaf bestroute-med-plus-igp {
                          type boolean;
                          must
                            "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                          default "false";
                          description
                            "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                        }
    
                        leaf bestroute-med-multiplier {
                          when
                            "../bestroute-med-plus-igp='true'";
                          type uint16 {
                            range "1..1000";
                          }
                          default "1";
                          description
                            "Value of med product factor.";
                        }
    
                        leaf bestroute-igp-multiplier {
                          when
                            "../bestroute-med-plus-igp='true'";
                          type uint16 {
                            range "1..1000";
                          }
                          default "1";
                          description
                            "Value of IGP cost product factor.";
                        }
    
                        leaf bestroute-igp-metric-ignore {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                        }
    
                        leaf bestroute-router-id-prior-clusterlist {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP to compare originator before clusterlist in route selection.";
                        }
    
                        leaf reflect-between-client {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                        }
    
                        leaf activate-route-tag {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable tag-based filtering.";
                        }
    
                        leaf route-reflector-ext-community-filter {
                          type leafref {
                            path "/rtp:routing-policy/rtp:ext-community-filters/rtp:ext-community-filter/rtp:name";
                          }
                          description
                            "Set the name of the extended community filter supported by an RR group. For the purpose of load balancing, only the IBGP route whose route-target extended community attribute meets the matching rules can be reflected.";
                        }
    
                        leaf load-balancing-eibgp-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable EIBGP route load balancing.";
                        }
    
                        leaf load-balanc-igp-metric-ignore {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same IGP cost can participate in load balancing.";
                        }
    
                        leaf load-balanc-as-path-ignore {
                          type boolean;
                          must
                            "../load-balanc-as-path-ignore ='false' or ../load-balanc-as-path-relax ='false'";
                          default "false";
                          description
                            "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                        }
    
                        leaf load-balanc-as-path-relax {
                          type boolean;
                          must
                            "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                          default "false";
                          description
                            "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                        }
    
                        container dampening-routes {
                          description
                            "List of route dampening.";
                          list dampening-route {
                            must
                              "reuse < suppress and suppress < ceiling";
                            key "peer-type";
                            description
                              "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                            leaf peer-type {
                              type bgp:dampening-route-ext-peer-type;
                              description
                                "Configure the peer type.";
                            }
    
                            leaf half-life-time {
                              type uint16 {
                                range "1..45";
                              }
                              units "min";
                              default "15";
                              description
                                "Configure a half-life for reachable routes.";
                            }
    
                            leaf reuse {
                              type uint16 {
                                range "1..20000";
                              }
                              default "750";
                              description
                                "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                            }
    
                            leaf suppress {
                              type uint16 {
                                range "1..20000";
                              }
                              default "2000";
                              description
                                "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                            }
    
                            leaf ceiling {
                              type uint16 {
                                range
                                  "1001..20000";
                              }
                              default "16000";
                              description
                                "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                            }
    
                            leaf update-standard {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable update standard.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list dampening-route
                        }  // container dampening-routes
    
                        container nexthop-recursive-lookup {
                          description
                            "Configure next hop iteration.";
                          container common {
                            description
                              "Configure next hop iteration common options.";
                            leaf restrain {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf default-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable default route.";
                            }
                          }  // container common
    
                          container delay {
                            description
                              "Configure time of next hop change responding delay.";
                            leaf time {
                              type uint8 {
                                range "1..100";
                              }
                              units "s";
                              description
                                "Specify the delay in responding to the next hop change.";
                            }
    
                            leaf no-critical-event-time {
                              type uint8 {
                                range "0..100";
                              }
                              units "s";
                              default "10";
                              description
                                "Specify the delay in responding to the next hop change on non critical relay change event.";
                            }
                          }  // container delay
    
                          container bit-error-detection {
                            description
                              "Configure BGP bit-error detection parameters.";
                            leaf enable {
                              type boolean;
                              must
                                "(../enable='false') or (../enable='true' and (../med or ../local-preference))";
                              default "false";
                              description
                                "Enable/disable association between bit error events and the adjustment of route attributes.";
                            }
    
                            leaf med {
                              when
                                "../enable='true'";
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Specify the MED adjustment for BGP routes used when a bit error event occurs.";
                            }
    
                            leaf local-preference {
                              when
                                "../enable='true'";
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Specify the local preference adjustment for BGP routes used when a bit error event occurs.";
                            }
    
                            choice policy-type {
                              when
                                "enable='true'";
                              description
                                "Set route-policy or route-filter for bit-error-triggered protection switching.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of route-policy for bit-error-triggered protection switching. The MED or local preference of only the routes that match the route-policy is adjusted.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // container bit-error-detection
                        }  // container nexthop-recursive-lookup
    
                        container import-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv4-import-filter-protocol-policy-type {
                            description
                              "Set IPv4 filter protocol policy.";
                            case acl-ref {
                              description
                                "ACL Route Policy.";
                              leaf acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl-ref
    
                            case ip-prefix-ref {
                              description
                                "IP prefix Policy.";
                              leaf ipv4-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 prefix list name.";
                              }
                            }  // case ip-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv4-import-filter-protocol-policy-type
                        }  // container import-filter-policy
    
                        container export-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv4-import-filter-protocol-policy-type {
                            description
                              "Set IPv4 filter protocol policy.";
                            case acl-ref {
                              description
                                "ACL Route Policy.";
                              leaf acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl-ref
    
                            case ip-prefix-ref {
                              description
                                "IP prefix Policy.";
                              leaf ipv4-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 prefix list name.";
                              }
                            }  // case ip-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv4-import-filter-protocol-policy-type
                        }  // container export-filter-policy
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
                      }  // container ipv4-vpn
    
                      container ipv6-vpn {
                        when
                          "../type = 'ipv6vpn'";
                        description
                          "Configure IPv6 VPNv6 options.";
                        leaf policy-vpntarget {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable VPN target-based filtering for the received VPN routes. Only the VPN route whose Export RT attribute matches the local Import RT attribute can be added to the routing table. This option can be used in the inter-AS VPN Option B solution and the ASBR MP-EBGP inter-AS L2VPN solution in Kompella mode.";
                        }
    
                        choice reflector-type {
                          description
                            "Set IPv4 address or id.";
                          case address {
                            description
                              "IPv4 address.";
                            leaf reflector-cluster-ipv4 {
                              type inet:ipv4-address-no-zone;
                              description
                                "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                            }
                          }  // case address
    
                          case id {
                            description
                              "Set value.";
                            leaf reflector-cluster-id {
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                            }
                          }  // case id
                        }  // choice reflector-type
    
                        leaf reflect-change-path {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable an RR to use an export policy to change route AS_Path.";
                        }
    
                        leaf auto-frr {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP Auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                        }
    
                        leaf tunnel-selector-name {
                          type leafref {
                            path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                          }
                          description
                            "Configure a tunnel selector and apply it to the BGP IPv4 unicast, BGP VPNv4 address families and BGP VPNv6 address families so that IPv4,VPNv4 and VPNv6 labeled routes can be iterated to tunnels based on the tunnel selector. By default, no tunnel selector is configured.";
                        }
    
                        leaf route-select-delay {
                          type uint16 {
                            range "0..3600";
                          }
                          units "s";
                          default "0";
                          description
                            "Route selection delay.";
                        }
    
                        leaf apply-label-mode {
                          type apply-label-type;
                          default "per-route";
                          description
                            "Method of distributing labels to VPNV4 and VPNV6 routes. The way which assigns the label depends on the paf value. If there are a large number of routes, assign a label for the routes that have same nexthop and out-label. This allows all routes which have same nexthop and out-label to use one label.";
                        }
    
                        leaf nexthop-select-depend-type {
                          type select-depend-type-ext;
                          default "depend-ip";
                          description
                            "In none mode, route selection does not depend on whether the next hop is reachable. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                        }
    
                        leaf default-med {
                          type uint32;
                          default "0";
                          description
                            "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                        }
    
                        leaf best-external {
                          when
                            "../../../../../../ni:name='_public_'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable best external route selection.";
                        }
    
                        leaf add-path-select-num {
                          when
                            "../../../../../../ni:name='_public_'";
                          type uint8 {
                            range "2..64";
                          }
                          description
                            "Number of add-path routes.";
                        }
    
                        leaf default-local-preference {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          default "100";
                          description
                            "The local preference of BGP routes.";
                        }
    
                        leaf bestroute-med-plus-igp {
                          type boolean;
                          must
                            "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                          default "false";
                          description
                            "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                        }
    
                        leaf bestroute-med-multiplier {
                          when
                            "../bestroute-med-plus-igp='true'";
                          type uint16 {
                            range "1..1000";
                          }
                          default "1";
                          description
                            "Value of med product factor.";
                        }
    
                        leaf bestroute-igp-multiplier {
                          when
                            "../bestroute-med-plus-igp='true'";
                          type uint16 {
                            range "1..1000";
                          }
                          default "1";
                          description
                            "Value of IGP cost product factor.";
                        }
    
                        leaf bestroute-igp-metric-ignore {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                        }
    
                        leaf bestroute-router-id-prior-clusterlist {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP to compare originator before clusterlist in route selection.";
                        }
    
                        leaf reflect-between-client {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                        }
    
                        leaf label-free-delay {
                          type uint8 {
                            range "0..180";
                          }
                          units "s";
                          default "0";
                          description
                            "Label free delay.";
                        }
    
                        leaf route-reflector-ext-community-filter {
                          type leafref {
                            path "/rtp:routing-policy/rtp:ext-community-filters/rtp:ext-community-filter/rtp:name";
                          }
                          description
                            "Set the name of the extended community filter supported by an RR group. For the purpose of load balancing, only the IBGP route whose route-target extended community attribute meets the matching rules can be reflected.";
                        }
    
                        leaf load-balancing-eibgp-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable EIBGP route load balancing.";
                        }
    
                        leaf load-balanc-igp-metric-ignore {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same IGP cost can participate in load balancing.";
                        }
    
                        leaf load-balanc-as-path-ignore {
                          type boolean;
                          must
                            "../load-balanc-as-path-ignore ='false' or ../load-balanc-as-path-relax ='false'";
                          default "false";
                          description
                            "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                        }
    
                        leaf load-balanc-as-path-relax {
                          type boolean;
                          must
                            "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                          default "false";
                          description
                            "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                        }
    
                        container nexthop-recursive-lookup {
                          description
                            "Configure next hop iteration.";
                          container common {
                            description
                              "Configure next hop iteration common options.";
                            leaf restrain {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf default-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable default route.";
                            }
                          }  // container common
    
                          container delay {
                            description
                              "Configure time of next hop change responding delay.";
                            leaf time {
                              type uint8 {
                                range "1..100";
                              }
                              units "s";
                              description
                                "Specify the delay in responding to the next hop change.";
                            }
    
                            leaf no-critical-event-time {
                              type uint8 {
                                range "0..100";
                              }
                              units "s";
                              default "10";
                              description
                                "Specify the delay in responding to the next hop change on non critical relay change event.";
                            }
                          }  // container delay
    
                          container bit-error-detection {
                            description
                              "Configure BGP bit-error detection parameters.";
                            leaf enable {
                              type boolean;
                              must
                                "(../enable='false') or (../enable='true' and (../med or ../local-preference))";
                              default "false";
                              description
                                "Enable/disable association between bit error events and the adjustment of route attributes.";
                            }
    
                            leaf med {
                              when
                                "../enable='true'";
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Specify the MED adjustment for BGP routes used when a bit error event occurs.";
                            }
    
                            leaf local-preference {
                              when
                                "../enable='true'";
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Specify the local preference adjustment for BGP routes used when a bit error event occurs.";
                            }
    
                            choice policy-type {
                              when
                                "enable='true'";
                              description
                                "Set route-policy or route-filter for bit-error-triggered protection switching.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of route-policy for bit-error-triggered protection switching. The MED or local preference of only the routes that match the route-policy is adjusted.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // container bit-error-detection
                        }  // container nexthop-recursive-lookup
    
                        container import-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv6-import-filter-protocol-policy-type {
                            description
                              "Set IPv6 filter protocol policy.";
                            case acl6-ref {
                              description
                                "ACL route policy.";
                              leaf acl6-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL6 Rule. The number value ranges from 2000 to 2999 and is used by basic ACL6 rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl6-ref
    
                            case ipv6-prefix-ref {
                              description
                                "IPv6 prefix Policy.";
                              leaf ipv6-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 prefix list name.";
                              }
                            }  // case ipv6-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv6-import-filter-protocol-policy-type
                        }  // container import-filter-policy
    
                        container export-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv6-import-filter-protocol-policy-type {
                            description
                              "Set IPv6 filter protocol policy.";
                            case acl6-ref {
                              description
                                "ACL route policy.";
                              leaf acl6-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL6 Rule. The number value ranges from 2000 to 2999 and is used by basic ACL6 rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl6-ref
    
                            case ipv6-prefix-ref {
                              description
                                "IPv6 prefix Policy.";
                              leaf ipv6-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 prefix list name.";
                              }
                            }  // case ipv6-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv6-import-filter-protocol-policy-type
                        }  // container export-filter-policy
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
    
                        container dampening-routes {
                          description
                            "List of route dampening.";
                          list dampening-route {
                            must
                              "reuse < suppress and suppress < ceiling";
                            key "peer-type";
                            description
                              "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                            leaf peer-type {
                              type bgp:dampening-route-ext-peer-type;
                              description
                                "Configure the peer type.";
                            }
    
                            leaf half-life-time {
                              type uint16 {
                                range "1..45";
                              }
                              units "min";
                              default "15";
                              description
                                "Configure a half-life for reachable routes.";
                            }
    
                            leaf reuse {
                              type uint16 {
                                range "1..20000";
                              }
                              default "750";
                              description
                                "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                            }
    
                            leaf suppress {
                              type uint16 {
                                range "1..20000";
                              }
                              default "2000";
                              description
                                "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                            }
    
                            leaf ceiling {
                              type uint16 {
                                range
                                  "1001..20000";
                              }
                              default "16000";
                              description
                                "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                            }
    
                            leaf update-standard {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable update standard.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list dampening-route
                        }  // container dampening-routes
                      }  // container ipv6-vpn
    
                      container ipv4-labeluni {
                        when
                          "../type = 'ipv4labeluni'";
                        must
                          "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                        description
                          "Configure IPv4 label unicast options.";
                        container common {
                          description
                            "Configure IPv4 label unicast common options.";
                          leaf auto-frr {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP Auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                          }
    
                          leaf tunnel-selector-name {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Configure a tunnel selector and apply it to the BGP IPv4 unicast, BGP VPNv4 address families and BGP VPNv6 address families so that IPv4,VPNv4 and VPNv6 labeled routes can be iterated to tunnels based on the tunnel selector. By default, no tunnel selector is configured.";
                          }
    
                          leaf tunnel-selector-all {
                            when
                              "../tunnel-selector-name";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable tunnel selector for labeled, imported, and network segment routes.";
                          }
    
                          leaf nexthop-select-depend-type {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type select-depend-type;
                            default
                              "depend-tunnel";
                            description
                              "Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                          }
    
                          leaf nexthop-inherit-ip-cost {
                            when
                              "../nexthop-select-depend-type='depend-tunnel'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable next hop iteration mode to IP. Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP.";
                          }
    
                          leaf always-compare-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare the MEDs of routes from peers in different ASs in route selection. If
    there are multiple reachable routes to the same destination, the route with the smallest MED is preferred. Do not use this option unless different ASs use the same IGP and route selection mode.";
                          }
    
                          leaf default-med {
                            type uint32;
                            default "0";
                            description
                              "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                          }
    
                          leaf best-route-bit-error-detection {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to reroute traffic when a bit error event occurs.";
                          }
    
                          leaf supernet-label-advertise {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable the function to advertise supernet labeled routes.";
                          }
    
                          leaf lsp-mtu {
                            type uint16 {
                              range "46..65535";
                            }
                            default "1500";
                            description
                              "BGP LSP MTU.";
                          }
    
                          leaf label-free-delay {
                            type uint8 {
                              range "0..180";
                            }
                            units "s";
                            default "0";
                            description
                              "Label free delay.";
                          }
    
                          leaf bestroute-med-confederation {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare Med value only within the federation.";
                          }
    
                          leaf bestroute-as-path-ignore {
                            type boolean;
                            must
                              "../bestroute-as-path-ignore = 'false' or ../load-balanc-as-path-ignore ='false' or not(../load-balanc-as-path-ignore)";
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path attribute when selecting the optimal route. By default, BGP uses the AS_Path attribute as one of route selection rules, and a route with a shorter AS_Path is preferred. After bestroute-as-path-ignore is selected, BGP does not compare the AS_Path length.";
                          }
    
                          leaf determin-med {
                            type boolean;
                            must
                              "../determin-med ='false' or (not(../add-path-select-num) and (../best-external ='false' or not(../best-external)))";
                            default "false";
                            description
                              "Enable/disable deterministic MED so that the route selection result is relevant to the sequence in which routes are received.";
                          }
    
                          leaf best-external {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            must
                              "../best-external ='false' or ../determin-med ='false'";
                            default "false";
                            description
                              "Enable/disable best external route selection.";
                          }
    
                          leaf add-path-select-num {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type uint8 {
                              range "2..64";
                            }
                            must
                              "../determin-med ='false'";
                            description
                              "Number of add-path routes.";
                          }
    
                          leaf load-balanc-igp-metric-ignore {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same IGP cost can participate in load balancing.";
                          }
    
                          leaf load-balanc-as-path-ignore {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            must
                              "../load-balanc-as-path-ignore ='false' or (../load-balanc-as-path-relax ='false' and ../bestroute-as-path-ignore ='false')";
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                          }
    
                          leaf load-balanc-as-path-relax {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            must
                              "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                            default "false";
                            description
                              "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                          }
    
                          leaf default-local-preference {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "100";
                            description
                              "The local preference of BGP routes.";
                          }
    
                          leaf default-route-import {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to import default routes into the BGP routing table. Default-route-imported must be used with import-routes so that default routes can be imported to the BGP routing table. If only import-routes is used, no default routes can be added to the BGP routing table. In addition, default-route-imported can only import the default routes in the routing table into the BGP routing table.";
                          }
    
                          leaf routerid-neglect {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore router IDs when selecting the optimal route. Comparing router IDs is the last resort in route selection. This means that if one optimal route must be selected and no other parameters can be used to break the tie, router IDs can be used. If this option is selected, the first received route will be selected as the optimal route, and BGP will ignore the router ID and peer address in route selection.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          leaf import-rib-nexthop-invariable {
                            when
                              "../../../../../../../ni:name!='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the command to enable advertise the route without modifying the next-hop.";
                          }
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          leaf bestroute-med-plus-igp {
                            type boolean;
                            must
                              "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                            default "false";
                            description
                              "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                          }
    
                          leaf bestroute-med-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of med product factor.";
                          }
    
                          leaf bestroute-igp-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of IGP cost product factor.";
                          }
    
                          leaf bestroute-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                          }
    
                          leaf bestroute-router-id-prior-clusterlist {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare originator before clusterlist in route selection.";
                          }
    
                          leaf bestroute-med-none-as-maximum {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP considers its MED as the largest MED value (4294967295). If a route does not carry MED, BGP considers its MED as the default value (0) during route selection.";
                          }
    
                          leaf ext-community-change {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to change the extended community attribute.";
                          }
                        }  // container common
    
                        container nexthop-recursive-lookup {
                          description
                            "Configure next hop iteration.";
                          container common {
                            description
                              "Configure next hop iteration common options.";
                            leaf restrain {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // container common
                        }  // container nexthop-recursive-lookup
    
                        container import-routes {
                          description
                            "List of imported routes.";
                          list import-route {
                            key "protocol process-id";
                            description
                              "Apply route import policy. Routes of other protocol types can be imported by BGP. By default, BGP does not import routes of other protocol types.";
                            leaf protocol {
                              type bgp:ipv4-import-route-protocol-type;
                              description
                                "Routing protocol from which routes can be imported.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              must
                                "((../protocol='ospf' or ../protocol='isis' or ../protocol='rip') and ../process-id!=0) or (../protocol!='ospf' and ../protocol!='isis' and ../protocol!='rip' and ../process-id=0)";
                              description
                                "Process ID of an imported routing protocol. The process ID is 0, if the imported routing protocol is direct routes, static routes, UNRs, or OP-routes. The process ID must be specified range from 1 to 4294967295, if the imported routing protocol is RIP, OSPF, ISIS.";
                            }
    
                            leaf med {
                              type uint32;
                              description
                                "Specifies the MED metric of the imported route.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf non-relay-tunnel {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported route relay a tunnel.";
                            }
                          }  // list import-route
                        }  // container import-routes
    
                        container network-routes {
                          description
                            "List of network routes.";
                          list network-route {
                            key "address mask-length";
                            description
                              "Configure a network route in the BGP routing table.";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specify the IP address advertised by BGP. An IPv4 address can be configured in the IPv4 address family. Note: During the configuration of a network route, the IP address is adjusted based on the mask. It is recommended that you click Synchronize All after creating a network route.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "0..32";
                              }
                              description
                                "Specify the mask length of an IP address.";
                            }
    
                            choice policy-type {
                              description
                                "Specify the route-policy or filter for route advertisement.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
    
                            leaf non-relay-tunnel {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported route relay a tunnel.";
                            }
    
                            leaf label-index {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type uint32 {
                                range
                                  "0..4294967294";
                              }
                              description
                                "Management label value assigned for imported routes.";
                            }
                          }  // list network-route
                        }  // container network-routes
    
                        container import-ribs {
                          description
                            "List of imported RIBs configuration.";
                          list import-rib {
                            key "source-vpn source-address-family";
                            description
                              "Configure imported RIBs.";
                            leaf source-vpn {
                              type leafref {
                                path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                              }
                              must
                                "not(../../../../../../../../ni:name = current() and ../source-address-family = 'ipv4labeluni')";
                              description
                                "Source VPN name.";
                            }
    
                            leaf source-address-family {
                              type bgp:import-rib-ipv4-safi-type;
                              description
                                "Source address family type.";
                            }
    
                            leaf valid-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported valid route.";
                            }
    
                            leaf include-label-route {
                              when
                                "../source-address-family='ipv4uni'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable imported include label route.";
                            }
    
                            choice policy-type {
                              description
                                "Set policy or filter.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list import-rib
                        }  // container import-ribs
    
                        container lsp-options {
                          description
                            "Configure BGP ingress-lsp.";
                          leaf ingress-protect-mode-bgp-frr {
                            type boolean;
                            must
                              "(../ingress-protect-mode-bgp-frr='false') or (../ingress-protect-mode-bgp-frr='true' and ../maximum-load-balancing-ingress=1)";
                            default "false";
                            description
                              "Enable/disable ingress LSP protection mode to FRR.";
                          }
    
                          leaf maximum-load-balancing-ingress {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Maximum number of ingress LSPs for load balancing. The default value is 1, indicating that this attribute is not configured. Configuring the number of ingress LSPs for load balancing and configuring BGP FRR of ingress LSPs are mutually exclusive.";
                          }
    
                          leaf maximum-load-balancing-transit {
                            type uint16 {
                              range "1..65535";
                            }
                            default "1";
                            description
                              "Maximum number of transit LSPs for load balancing.";
                          }
    
                          leaf unicast-rt-label-advertise-popgo {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable a device to convert received IPv4 public network unicast routes to labeled routes by adding a BGP label to each route and advertise the labeled routes to peers with the labeled route exchange capability. If the IP address of an outbound interface is reachable but no LSP is reachable, traffic is forwarded through the outbound interface and a specific next hop, during which the label POPGO action is performed.";
                          }
    
                          leaf lsp-operation {
                            when
                              "../../../../../../../ni:name='_public_'";
                            type lsp-operation-type;
                            default "pop";
                            description
                              "Label operation type.";
                          }
    
                          choice ingress-trigger-policy {
                            description
                              "Specify the route-policy or filter for ingress LSPs.";
                            case trigger-route-policy-ref {
                              description
                                "Route policy.";
                              leaf trigger-route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify the name of a routing policy.";
                              }
                            }  // case trigger-route-policy-ref
    
                            case trigger-xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case trigger-xpl-ref
                          }  // choice ingress-trigger-policy
                        }  // container lsp-options
    
                        container dampening-routes {
                          description
                            "List of route dampening.";
                          list dampening-route {
                            must
                              "reuse < suppress and suppress < ceiling";
                            key "peer-type";
                            description
                              "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                            leaf peer-type {
                              type dampening-route-peer-type;
                              description
                                "Configure the peer type.";
                            }
    
                            leaf half-life-time {
                              type uint16 {
                                range "1..45";
                              }
                              units "min";
                              default "15";
                              description
                                "Configure a half-life for reachable routes.";
                            }
    
                            leaf reuse {
                              type uint16 {
                                range "1..20000";
                              }
                              default "750";
                              description
                                "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                            }
    
                            leaf suppress {
                              type uint16 {
                                range "1..20000";
                              }
                              default "2000";
                              description
                                "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                            }
    
                            leaf ceiling {
                              type uint16 {
                                range
                                  "1001..20000";
                              }
                              default "16000";
                              description
                                "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                            }
    
                            leaf update-standard {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable update standard.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list dampening-route
                        }  // container dampening-routes
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
                      }  // container ipv4-labeluni
    
                      container ipv4-multicast {
                        when
                          "../type='ipv4multi'";
                        description
                          "Configure IPv4 multicast options.";
                        container common {
                          description
                            "Configure BGP IPv4-multicast address family options.";
                          leaf always-compare-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare the MEDs of routes from peers in different ASs in route selection. If
    there are multiple reachable routes to the same destination, the route with the smallest MED is preferred. Do not use this option unless different ASs use the same IGP and route selection mode.";
                          }
    
                          leaf default-med {
                            type uint32;
                            default "0";
                            description
                              "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                          }
    
                          leaf summary-automatic {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable automatic summarization for imported routes. Manual summarization takes precedence over automatic summarization. After automatic summarization is enabled, BGP summarizes routes based on the natural network segment (for example, 10.1.1.1/24 and 10.2.1.1/24 are summarized into 10.0.0.0/8, a Class A address), and sends only the summarized route to peers. This reduces the number of routes.";
                          }
    
                          leaf bestroute-med-confederation {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare Med value only within the federation.";
                          }
    
                          leaf default-local-preference {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "100";
                            description
                              "The local preference of BGP routes.";
                          }
    
                          leaf default-route-import {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to import default routes into the BGP routing table. Default-route-imported must be used with import-routes so that default routes can be imported to the BGP routing table. If only import-routes is used, no default routes can be added to the BGP routing table. In addition, default-route-imported can only import the default routes in the routing table into the BGP routing table.";
                          }
    
                          leaf routerid-neglect {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore router IDs when selecting the optimal route. Comparing router IDs is the last resort in route selection. This means that if one optimal route must be selected and no other parameters can be used to break the tie, router IDs can be used. If this option is selected, the first received route will be selected as the optimal route, and BGP will ignore the router ID and peer address in route selection.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          leaf determin-med {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable deterministic MED so that the route selection result is relevant to the sequence in which routes are received.";
                          }
    
                          leaf bestroute-med-plus-igp {
                            type boolean;
                            must
                              "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                            default "false";
                            description
                              "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                          }
    
                          leaf bestroute-med-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of med product factor.";
                          }
    
                          leaf bestroute-igp-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of IGP cost product factor.";
                          }
    
                          leaf bestroute-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                          }
    
                          leaf bestroute-router-id-prior-clusterlist {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare originator before clusterlist in route selection.";
                          }
    
                          leaf bestroute-as-path-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the AS_Path attribute when selecting the optimal route. By default, BGP uses the AS_Path attribute as one of route selection rules, and a route with a shorter AS_Path is preferred. After bestroute-as-path-ignore is selected, BGP does not compare the AS_Path length.";
                          }
    
                          leaf bestroute-med-none-as-maximum {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP considers its MED as the largest MED value (4294967295). If a route does not carry MED, BGP considers its MED as the default value (0) during route selection.";
                          }
    
                          leaf maximum-load-balancing {
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1) or ../maximum-load-balancing=1";
                            default "1";
                            description
                              "Specify the maximum number of equal-cost routes in the BGP routing table. The value can be 1 or an integer greater than 1. The value depends on the associated license. By default, the maximum number of equal-cost routes is 1. Equal-cost BGP routes can be generated for load balancing only when the BGP routes meet the first nine rules of the route-selection policy and have the same AS-Path attribute. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf maximum-load-balancing-ibgp {
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "not (../maximum-load-balancing>1) or ../maximum-load-balancing-ibgp=1";
                            default "1";
                            description
                              "Specify the maximum number of equal-cost IBGP routes. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf maximum-load-balancing-ebgp {
                            type uint16 {
                              range "1..65535";
                            }
                            must
                              "not (../maximum-load-balancing>1) or ../maximum-load-balancing-ebgp=1";
                            default "1";
                            description
                              "Specify the maximum number of equal-cost EBGP routes. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf ext-community-change {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to change the extended community attribute.";
                          }
                        }  // container common
    
                        container nexthop-recursive-lookup {
                          description
                            "Configure next hop iteration.";
                          container common {
                            description
                              "Configure next hop iteration common options.";
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // container common
    
                          container delay {
                            description
                              "Configure time of next hop change responding delay.";
                            leaf time {
                              type uint8 {
                                range "1..100";
                              }
                              units "s";
                              description
                                "Specify the delay in responding to the next hop change.";
                            }
    
                            leaf no-critical-event-time {
                              type uint8 {
                                range "0..100";
                              }
                              units "s";
                              default "10";
                              description
                                "Specify the delay in responding to the next hop change on non critical relay change event.";
                            }
                          }  // container delay
                        }  // container nexthop-recursive-lookup
    
                        container preference {
                          description
                            "Configure parameters relating to options for BGP routes preference.";
                          choice set-value-or-policy {
                            default "set-value";
                            description
                              "Set BGP routes preference by value or policy.";
                            case set-value {
                              description
                                "Set BGP routes preference by value.";
                              leaf external {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of EBGP routes. The value is an integer. An EBGP route is the optimal route learned from a peer outside the local AS.";
                              }
    
                              leaf internal {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of IBGP routes. The value is an integer. An IBGP route is a route learned from a peer inside the local AS.";
                              }
    
                              leaf local {
                                type uint8 {
                                  range "1..255";
                                }
                                default "255";
                                description
                                  "Set the protocol priority of a local BGP route. A local route refers to an automatically or manually summarized route.";
                              }
                            }  // case set-value
    
                            case rtp-ref {
                              description
                                "Set BGP routes preference by route policy.";
                              leaf route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify a routing policy to filter routes so that a configured priority is applied to the routes that match the specified policy.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice set-value-or-policy
                        }  // container preference
    
                        container dampening-routes {
                          description
                            "List of route dampening.";
                          list dampening-route {
                            must
                              "reuse < suppress and suppress < ceiling";
                            key "peer-type";
                            description
                              "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                            leaf peer-type {
                              type dampening-route-peer-type;
                              description
                                "Configure the peer type.";
                            }
    
                            leaf half-life-time {
                              type uint16 {
                                range "1..45";
                              }
                              units "min";
                              default "15";
                              description
                                "Configure a half-life for reachable routes.";
                            }
    
                            leaf reuse {
                              type uint16 {
                                range "1..20000";
                              }
                              default "750";
                              description
                                "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                            }
    
                            leaf suppress {
                              type uint16 {
                                range "1..20000";
                              }
                              default "2000";
                              description
                                "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                            }
    
                            leaf ceiling {
                              type uint16 {
                                range
                                  "1001..20000";
                              }
                              default "16000";
                              description
                                "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                            }
    
                            leaf update-standard {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable update standard.";
                            }
    
                            choice policy-type {
                              description
                                "Set route-policy or route-filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a routing policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list dampening-route
                        }  // container dampening-routes
    
                        container network-routes {
                          description
                            "List of network routes.";
                          list network-route {
                            key "address mask-length";
                            description
                              "Configure a network route in the BGP routing table.";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specify the IP address advertised by BGP. An IPv4 address can be configured in the IPv4 address family. Note: During the configuration of a network route, the IP address is adjusted based on the mask. It is recommended that you click Synchronize All after creating a network route.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "0..32";
                              }
                              description
                                "Specify the mask length of an IP address.";
                            }
    
                            choice policy-type {
                              description
                                "Specify the route-policy or filter for route advertisement.";
                              case rtp-ref {
                                description
                                  "Specify the route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the route policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list network-route
                        }  // container network-routes
    
                        container import-routes {
                          description
                            "List of imported routes.";
                          list import-route {
                            key "protocol process-id";
                            description
                              "Configure route import. Routes of other protocol types can be imported by BGP. By default, BGP does not import routes of other protocol types.";
                            leaf protocol {
                              type bgp:ipv4multi-import-route-protocol-type;
                              description
                                "Routing protocol from which routes can be imported.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              must
                                "((../protocol='ospf' or ../protocol='isis' or ../protocol='rip') and ../process-id!=0) or (../protocol!='ospf' and ../protocol!='isis' and ../protocol!='rip' and ../process-id=0)";
                              description
                                "Process ID of an imported routing protocol. The process ID is 0, if the imported routing protocol is direct routes, static routes, UNRs, or OP-routes. The process ID must be specified range from 1 to 4294967295, if the imported routing protocol is RIP, OSPF, ISIS.";
                            }
    
                            leaf med {
                              type uint32;
                              description
                                "Specifies the MED metric of the imported route.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list import-route
                        }  // container import-routes
    
                        container aggregate-routes {
                          description
                            "List of summarized routes.";
                          list aggregate-route {
                            key "address mask-length";
                            description
                              "Configure a summarized route in the BGP routing table. The local outbound interface of the summarized route is Null0. When another router receives the route, the route adds an outbound interface to the route. By default, route summarization is not performed. If the Origin attributes of the specific routes for the route summarization are different, the Origin attribute of the summarized route is that with the highest priority. Origin attributes are arranged in the priority order of complete > egp > igp. A summarized route carries the community attribute of each specific route.";
                            leaf address {
                              type inet:ip-address-no-zone;
                              must
                                "not(contains(../address,':'))";
                              description
                                "Specify the IPv4 address or IPv6 address of a summarized route. Only IPv4 summarized routes can be configured in the IPv4 address family and only IPv6 summarized routes can be configured in the IPv6 address family.";
                            }
    
                            leaf mask-length {
                              type uint8 {
                                range "1..128";
                              }
                              must
                                "../mask-length<=32";
                              description
                                "Specify the mask length of a summarized address.";
                            }
    
                            leaf as-set {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the generation of routes with the AS-SET attribute. This option can be used to create a summarized route. The AS_Path attribute of the summarized route contains the AS-Path attributes of the specific routes for the route summarization. Exercise caution when using this option if multiple AS_Paths need to be summarized to prevent route flapping.";
                            }
    
                            leaf detail-suppressed {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable detail-suppressed. Suppress the advertisement of specific routes for the route summarization. Only the summarized route is advertised.";
                            }
    
                            choice policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf attribute-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify an attribute of summarized routes. If apply as-path is used to configure the AS_Path attribute that is used in the route Summarization policy, and the as-set keyword is set, the AS_Path attribute in the policy does not take effect. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
    
                                leaf origin-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a policy for generating summarized routes. Summarized routes are generated only when the routes match route-policy. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
    
                                leaf suppress-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify a policy for suppressing the advertisement of specified routes. The routes matching the policy are not advertised, and other routes are advertised. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf attribute-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf attribute-filter-parameter {
                                  when
                                    "../attribute-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
    
                                leaf origin-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf origin-filter-parameter {
                                  when
                                    "../origin-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
    
                                leaf suppress-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf suppress-filter-parameter {
                                  when
                                    "../suppress-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice policy-type
                          }  // list aggregate-route
                        }  // container aggregate-routes
    
                        container import-filter-policy {
                          description
                            "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                          choice ipv4-import-filter-protocol-policy-type {
                            description
                              "Set IPv4 filter protocol policy.";
                            case acl-ref {
                              description
                                "ACL Route Policy.";
                              leaf acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                              }
                            }  // case acl-ref
    
                            case ip-prefix-ref {
                              description
                                "IP prefix Policy.";
                              leaf ipv4-prefix-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 prefix list name.";
                              }
                            }  // case ip-prefix-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf filter-parameter {
                                when
                                  "../filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice ipv4-import-filter-protocol-policy-type
                        }  // container import-filter-policy
    
                        container export-filter-policys {
                          description
                            "List of filtering policies.";
                          list export-filter-policy {
                            key "protocol process-id";
                            description
                              "Apply a filtering policy. It is used to filter the routes to be advertised to the peer. By default, routes are not filtered.";
                            leaf protocol {
                              type bgp:ipv4-export-filter-protocol-type;
                              description
                                "Specify the name of a routing protocol. The routing protocol takes effect only on the routes to be advertised. The IPv4 address family supports the direct, IS-IS, OSPF, RIP, and static routing protocols. The IPv6 unicast address family of a public network instance supports the direct, IS-IS, OSPFv3, RIPng, and static routing protocols. The IPv6 address family of a VPNv6 instance supports the direct, IS-IS, RIPng, and static routing protocols.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              must
                                "((../protocol='ospf' or ../protocol='rip' or ../protocol='isis') and ../process-id!=0) or ((../protocol!='ospf' and ../protocol!='rip' and ../protocol!='isis') and ../process-id=0)";
                              description
                                "Specify the process ID required to be matched. The value is an integer ranging from 0 to 4294967295. If direct or static routes need to be filtered, no process ID is required.";
                            }
    
                            choice ipv4-filter-protocol-policy-type {
                              mandatory true;
                              description
                                "Set IPv4 filter protocol policy.";
                              case acl-ref {
                                description
                                  "ACL Route Policy.";
                                leaf acl-name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  description
                                    "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                                }
                              }  // case acl-ref
    
                              case ip-prefix-ref {
                                description
                                  "IP prefix Policy.";
                                leaf ipv4-prefix-filter {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Specify the IPv4 prefix list name.";
                                }
                              }  // case ip-prefix-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice ipv4-filter-protocol-policy-type
                          }  // list export-filter-policy
                        }  // container export-filter-policys
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
    
                        container qos {
                          description
                            "Configure QoS.";
                          choice local-id-policy {
                            description
                              "Configure QoS local ID.";
                            case value {
                              description
                                "Specify the QoS local ID value.";
                              leaf local-id {
                                type uint8 {
                                  range "1..255";
                                }
                                description
                                  "Specify the QoS local ID value.";
                              }
                            }  // case value
    
                            case rtp-ref {
                              description
                                "Route policy.";
                              leaf local-id-policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a routing policy to filter routes so that a configured QoS ID is applied to the routes that match the specified policy.";
                              }
                            }  // case rtp-ref
    
                            case xpl-ref {
                              description
                                "Route filter.";
                              leaf local-id-filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Specify a route-filter name.";
                              }
    
                              leaf local-id-filter-parameter {
                                when
                                  "../local-id-filter-name";
                                type xpl:filter-parameter-type;
                                description
                                  "Specify a route-filter parameter.";
                              }
                            }  // case xpl-ref
                          }  // choice local-id-policy
                        }  // container qos
                      }  // container ipv4-multicast
    
                      container ipv4-mvpn {
                        when
                          "../bgp:type = 'mvpn'";
                        description
                          "Configure IPv4-family mvpn options.";
                        container common {
                          description
                            "Configure IPv4-family mvpn common options.";
                          leaf policy-vpntarget {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable VPN target-based filtering for the received VPN routes. Only the VPN route whose Export RT attribute matches the local Import RT attribute can be added to the routing table. This option can be used in the inter-AS VPN Option B solution and the ASBR MP-EBGP inter-AS L2VPN solution in Kompella mode.";
                          }
    
                          leaf vpn-orf-enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable vpn-orf capability.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf add-path-select-num {
                            type uint8 {
                              range "2..64";
                            }
                            description
                              "Number of Add-Path routes.";
                          }
    
                          leaf route-reflector-ext-community-filter {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ext-community-filters/rtp:ext-community-filter/rtp:name";
                            }
                            description
                              "Set the name of the extended community filter supported by an RR group. For the purpose of load balancing, only the IBGP route whose route-target extended community attribute meets the matching rules can be reflected.";
                          }
                        }  // container common
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
                      }  // container ipv4-mvpn
    
                      container ipv6-mvpn {
                        when
                          "../bgp:type='mvpnv6'";
                        description
                          "Configure IPv6-family mvpn options.";
                        container common {
                          description
                            "Configure IPv6-family mvpn common options.";
                          leaf policy-vpntarget {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable VPN target-based filtering for the received VPN routes. Only the VPN route whose Export RT attribute matches the local Import RT attribute can be added to the routing table. This option can be used in the inter-AS VPN Option B solution and the ASBR MP-EBGP inter-AS L2VPN solution in Kompella mode.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf add-path-select-num {
                            type uint8 {
                              range "2..64";
                            }
                            description
                              "Number of Add-Path routes.";
                          }
    
                          leaf route-reflector-ext-community-filter {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ext-community-filters/rtp:ext-community-filter/rtp:name";
                            }
                            description
                              "Set the name of the extended community filter supported by an RR group. For the purpose of load balancing, only the IBGP route whose route-target extended community attribute meets the matching rules can be reflected.";
                          }
                        }  // container common
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
                      }  // container ipv6-mvpn
    
                      container l2vpnad {
                        when
                          "../bgp:type='l2vpnad'";
                        description
                          "Configure l2vpn-ad-family options.";
                        container common {
                          description
                            "Configure l2vpn-ad-family common options.";
                          leaf policy-vpntarget {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable VPN target-based filtering for the received VPN routes. Only the VPN route whose Export RT attribute matches the local Import RT attribute can be added to the routing table. This option can be used in the inter-AS VPN Option B solution and the ASBR MP-EBGP inter-AS L2VPN solution in Kompella mode.";
                          }
    
                          leaf vpls-ad-disable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable virtual private LAN service auto-discovery.not receive BGP-AD route.";
                          }
    
                          leaf vpws-enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable virtual private wire services.";
                          }
    
                          leaf vpls-enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable virtual private LAN services.";
                          }
    
                          leaf multi-homing-nonstand {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable capability of multi-homing for virtual private LAN services.";
                          }
    
                          leaf vpn-orf-enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable vpn-orf capability.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf default-local-preference {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "100";
                            description
                              "The local preference of BGP routes.";
                          }
    
                          leaf bestroute-router-id-prior-clusterlist {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare originator before clusterlist in route selection.";
                          }
    
                          leaf tunnel-selector-name {
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Configure a tunnel selector. Applying it to the BGP IPv4 unicast, BGP VPNv4 address families, BGP VPNv6 address families and BGP L2VPN AD address family so that IPv4,VPNv4,VPNv6 and L2VPN AD labeled routes can be iterated to tunnels based on the tunnel selector. By default, no tunnel selector is configured.";
                          }
    
                          leaf route-reflector-ext-community-filter {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ext-community-filters/rtp:ext-community-filter/rtp:name";
                            }
                            description
                              "Set the name of the extended community filter supported by an RR group. For the purpose of load balancing, only the IBGP route whose route-target extended community attribute meets the matching rules can be reflected.";
                          }
    
                          leaf nexthop-select-depend-type {
                            type bgp:select-depend-type;
                            default "depend-ip";
                            description
                              "Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                          }
                        }  // container common
    
                        container slow-peer {
                          description
                            "Configure peer advertising routes slowly.";
                          leaf detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable detect slow peers.";
                          }
    
                          leaf detection-threshold {
                            type uint16 {
                              range "120..3600";
                            }
                            units "s";
                            default "300";
                            description
                              "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                          }
    
                          leaf absolute-detection {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable absolute-detect slow peers.";
                          }
    
                          leaf absolute-detection-threshold {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "9";
                            description
                              "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                          }
                        }  // container slow-peer
                      }  // container l2vpnad
                    }  // list af
                  }  // container afs
    
                  container vpn-as-number {
                    when
                      "../../../ni:name!='_public_'";
                    description
                      "Configure BGP vpn as-number.";
                    leaf local-ipv4 {
                      type as-number-validate;
                      description
                        "IPv4 as-number.";
                    }
    
                    leaf local-ipv6 {
                      type as-number-validate;
                      description
                        "IPv6 as-number.";
                    }
                  }  // container vpn-as-number
    
                  container dynamic-peer-prefixes {
                    description
                      "List of IP prefixes from which a dynamic BGP peer group listens for BGP connection requests.";
                    list dynamic-peer-prefix {
                      key "address mask-length peer-group";
                      description
                        "Configure an IP prefix from which a dynamic BGP peer group listens for BGP connection requests.";
                      leaf address {
                        type inet:ip-address-no-zone;
                        must
                          "contains(., ':') = 'false'";
                        description
                          "Network segment address for a dynamic peer connection.";
                      }
    
                      leaf mask-length {
                        type uint8 {
                          range "0..32";
                        }
                        description
                          "Mask length of a network segment. For an IPv4 network address, the value ranges from 0 to 32.";
                      }
    
                      leaf peer-group {
                        type leafref {
                          path "../../../peer-groups/peer-group/name";
                        }
                        must
                          "../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'dynamic'";
                        must
                          "../../../peer-groups/peer-group[name = current()]/listen-as or ../../../peer-groups/peer-group[name = current()]/listen-as-segments/listen-as-segment or /ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/bgp:bgp/bgp:base-process/bgp:peer-groups/bgp:peer-group[name = current()]/bgp:as-number-type='confederation'";
                        description
                          "The peer-group within which the dynamic neighbor will be configured.";
                      }
                    }  // list dynamic-peer-prefix
                  }  // container dynamic-peer-prefixes
    
                  container unnumbered-peer-interfaces {
                    description
                      "List of address unnumbered interface.";
                    list unnumbered-peer-interface {
                      key "if-name";
                      description
                        "Configure the interface bound to the peer group.";
                      leaf if-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Address unnumbered interface.";
                      }
    
                      leaf peer-group {
                        ext:operation-exclude "update" {
                          description "The node cannot be modified, when node is already configured.";
                        }
                        type leafref {
                          path "../../../peer-groups/peer-group/name";
                        }
                        must
                          "../../../peer-groups/peer-group[name = current()]/peer-establish-mode='unnumbered'";
                        mandatory true;
                        description
                          "The peer-group within which the unnumbered neighbor will be configured.";
                      }
                    }  // list unnumbered-peer-interface
                  }  // container unnumbered-peer-interfaces
    
                  container peer-groups {
                    description
                      "List of BGP peer groups. The BGP peer groups can help you simplify the configurations. If you want to perform the same configuration for several peers, you can create a peer group and then configure the peer group. After you add these peers to the peer group, all these peers will have the same configurations as the peer group.";
                    list peer-group {
                      key "name";
                      description
                        "Configure information about a BGP peer group.";
                      leaf name {
                        type string {
                          length "1..47";
                          pattern '([^\? ]+)';
                        }
                        description
                          "Specify the name of a peer group. The value is a string of characters, spaces not supported.";
                      }
    
                      leaf type {
                        ext:operation-exclude "update" {
                          description "The node cannot be modified, when node is already configured.";
                        }
                        type group-type;
                        mandatory true;
                        description
                          "Specify the type of a peer group. The value can be IBGP or EBGP.The object cannot be modified.";
                      }
    
                      leaf local-if-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points: 1. The address of the loopback interface of the BGP peer must be reachable. 2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                      }
    
                      leaf local-if-address {
                        type inet:ip-address-no-zone;
                        description
                          "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points:
    1. The address of the loopback interface of the BGP peer must be reachable.
    2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                      }
    
                      leaf password-type {
                        type bgp:password-type;
                        must
                          "not((../password-type and ../password-type!='null') and (../key-chain-name or ../tcp-ao-name))";
                        must
                          "(not(../password-type and ../password-type!='null') and not(../password-text)) or (../password-type and ../password-type!='null' and ../password-text)";
                        default "null";
                        description
                          "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. Plaintexts and ciphertexts are supported.";
                      }
    
                      leaf password-text {
                        when
                          "../password-type and ../password-type!='null'";
                        type pub-type:password-extend;
                        mandatory true;
                        description
                          "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. The character string in a password identifies the contents of the password, spaces not supported. The TCP connection can be established only when the same MD5 authentication password is set on both ends. If a plaintext is used, the maximum password length is 255. If a ciphertext is used, the maximum password length is 432. If the length is set to 0, no password is set.";
                      }
    
                      leaf key-chain-name {
                        ext:case-sensitivity "lower-only";
                        type string {
                          length "1..47";
                          pattern '[^A-Z]+';
                        }
                        must
                          "not(../password-type!='null' or ../tcp-ao-name)";
                        description
                          "Specify the Keychain authentication name used when BGP peers establish a TCP connection. The value is a string, spaces not supported. By default, the Keychain authentication is not configured. Keychain authentication mode and password authentication mode are mutually exclusive. Configuring Keychain authentication can enhance the security of the TCP connections between BGP peers. Keychain authentication using the same encryption algorithm and password must be configured on the two ends of BGP peers to establish a TCP connection and exchange BGP packets. Before configuring BGP Keychain authentication, you need to configure Keychain according to keychain name. Otherwise, the TCP connections between the BGP peers cannot be established.";
                      }
    
                      leaf tcp-ao-name {
                        type leafref {
                          path "/socket:socket/socket:tcp-aos/socket:tcp-ao/socket:name";
                        }
                        must
                          "not(../password-type!='null' or ../key-chain-name)";
                        description
                          "Specify TCP-AO authentication for establishing the TCP connection between BGP peers.";
                      }
    
                      leaf description {
                        type string {
                          length "1..255";
                          pattern '([^?]*)';
                        }
                        description
                          "Specify the description of a peer group. The value is a string, which can be letters or digits, spaces supported. By default, no description is configured.";
                      }
    
                      leaf group-as {
                        when
                          "not(../type='ibgp') and ../peer-establish-mode = 'static'";
                        type as-number-validate;
                        description
                          "Specify the AS number of a peer group. The AS number is in either a 2-byte or 4-byte format.
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.";
                      }
    
                      leaf tcp-mss {
                        type uint16 {
                          range "176..4096";
                        }
                        description
                          "Maximum TCP MSS value used for TCP connection establishment for a peer group.";
                      }
    
                      leaf ebgp-max-hop {
                        when "../type='ebgp'";
                        type uint32 {
                          range "1..255";
                        }
                        must
                          "not(../valid-ttl-hops) or (../valid-ttl-hops>=1 and not(../valid-ttl-hops>255) and ../ebgp-max-hop=1)";
                        default "1";
                        description
                          "Maximum number of hops in an indirect EBGP connection. By default, EBGP connections can be established only between directly connected peers. The function must be configured on both ends.";
                      }
    
                      leaf valid-ttl-hops {
                        type uint16 {
                          range "1..255";
                        }
                        must
                          "not(../ebgp-max-hop and ../ebgp-max-hop>1)";
                        description
                          "Enable GTSM on a peer or peer group. The valid-TTL-Value parameter is used to specify the number of TTL hops to be detected. If the value is configured as hops, the valid TTL range of the detected packet is [255-hops+1, 255].";
                      }
    
                      leaf tracking-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable peer tracking, After peer tracking is enabled, the device can fast detect the unreachability of a peer and reset the session.";
                      }
    
                      leaf tracking-delay-time {
                        when
                          "../tracking-enable='true'";
                        type uint16;
                        units "s";
                        default "0";
                        description
                          "Specify the delay to reset the session.";
                      }
    
                      leaf conventional {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable general router functions on peers. In conventional mode, not all the extended router functions, such as, route refreshing, GR, and multi-address family negotiation, are available. Therefore, the router of a new version can be compatible with the routers of earlier versions.";
                      }
    
                      leaf route-refresh {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to advertise Refresh messages to peers.";
                      }
    
                      leaf four-byte-as {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to advertise routes carrying 4-byte AS numbers to peers. After the 4-byte AS number function is disabled, Open packets will not carry 4-byte AS number capability flag, and peer ends will not know that local ends have the 4-byte AS number function. The 4-byte AS number function cannot be disabled from peers (peer groups) if a 4-byte AS number, fake AS number, or confederation ID is configured on a router and the AS number of a peer is 4-byte. If the 4-byte AS number function is disabled in such a situation, BGP sessions may fail to be established, and route transmission may be affected.";
                      }
    
                      leaf ignore {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function to tear down sessions between peers and clear all related routing information.";
                      }
    
                      leaf connect-mode {
                        when
                          "../peer-establish-mode!='dynamic'";
                        type connect-mode;
                        default "null";
                        description
                          "The value can be Connect-only, Listen-only, or Both. If the value is Connect-only, the specified peer or peer group only initiatively sends connection requests, instead of listening to connection requests. If the value is Listen-only, the specified peer or peer group only listens to connection requests, instead of initiatively sending connection requests. If the value is Both, the specified peer or peer group not only initiatively sends connection requests, but also listens to connection requests. The default value is Both.";
                      }
    
                      leaf log-change {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to record the session status and events of the specified peer or peer group.";
                      }
    
                      leaf path-mtu-auto-discovery {
                        when
                          "../peer-establish-mode = 'static'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable path mtu auto discovery.";
                      }
    
                      leaf local-ifnet-disable {
                        ext:dynamic-default;
                        type boolean;
                        description
                          "Enable/disable MPLS local IFNET tunnel creation on a BGP peer. By default, MPLS local IFNET tunnels can be created on an EBGP peer,but such tunnels cannot be created on an IBGP peer.";
                      }
    
                      leaf check-first-as {
                        when "../type='ebgp'";
                        type peer-cap-config-state;
                        default "default";
                        description
                          "Check the first AS in the AS_Path of the update messages from EBGP peers.";
                      }
    
                      leaf memory-priority {
                        type memory-priority;
                        default "medium";
                        description
                          "Set a priority that determines the disconnection order of each BGP peer relationship in a peer group if memory overload occurs.";
                      }
    
                      leaf oscillation-dampening {
                        when
                          "../peer-establish-mode!='dynamic'";
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to suppress the establishment of a specified peer group's peer relationships that flap continuously. By default, the capability is enabled.";
                      }
    
                      leaf peer-establish-mode {
                        ext:operation-exclude "update|delete" {
                          description "The node cannot be modified, deleted when node is already configured.";
                        }
                        type peer-establish-mode;
                        default "static";
                        description
                          "Specify mode in which a BGP peer is established.";
                      }
    
                      leaf as-number-type {
                        ext:operation-exclude "update|delete" {
                          description "The node cannot be modified, deleted when node is already configured.";
                        }
                        when
                          "../peer-establish-mode = 'dynamic' and ../../../../../ni:name='_public_'";
                        type as-number-type;
                        must
                          ". = 'dynamic-neighbor' or (. = 'confederation' and /bgp:bgp/bgp:base-process/bgp:confederation/bgp:id and ../type = 'ebgp')";
                        default
                          "dynamic-neighbor";
                        description
                          "Specify the type of the AS number that is used to establish a BGP peer relationship dynamically. The value can be dynamic-neighbor or confederation.";
                      }
    
                      leaf-list listen-as {
                        when
                          "../peer-establish-mode = 'dynamic' and ../type = 'ebgp'";
                        type as-number-validate;
                        must
                          "not(. = /bgp:bgp/bgp:base-process/bgp:as) and not(/ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/bgp:bgp/bgp:base-process/bgp:peer-groups/bgp:peer-group[name = current()/../name]/bgp:as-number-type='confederation')";
                        max-elements 6;
                        description
                          "Specify the peer AS from which a dynamic EBGP peer group listens for BGP connection requests.";
                      }
    
                      container listen-as-segments {
                        when
                          "../peer-establish-mode = 'dynamic' and ../type = 'ebgp'";
                        description
                          "List of AS number ranges for listening.";
                        list listen-as-segment {
                          must
                            "not(../../listen-as) and not(/ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/bgp:bgp/bgp:base-process/bgp:peer-groups/bgp:peer-group[name = current()/../../name]/bgp:as-number-type='confederation')";
                          key "begin-as end-as";
                          max-elements 16;
                          description
                            "Specify an AS number range from which a dynamic EBGP peer group listens for connection requests. The value of begin-as must be smaller than that of end-as. The value of As-Segment cannot contain the value of LocalAS or the value of fake-as. An AS number range cannot contain a confederation AS number, and any two AS number ranges cannot contain each other.";
                          leaf begin-as {
                            type as-number-validate;
                            description
                              "Specify the start AS number in an AS range.";
                          }
    
                          leaf end-as {
                            type as-number-validate;
                            description
                              "Specify the end AS number in an AS range.";
                          }
                        }  // list listen-as-segment
                      }  // container listen-as-segments
    
                      container fake-as-parameter {
                        description
                          "Configure BGP fake-as parameters.";
                        leaf fake-as {
                          when
                            "../../bgp:type='ebgp'";
                          type bgp:as-number-validate;
                          description
                            "Fake AS number that is specified for a local peer. By default, a peer uses the actual AS number of the local end.
    An AS number can be in either two-byte format or four-byte format:
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.";
                        }
    
                        leaf dual-as {
                          when "../fake-as";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to the remote EBGP peer can use the actual or fake AS number when specifying the AS number for a local peer. The local peer uses the fake and actual AS numbers to establish a BGP peer relationship with the remote end and identifies the AS number configured by the remote end through the error code (OPEN Message Error) and sub-error code (Bad Peer AS) of the Notification message from the remote end.";
                        }
    
                        leaf prepend-global-as {
                          when "../fake-as";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to add the global AS number to the Update packets to be advertised.";
                        }
    
                        leaf prepend-fake-as {
                          when "../fake-as";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to add the Fake AS number to received Update packets.";
                        }
                      }  // container fake-as-parameter
    
                      container timer {
                        description
                          "Configure BGP peer timer parameters.";
                        leaf keep-alive-time {
                          type uint32 {
                            range "0..21845";
                          }
                          units "s";
                          must
                            "(../keep-alive-time != 0 and (../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)";
                          default "60";
                          description
                            "If the value of a timer changes, the BGP peer relationship between the routers is disconnected. This is because the peers need to re-negotiate the Keepalive time and hold time. Therefore, confirm the action before you change the value of the timer. The Keepalive time should be at least three times of the hold time.";
                        }
    
                        leaf hold-time {
                          type uint32 {
                            range "0 | 3..65535";
                          }
                          units "s";
                          must
                            "(((../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)) and ../hold-time>=../min-hold-time";
                          default "180";
                          description
                            "Hold time. When setting keepalive-time and hold-time, note the following:
    1. The values of keepalive-time and hold-time cannot both be 0. Otherwise, the BGP timer becomes invalid. That is, BGP does not detect link faults according to the timer.
    2. The value of hold-time is much greater than that of keepalive-time, such as, keepalive 1 and hold 65535. If the value of hold-time is too large, BGP cannot detect link faults timely.
    The priority of a timer is lower than that of a peer timer.
    After a connection is established between peers, the values of keepalive-time and hold-time are negotiated by the peers. The smaller value of hold-time contained in Open packets of both peers is taken as the value of hold-time. The smaller value of the locally set value of keepalive-time and one third of the value of hold-time is taken as the value of keepalive-time.";
                        }
    
                        leaf min-hold-time {
                          type uint32 {
                            range
                              "0 | 20..65535";
                          }
                          units "s";
                          must
                            "../hold-time>=../min-hold-time";
                          default "0";
                          description
                            "The default value of zero means that the minimum hold time check does not take effect. If the value is changed, the new value takes effect since the next peer relationship establishment. During the peer relationship establishment, the local device checks the hold time of the remote end. If the hold time is less than the minimum hold time, the local device sends an error packet with error code 02 and subcode 06, and the peer relationship fails to be established.";
                        }
    
                        leaf connect-retry-time {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          default "32";
                          description
                            "ConnectRetry interval.";
                        }
                      }  // container timer
    
                      container bfd-parameter {
                        description
                          "Configure BFD.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BFD.";
                        }
    
                        choice mode-type {
                          description
                            "Set bfd mode.";
                          case single {
                            description
                              "Single hop mode.";
                            leaf single-hop {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "The single hop mode is preferred during the BFD session establishment between IBGP peers.";
                            }
    
                            leaf compatible {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "Compatible.";
                            }
                          }  // case single
    
                          case link {
                            description
                              "Per-link-echo mode.";
                            leaf per-link-echo {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "The per-link one-arm-echo mode is preferred during the BFD session establishment between IBGP peers.";
                            }
                          }  // case link
    
                          case one-arm-echo {
                            description
                              "One-arm-echo mode.";
                            leaf one-arm-echo {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "The one arm echo mode is preferred during the BFD session establishment between BGP peers.";
                            }
                          }  // case one-arm-echo
                        }  // choice mode-type
    
                        leaf multiplier {
                          type uint32 {
                            range "3..50";
                          }
                          default "3";
                          description
                            "Specify the detection multiplier.";
                        }
    
                        leaf min-rx-interval {
                          type uint32 {
                            range "3..20000";
                          }
                          units "ms";
                          description
                            "Specify the minimum interval at which BFD packets are received. The value range and default value are controlled by the PAF.";
                        }
    
                        leaf min-tx-interval {
                          type uint32 {
                            range "3..20000";
                          }
                          units "ms";
                          description
                            "Specify the minimum interval at which BFD packets are sent. The value range and default value are controlled by the PAF.";
                        }
    
                        leaf valid-ttl-hops {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Specify the valid TTL hops value.";
                        }
                      }  // container bfd-parameter
    
                      container graceful-restart {
                        when
                          "../peer-establish-mode!='dynamic'";
                        description
                          "Configure graceful restart.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable graceful restart capability.";
                        }
    
                        leaf time-wait-for-rib {
                          type uint32 {
                            range "3..3000";
                          }
                          units "s";
                          default "600";
                          description
                            "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                        }
    
                        leaf restart-time {
                          type uint16 {
                            range "3..3600";
                          }
                          units "s";
                          default "150";
                          description
                            "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                        }
    
                        leaf peer-reset {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable reseting BGP peer graceful.";
                        }
                      }  // container graceful-restart
    
                      container local-graceful-restart {
                        when
                          "../peer-establish-mode = 'static'";
                        description
                          "Configure local graceful restart.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable graceful restart capability.";
                        }
    
                        leaf time-wait-for-rib {
                          type uint32 {
                            range "3..3000";
                          }
                          units "s";
                          default "600";
                          description
                            "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                        }
    
                        leaf restart-time {
                          type uint16 {
                            range "3..3600";
                          }
                          units "s";
                          default "150";
                          description
                            "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                        }
                      }  // container local-graceful-restart
    
                      container ssl-policy {
                        when
                          "../../../../../ni:name='_public_' and ../peer-establish-mode='static'";
                        description
                          "Configure SSL policy for BGP group.";
                        leaf name {
                          type leafref {
                            path "/ssl:ssl/ssl:ssl-policys/ssl:ssl-policy/ssl:policy-name";
                          }
                          description
                            "SSL policy name.";
                        }
    
                        leaf role {
                          ext:operation-exclude "update" {
                            description "The node cannot be modified. You need to disable or delete the node first.";
                          }
                          type ssl-role-type;
                          must
                            "(../role='client' and ../../connect-mode != 'listen-only') or (../role='server' and ../../connect-mode != 'connect-only')";
                          description
                            "Configure a peer as an SSL client or server.";
                        }
    
                        leaf server-certificate {
                          type empty;
                          must
                            "../role != 'client'";
                          description
                            "Enable/disable SSL/TLS authentication on an SSL server.";
                        }
                      }  // container ssl-policy
    
                      container members {
                        config false;
                        description
                          "List of members in a peer group.";
                        list member {
                          key "peer-address";
                          config false;
                          description
                            "Statistics of member in a peer group.";
                          leaf peer-address {
                            type inet:ip-address-no-zone;
                            config false;
                            description
                              "Specify the address of the peer joining the peer group.";
                          }
                        }  // list member
                      }  // container members
    
                      container afs {
                        description
                          "List of all peer groups that are enabled in a specified address family.";
                        list af {
                          key "type";
                          description
                            "Configure peer group enabled in a specified address family.";
                          leaf type {
                            type bgp:group-af-type;
                            must
                              "../../../../../afs/af[type = current()]";
                            description
                              "Address family type of a BGP instance.";
                          }
    
                          container ipv4-unicast {
                            when
                              "../type = 'ipv4uni'";
                            must
                              "../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                            description
                              "Configure IPv4 unicast options.";
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf orf-type {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:bgp-orf-type;
                              must
                                "(../orf-mode='null' and ../orf-type='null') or (../orf-mode!='null' and ../orf-type!='null')";
                              default "null";
                              description
                                "ORF Type.";
                            }
    
                            leaf orf-mode {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:bgp-orf-mode-type;
                              must
                                "(../orf-mode='null' and ../orf-type='null') or (../orf-mode!='null' and ../orf-type!='null')";
                              default "null";
                              description
                                "Configure an outbound route filtering (ORF) mode, which can be Receive, Send, or Both, and the default ORF mode is Both.";
                            }
    
                            leaf label-route-capability {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange labeled routes.";
                            }
    
                            leaf check-tunnel-reachable {
                              when
                                "../label-route-capability='true'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable tunnel reachability check.";
                            }
    
                            leaf check-withdraw-type {
                              when
                                "../label-route-capability='true'";
                              type boolean;
                              default "true";
                              status obsolete;
                              description
                                "Enable/disable withdraw type check.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNv6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf static-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported static route when advertising them to its peers.";
                            }
    
                            leaf unicast-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported unicast route when advertising them to its peers.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf origin-as-validation {
                              when
                                "../advertise-ext-community='true' and ../../../../peer-establish-mode='static'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf default-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                            }
    
                            choice default-route-advertise-policy-type {
                              description
                                "Set default route advertise-policy.";
                              case rtp-ref {
                                description
                                  "The default-route-advertise-policy.";
                                leaf default-route-advertise-policy {
                                  when
                                    "../default-route-advertise='true'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a used policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "The default-route-advertise-filter.";
                                container default-route-advertise-filter {
                                  when
                                    "../default-route-advertise='true'";
                                  description
                                    "Configure the route-filter for default route advertise.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // container default-route-advertise-filter
                              }  // case xpl-ref
                            }  // choice default-route-advertise-policy-type
    
                            leaf default-route-match-mode {
                              when
                                "../default-route-advertise='true'";
                              type cra-match-mode;
                              default "null";
                              description
                                "Configure the matching mode of default route advertisement, which can be disabling of route advertisement conditions, enabling of all route advertisement conditions, and enabling of part route advertisement conditions. Enabling of all route advertisement conditions indicates that a default route can be advertised only when it matches all the conditions. Enabling of part route advertisement conditions indicates that a default route can be advertised only when it matches one condition.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf substitute-as-enable {
                              when
                                "../../../../bgp:type='ebgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                            }
    
                            leaf soo {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type string {
                                length "3..21";
                              }
                              description
                                "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf exp-mode {
                              type exp-mode-type;
                              default "null";
                              description
                                "Specify the ASs in which a BGP label can inherit the QoS priority carried in the outer label of public tunnel in the Core AS and the ASs in which the priorities of BGP LSPs must be restored before the LSPs are advertised to a non-core AS.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf prefix-sid {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange IPv4 prefix SIDs with a specified IPv6 peer group.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf advertise-srv6-locator {
                                  when
                                    "../prefix-sid='true'";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf load-balancing-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            container option {
                              description
                                "Configure IPv4 unicast group common options.";
                              leaf export-origin-as-validation {
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable the function ebgp group advertising dependent roa validation, route is advtised roa reslut is valid.";
                              }
    
                              leaf include-not-found {
                                when
                                  "../export-origin-as-validation='enable'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the include-not-found attribute of the ROA validation.";
                              }
    
                              leaf external {
                                when
                                  "../include-not-found='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable ROA export validation to advertise only external not found routes.";
                              }
                            }  // container option
    
                            container default-route-match-conditions {
                              when
                                "../default-route-match-mode and ../default-route-match-mode!='null'";
                              description
                                "List of condition matching to filter the default routes to be advertised. The value takes effect only when the default route matching mode is not null and more than one IPv4 default route matching condition lists are configured.";
                              list default-route-match-condition {
                                key "address mask";
                                min-elements 1;
                                max-elements 4;
                                description
                                  "Configure the matching condition for default route advertisement.";
                                leaf address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Configure a prefix that is used to match default routes.";
                                }
    
                                leaf mask {
                                  type uint32 {
                                    range
                                      "0..32";
                                  }
                                  description
                                    "Configure a mask that is used to match default routes.";
                                }
                              }  // list default-route-match-condition
                            }  // container default-route-match-conditions
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf accept-prefix {
                                when "../number";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
    
                            container advertise-dependent-filter {
                              presence
                                "Enable peer group advertising dependent filter.";
                              description
                                "Configure peer group advertising dependent filter.";
                              leaf dependent-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-lists/rtp:ipv4-prefix-list/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Specify a dependent route-filter name.";
                              }
    
                              leaf dependent-filter-type {
                                type bgp:dependent-prefix-filter-type;
                                mandatory true;
                                description
                                  "Specify a depentent route-filter mode.";
                              }
    
                              leaf condition-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-lists/rtp:ipv4-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a condition route-filter name.";
                              }
                            }  // container advertise-dependent-filter
    
                            container entropy-label-parameter {
                              when
                                "../../../../../../../../ni:name='_public_' and ../label-route-capability='true'";
                              description
                                "Configure information about entropy label parameter in a peer group.";
                              leaf advertise-entropy-label {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the capability of advertising entropy labels.";
                              }
    
                              leaf padding {
                                when
                                  "../advertise-entropy-label='true'";
                                type string {
                                  length "1..32";
                                  pattern
                                    '(([0-9A-F])*)';
                                }
                                description
                                  "Padding format. The value is a hexadecimal string containing 1 to 32 characters (16 hexadecimal numbers). It cannot contain spaces, and can only contain uppercase letters (A to F) and digits (0 to 9), and the length must be an even number.";
                              }
    
                              leaf attribute-type {
                                when
                                  "../advertise-entropy-label='true'";
                                type entropy-label-attribute-type;
                                mandatory true;
                                description
                                  "The attribute-type of advertising entropy labels.";
                              }
    
                              leaf entropy-label {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of delivering the entropy label capability to the forwarding plane.";
                              }
                            }  // container entropy-label-parameter
    
                            container route-server {
                              description
                                "Configure the route server function on a device and specifies an EBGP peer as its client.";
                              leaf route-server-client {
                                when
                                  "../../../../../bgp:type='ebgp' and ../../../../../peer-establish-mode='static'";
                                type empty;
                                must
                                  "not(../route-server-client) or (not(/bgp:bgp/bgp:base-process/bgp:confederation/bgp:id) and (/bgp:bgp/bgp:base-process/bgp:confederation/bgp:nonstanded = 'false'))";
                                must
                                  "not(../route-server-client) or (../../label-route-capability = 'false')";
                                must
                                  "not(../route-server-client) or (../../prefix-sid = 'false')";
                                description
                                  "Enable/disable the route server function on a device and specifies an EBGP peer as its client.";
                              }
                            }  // container route-server
    
                            container hierarchy-convergence {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure the current peer group's hierarchy convergence capablity.";
                              leaf advertise-hierarchy-convergence {
                                type boolean;
                                default "true";
                                description
                                  "Enable/disable advertise the hierarchy convergence attribute to a peer group.";
                              }
                            }  // container hierarchy-convergence
    
                            container link-bandwidth {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure link bandwidth attribute.";
                              leaf advertise {
                                when
                                  "../../../../../bgp:type='ebgp'";
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable advertise the link bandwidth attribute to an EBGP peer.";
                              }
    
                              leaf transitive {
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable transitive the link bandwidth attribute.";
                              }
    
                              leaf generate {
                                when
                                  "../../../../../bgp:type='ebgp'";
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable generate the link bandwidth attribute to an EBGP peer.";
                              }
                            }  // container link-bandwidth
                          }  // container ipv4-unicast
    
                          container ipv6-unicast {
                            when
                              "../type = 'ipv6uni'";
                            must
                              "../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                            description
                              "Configure IPv6 unicast options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf label-route-capability {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange labeled routes.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf static-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported static route when advertising them to its peers.";
                            }
    
                            leaf unicast-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported unicast route when advertising them to its peers.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf origin-as-validation {
                              when
                                "../advertise-ext-community='true' and ../../../../peer-establish-mode='static' and ../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf default-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                            }
    
                            choice default-route-advertise-policy-type {
                              description
                                "Set default route advertise-policy.";
                              case rtp-ref {
                                description
                                  "The default-route-advertise-policy.";
                                leaf default-route-advertise-policy {
                                  when
                                    "../default-route-advertise='true'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a used policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "The default-route-advertise-filter.";
                                container default-route-advertise-filter {
                                  when
                                    "../default-route-advertise='true'";
                                  description
                                    "Configure the route-filter for default route advertise.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // container default-route-advertise-filter
                              }  // case xpl-ref
                            }  // choice default-route-advertise-policy-type
    
                            leaf default-route-match-mode {
                              when
                                "../default-route-advertise='true'";
                              type cra-match-mode;
                              default "null";
                              description
                                "Configure the matching mode of default route advertisement, which can be disabling of route advertisement conditions, enabling of all route advertisement conditions, and enabling of part route advertisement conditions. Enabling of all route advertisement conditions indicates that a default route can be advertised only when it matches all the conditions. Enabling of part route advertisement conditions indicates that a default route can be advertised only when it matches one condition.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf import-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL6 policy.";
                            }
    
                            leaf export-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL6 policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf substitute-as-enable {
                              when
                                "../../../../bgp:type='ebgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                            }
    
                            leaf soo {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type string {
                                length "3..21";
                              }
                              description
                                "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf load-balancing-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf prefix-sid {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange IPv4 prefix SIDs with a specified IPv6 peer group.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf advertise-srv6-locator {
                                  when
                                    "../prefix-sid='true'";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            container option {
                              description
                                "Configure IPv6 unicast group common options.";
                              leaf export-origin-as-validation {
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable the function ebgp group advertising dependent roa validation, route is advtised roa reslut is valid.";
                              }
    
                              leaf include-not-found {
                                when
                                  "../export-origin-as-validation='enable'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the include-not-found attribute of the ROA validation.";
                              }
    
                              leaf external {
                                when
                                  "../include-not-found='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable ROA export validation to advertise only external not found routes.";
                              }
                            }  // container option
    
                            container default-route-match-conditions {
                              when
                                "../default-route-match-mode and ../default-route-match-mode!='null'";
                              description
                                "List of condition matching to filter the default routes to be advertised. The value takes effect only when the default route matching mode is not null and more than one IPv6 default route matching condition lists are configured.";
                              list default-route-match-condition {
                                key "address mask";
                                min-elements 1;
                                max-elements 4;
                                description
                                  "Configure the matching condition for default route advertisement.";
                                leaf address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Configure a IPv6-prefix that is used to match default routes.";
                                }
    
                                leaf mask {
                                  type uint32 {
                                    range
                                      "0..128";
                                  }
                                  description
                                    "Configure a mask that is used to match default routes.";
                                }
                              }  // list default-route-match-condition
                            }  // container default-route-match-conditions
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf accept-prefix {
                                when "../number";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
    
                            container advertise-dependent-filter6 {
                              presence
                                "Enable peer group advertising dependent filter.";
                              description
                                "Configure peer group advertising dependent filter.";
                              leaf dependent-filter6 {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-lists/rtp:ipv6-prefix-list/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Specify a dependent route-filter name.";
                              }
    
                              leaf dependent-filter-type {
                                type bgp:dependent-prefix-filter-type;
                                mandatory true;
                                description
                                  "Specify a dependent route-filter mode.";
                              }
    
                              leaf condition-filter6 {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-lists/rtp:ipv6-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a condition route-filter name.";
                              }
                            }  // container advertise-dependent-filter6
    
                            container route-server {
                              description
                                "Configure the route server function on a device and specifies an EBGP peer as its client.";
                              leaf route-server-client {
                                when
                                  "../../../../../bgp:type='ebgp' and ../../../../../peer-establish-mode='static'";
                                type empty;
                                must
                                  "not(../route-server-client) or (not(/bgp:bgp/bgp:base-process/bgp:confederation/bgp:id) and (/bgp:bgp/bgp:base-process/bgp:confederation/bgp:nonstanded = 'false'))";
                                must
                                  "not(../route-server-client) or (../../label-route-capability = 'false')";
                                must
                                  "not(../route-server-client) or (../../prefix-sid = 'false')";
                                description
                                  "Enable/disable the route server function on a device and specifies an EBGP peer as its client.";
                              }
                            }  // container route-server
    
                            container hierarchy-convergence {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure the current peer group's hierarchy convergence capablity.";
                              leaf advertise-hierarchy-convergence {
                                type boolean;
                                default "true";
                                description
                                  "Enable/disable advertise the hierarchy convergence attribute to a peer group.";
                              }
                            }  // container hierarchy-convergence
    
                            container link-bandwidth {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure link bandwidth attribute.";
                              leaf advertise {
                                when
                                  "../../../../../bgp:type='ebgp'";
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable advertise the link bandwidth attribute to an EBGP peer.";
                              }
    
                              leaf transitive {
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable transitive the link bandwidth attribute.";
                              }
    
                              leaf generate {
                                when
                                  "../../../../../bgp:type='ebgp'";
                                type peer-attr-enable-type;
                                default
                                  "disable";
                                description
                                  "Enable/disable generate the link bandwidth attribute to an EBGP peer.";
                              }
                            }  // container link-bandwidth
                          }  // container ipv6-unicast
    
                          container ipv4-vpn {
                            when
                              "../type = 'ipv4vpn'";
                            description
                              "Configure IPv4 vpnv4 options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf ignore-bit-error {
                              when
                                "../export-policy or ../export-filter";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer to ignore bit error detection results.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../bgp:type='ibgp'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf reoriginate-route-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route regeneration.";
                            }
    
                            leaf reoriginate-ip-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable IP route regeneration and advertisement.";
                            }
    
                            leaf reoriginate-mac-ip-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable MAC-IP route regeneration and advertisement.";
                            }
    
                            leaf reoriginate-vpnv4-route-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable VPNv4 route regeneration and advertisement.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf upe {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer as an underlayer PE (UPE).";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf origin-as-validation {
                              when
                                "../../../../peer-establish-mode='static' and ../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf high-priority {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable vpn-router high priority.";
                            }
    
                            container default-route-originates {
                              description
                                "Configure advertised default VPNv4 routes.";
                              list default-route-originate {
                                key "vpn-name";
                                description
                                  "Configure advertised default VPNv4 route.";
                                leaf vpn-name {
                                  type leafref {
                                    path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                  }
                                  must
                                    "../vpn-name!='_public_'";
                                  description
                                    "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
                                }
                              }  // list default-route-originate
                            }  // container default-route-originates
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
                          }  // container ipv4-vpn
    
                          container ipv6-vpn {
                            when
                              "../type = 'ipv6vpn'";
                            description
                              "Configure IPv6 vpn options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf ignore-bit-error {
                              when
                                "../export-policy or ../export-filter";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer to ignore bit error detection results.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../bgp:type='ibgp'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf import-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf reoriginate-route-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route regeneration.";
                            }
    
                            leaf reoriginate-ipv6-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable IP route regeneration and advertisement.";
                            }
    
                            leaf reoriginate-mac-ipv6-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable MAC-IP route regeneration and advertisement.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL6 policy.";
                            }
    
                            leaf export-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL6 policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf origin-as-validation {
                              when
                                "../../../../peer-establish-mode='static'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf high-priority {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable vpn-router high priority.";
                            }
    
                            leaf prefix-sid {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a SID mode relay for group.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf advertise-srv6-locator {
                                  when
                                    "../prefix-sid='true'";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
                          }  // container ipv6-vpn
    
                          container ipv4-labeluni {
                            when
                              "../type = 'ipv4labeluni'";
                            must
                              "../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                            description
                              "Configure IPv4 label unicast options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf check-tunnel-reachable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable tunnel reachability check.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf exp-mode {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type exp-mode-type;
                              default "null";
                              description
                                "Specify the ASs in which a BGP label can inherit the QoS priority carried in the outer label of public tunnel in the Core AS and the ASs in which the priorities of BGP LSPs must be restored before the LSPs are advertised to a non-core AS.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf substitute-as-enable {
                              when
                                "../../../../bgp:type='ebgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                            }
    
                            leaf soo {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type string {
                                length "3..21";
                              }
                              description
                                "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../../../../../ni:name='_public_' and ../../../../bgp:type='ibgp'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf load-balancing-enable {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            leaf prefix-sid {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange IPv4 prefix SIDs with a specified IPv6 peer group.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf accept-prefix {
                                when "../number";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
    
                            container entropy-label-parameter {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure information about entropy label parameter in a peer group.";
                              leaf advertise-entropy-label {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the capability of advertising entropy labels.";
                              }
    
                              leaf padding {
                                when
                                  "../advertise-entropy-label='true'";
                                type string {
                                  length "1..32";
                                  pattern
                                    '(([0-9A-F])*)';
                                }
                                description
                                  "Padding format. The value is a hexadecimal string containing 1 to 32 characters (16 hexadecimal numbers). It cannot contain spaces, and can only contain uppercase letters (A to F) and digits (0 to 9), and the length must be an even number.";
                              }
    
                              leaf attribute-type {
                                when
                                  "../advertise-entropy-label='true'";
                                type entropy-label-attribute-type;
                                mandatory true;
                                description
                                  "The attribute-type of advertising entropy labels.";
                              }
    
                              leaf entropy-label {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of delivering the entropy label capability to the forwarding plane.";
                              }
                            }  // container entropy-label-parameter
                          }  // container ipv4-labeluni
    
                          container ipv4-multicast {
                            when
                              "../type='ipv4multi'";
                            description
                              "Configure IPv4 multicast options.";
                            leaf default-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                            }
    
                            choice default-route-advertise-policy-type {
                              description
                                "Set default route advertise-policy.";
                              case rtp-ref {
                                description
                                  "The default-route-advertise-policy.";
                                leaf default-route-advertise-policy {
                                  when
                                    "../default-route-advertise='true'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a used policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "The default-route-advertise-filter.";
                                container default-route-advertise-filter {
                                  when
                                    "../default-route-advertise='true'";
                                  description
                                    "Configure the route-filter for default route advertise.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // container default-route-advertise-filter
                              }  // case xpl-ref
                            }  // choice default-route-advertise-policy-type
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              must
                                "../nexthop-configure='local'";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf load-balancing-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
                          }  // container ipv4-multicast
    
                          container ipv4-mvpn {
                            when
                              "../bgp:type = 'mvpn'";
                            description
                              "Configure IPv4-family mvpn options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf advertise-c-multicast-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise C-multicast route directional, only advertise to the neighbor which is matched the nexthop in intra-AD route.";
                            }
    
                            leaf nexthop-configure {
                              type bgp:nexthop-configuration-type;
                              must
                                "../nexthop-configure='local'";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address. If the value of nexthop-configure is set to local, the configuration does not take effect in the current address family.";
                            }
    
                            leaf nexthop-effective {
                              when
                                "../nexthop-configure='local'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the next hop of group takes effect in the RR scenario.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from peers. By default, no route-filter is specified to filter the routes imported from peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to peers. By default, no route-filter is specified to filter the routes to be advertised to peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../bgp:type='ibgp'";
                              type bgp:add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
                          }  // container ipv4-mvpn
    
                          container ipv6-mvpn {
                            when
                              "../bgp:type='mvpnv6'";
                            description
                              "Configure IPv6-family mvpn options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf advertise-c-multicast-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise C-multicast route directional, only advertise to the neighbor which is matched the nexthop in intra-AD route.";
                            }
    
                            leaf nexthop-configure {
                              type bgp:nexthop-configuration-type;
                              must
                                "../nexthop-configure='local'";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address. If the value of nexthop-configure is set to local, the configuration does not take effect in the current address family.";
                            }
    
                            leaf nexthop-effective {
                              when
                                "../nexthop-configure='local'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the next hop of group takes effect in the RR scenario.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from peers. By default, no route-filter is specified to filter the routes imported from peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to peers. By default, no route-filter is specified to filter the routes to be advertised to peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../bgp:type='ibgp'";
                              type bgp:add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../bgp:type='ibgp'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
                          }  // container ipv6-mvpn
    
                          container l2vpnad {
                            when
                              "../bgp:type='l2vpnad'";
                            description
                              "Configure l2vpn-ad-family options.";
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              when
                                "../../../../bgp:type='ibgp'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf vpls-ad-disable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable virtual private LAN service auto-discovery.not receive BGP-AD route.";
                            }
    
                            leaf vpws-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable virtual private wire services.";
                            }
    
                            leaf vpls-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable virtual private LAN services.";
                            }
    
                            leaf nexthop-configure {
                              type bgp:nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNv6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf advertise-large-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from peers. By default, no route-filter is specified to filter the routes imported from peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to peers. By default, no route-filter is specified to filter the routes to be advertised to peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf update-group-independent {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'true'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
                            }  // container public-as-only-import
                          }  // container l2vpnad
                        }  // list af
                      }  // container afs
                    }  // list peer-group
                  }  // container peer-groups
    
                  container peers {
                    description
                      "List of BGP peers.";
                    list peer {
                      key "address";
                      description
                        "Configure a single BGP peer.";
                      leaf address {
                        type inet:ip-address-no-zone;
                        description
                          "Connection address of a peer, which can be an IPv4 or IPv6 address.";
                      }
    
                      leaf remote-as {
                        ext:operation-exclude "update" {
                          description "The node cannot be modified, when node is already configured.";
                        }
                        type as-number-validate;
                        mandatory true;
                        description
                          "AS number of a peer, which must be selected or group name when creating, and which can be in either two-byte format or four-byte format:
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.
    The object cannot be modified.";
                      }
    
                      leaf group-name {
                        ext:operation-exclude "update" {
                          description "The node cannot be modified, when the peer already belongs to a peer-group.";
                        }
                        type leafref {
                          path "../../../peer-groups/peer-group/name";
                        }
                        must
                          "../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                        description
                          "Specify the name of a peer group that BGP peers need to join. That must be selected group name or AS when creating, and the value is a string, spaces not supported. By default, BGP peers join no peer group. BGP peers distinguish the peer group type when joining a peer group. IBGP peers cannot join an EBGP peer group. BGP peers will be deleted when they leave a peer group. The object cannot be modified.";
                      }
    
                      leaf local-if-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points: 1. The address of the loopback interface of the BGP peer must be reachable. 2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                      }
    
                      leaf local-if-address {
                        type inet:ip-address-no-zone;
                        description
                          "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points:
    1. The address of the loopback interface of the BGP peer must be reachable.
    2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                      }
    
                      leaf password-type {
                        type bgp:password-type;
                        must
                          "not((../password-type and ../password-type!='null') and (../key-chain-name or ../tcp-ao-name))";
                        must
                          "(not(../password-type and ../password-type!='null') and not(../password-text)) or (../password-type and ../password-type!='null' and ../password-text)";
                        default "null";
                        description
                          "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. Plaintexts and ciphertexts are supported.";
                      }
    
                      leaf password-text {
                        when
                          "../password-type and ../password-type!='null'";
                        type pub-type:password-extend;
                        mandatory true;
                        description
                          "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. The character string in a password identifies the contents of the password, spaces not supported. The TCP connection can be established only when the same MD5 authentication password is set on both ends. If a plaintext is used, the maximum password length is 255. If a ciphertext is used, the maximum password length is 432. If the length is set to 0, no password is set.";
                      }
    
                      leaf key-chain-name {
                        ext:case-sensitivity "lower-only";
                        type string {
                          length "1..47";
                          pattern '[^A-Z]+';
                        }
                        must
                          "not(../password-type!='null' or ../tcp-ao-name)";
                        description
                          "Specify the Keychain authentication name used when BGP peers establish a TCP connection. The value is a string, spaces not supported. By default, the Keychain authentication is not configured. Keychain authentication mode and password authentication mode are mutually exclusive. Configuring Keychain authentication can enhance the security of the TCP connections between BGP peers. Keychain authentication using the same encryption algorithm and password must be configured on the two ends of BGP peers to establish a TCP connection and exchange BGP packets. Before configuring BGP Keychain authentication, you need to configure Keychain according to keychain name. Otherwise, the TCP connections between the BGP peers cannot be established.";
                      }
    
                      leaf tcp-ao-disable {
                        type empty;
                        description
                          "Disable the TCP-AO authentication for establishing the TCP connection between BGP peers.";
                      }
    
                      leaf tcp-ao-name {
                        when
                          "not(../tcp-ao-disable)";
                        type leafref {
                          path "/socket:socket/socket:tcp-aos/socket:tcp-ao/socket:name";
                        }
                        must
                          "not(../password-type!='null' or ../key-chain-name)";
                        description
                          "Specify TCP-AO authentication for establishing the TCP connection between BGP peers.";
                      }
    
                      leaf description {
                        type string {
                          length "1..255";
                          pattern '([^?]*)';
                        }
                        description
                          "Description of a peer, which can be letters or digits. The description is a string, spaces supported. By default, no description is configured for a peer.";
                      }
    
                      leaf ebgp-max-hop {
                        type uint32 {
                          range "1..255";
                        }
                        must
                          "not(../valid-ttl-hops) or (../valid-ttl-hops>=1 and ../valid-ttl-hops<=255 and ../ebgp-max-hop=1)";
                        description
                          "Maximum number of hops in an indirect EBGP connection. By default, EBGP connections can be established only between directly connected peers. The function must be configured on both ends. By default, value is determined by the neighbor type, the default value of EBGP is 1 and the default value of IBGP is 0.";
                      }
    
                      leaf tracking-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable peer tracking, After peer tracking is enabled, the device can fast detect the unreachability of a peer and reset the session.";
                      }
    
                      leaf tracking-delay-time {
                        when
                          "../tracking-enable='true'";
                        type uint16;
                        units "s";
                        default "0";
                        description
                          "Specify the delay to reset the session.";
                      }
    
                      leaf conventional {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable general router functions on peers. In conventional mode, not all the extended router functions, such as, route refreshing, GR, and multi-address family negotiation, are available. Therefore, the router of a new version can be compatible with the routers of earlier versions.";
                      }
    
                      leaf route-refresh {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to advertise Refresh messages to peers.";
                      }
    
                      leaf four-byte-as {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to advertise routes carrying 4-byte AS numbers to peers. After the 4-byte AS number function is disabled, Open packets will not carry 4-byte AS number capability flag, and peer ends will not know that local ends have the 4-byte AS number function. The 4-byte AS number function cannot be disabled from peers (peer groups) if a 4-byte AS number, fake AS number, or confederation ID is configured on a router and the AS number of a peer is 4-byte. If the 4-byte AS number function is disabled in such a situation, BGP sessions may fail to be established, and route transmission may be affected.";
                      }
    
                      leaf ignore {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function to tear down sessions between peers and clear all related routing information.";
                      }
    
                      leaf valid-ttl-hops {
                        type uint16 {
                          range "1..255";
                        }
                        must
                          "not(../ebgp-max-hop and ../ebgp-max-hop>1)";
                        description
                          "Enable GTSM on a peer or peer group. The valid-TTL-Value parameter is used to specify the number of TTL hops to be detected. If the value is configured as hops, the valid TTL range of the detected packet is [255-hops+1, 255].";
                      }
    
                      leaf connect-mode {
                        type connect-mode;
                        default "null";
                        description
                          "The value can be Connect-only, Listen-only, or Both. If the value is Connect-only, the specified peer or peer group only initiatively sends connection requests, instead of listening to connection requests. If the value is Listen-only, the specified peer or peer group only listens to connection requests, instead of initiatively sending connection requests. If the value is Both, the specified peer or peer group not only initiatively sends connection requests, but also listens to connection requests. The default value is Both.";
                      }
    
                      leaf log-change {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable BGP to record the session status and events of the specified peer or peer group.";
                      }
    
                      leaf path-mtu-auto-discovery {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable path mtu auto discovery.";
                      }
    
                      leaf local-ifnet-disable {
                        ext:dynamic-default;
                        type boolean;
                        description
                          "Enable/disable MPLS local IFNET tunnel creation on a BGP IPv4 peer. By default, MPLS local IFNET tunnels can be created on an EBGP peer,but such tunnels cannot be created on an IBGP peer.";
                      }
    
                      leaf check-first-as {
                        type peer-cap-config-state;
                        default "default";
                        description
                          "Check the first AS in the AS_Path of the update messages from EBGP peers.";
                      }
    
                      leaf egress-engineer {
                        when
                          "../../../../../ni:name='_public_'";
                        type epe-state;
                        default "default";
                        description
                          "BGP Egress Peer Engineering (BGP-EPE) is enable or disable. The default value is default (The function is disable, If the neighbour joins the group, the function is Inheritance group).";
                      }
    
                      leaf tcp-mss {
                        type uint16 {
                          range "176..4096";
                        }
                        description
                          "Maximum TCP MSS value used for TCP connection establishment for a peer.";
                      }
    
                      leaf memory-priority {
                        type peer-memory-priority;
                        default "default";
                        description
                          "Set a priority that determines the disconnection order of a BGP peer relationship if memory overload occurs.";
                      }
    
                      leaf memory-priority-capability {
                        type memory-priority;
                        config false;
                        description
                          "Priority that is used to determine the disconnection order of a BGP peer relationship if memory overload occurs.";
                      }
    
                      leaf oscillation-dampening {
                        type peer-attr-enable-type;
                        description
                          "Enable/disable BGP to suppress the establishment of a specified peer relationship that flaps continuously. By default, the capability is enabled.";
                      }
    
                      container effect-state {
                        config false;
                        description
                          "Operational state of a BGP peer. It uses the peer-specific configuration or inherits the configuration of its peer group.";
                        leaf oscillation-dampening {
                          type boolean;
                          description
                            "Whether the capability of suppressing the establishment of a specified peer relationship that flaps continuously is enabled on the BGP peer.";
                        }
                      }  // container effect-state
    
                      container fake-as-parameter {
                        description
                          "Configure BGP fake-as parameters.";
                        leaf fake-as {
                          type bgp:as-number-validate;
                          description
                            "Fake AS number that is specified for a local peer. By default, a peer uses the actual AS number of the local end.
    An AS number can be in either two-byte format or four-byte format:
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.";
                        }
    
                        leaf dual-as {
                          when "../fake-as";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to the remote EBGP peer can use the actual or fake AS number when specifying the AS number for a local peer. The local peer uses the fake and actual AS numbers to establish a BGP peer relationship with the remote end and identifies the AS number configured by the remote end through the error code (OPEN Message Error) and sub-error code (Bad Peer AS) of the Notification message from the remote end.";
                        }
    
                        leaf prepend-global-as {
                          when "../fake-as";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to add the global AS number to the update packets to be advertised.";
                        }
    
                        leaf prepend-fake-as {
                          when "../fake-as";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to add the fake AS number to received update packets.";
                        }
                      }  // container fake-as-parameter
    
                      container timer {
                        description
                          "Configure BGP peer timer parameters.";
                        leaf keep-alive-time {
                          type uint32 {
                            range "0..21845";
                          }
                          units "s";
                          must
                            "(../keep-alive-time != 0 and (../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)";
                          default "60";
                          description
                            "If the value of a timer changes, the BGP peer relationship between the routers is disconnected. This is because the peers need to re-negotiate the Keepalive time and hold time. Therefore, confirm the action before you change the value of the timer. The Keepalive time should be at least three times of the hold time.";
                        }
    
                        leaf hold-time {
                          type uint32 {
                            range "0 | 3..65535";
                          }
                          units "s";
                          must
                            "(((../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)) and ../hold-time>=../min-hold-time";
                          default "180";
                          description
                            "Hold time. When setting keepalive-time and hold-time, note the following:
    1. The values of keepalive-time and hold-time cannot both be 0. Otherwise, the BGP timer becomes invalid. That is, BGP does not detect link faults according to the timer.
    2. The value of hold-time is much greater than that of keepalive-time, such as, keepalive 1 and hold 65535. If the value of hold-time is too large, BGP cannot detect link faults timely.
    The priority of a timer is lower than that of a peer timer.
    After a connection is established between peers, the values of keepalive-time and hold-time are negotiated by the peers. The smaller value of hold-time contained in Open packets of both peers is taken as the value of hold-time. The smaller value of the locally set value of keepalive-time and one third of the value of hold-time is taken as the value of keepalive-time.";
                        }
    
                        leaf min-hold-time {
                          type uint32 {
                            range
                              "0 | 20..65535";
                          }
                          units "s";
                          must
                            "../hold-time>=../min-hold-time";
                          default "0";
                          description
                            "The default value of zero means that the minimum hold time check does not take effect. If the value is changed, the new value takes effect since the next peer relationship establishment. During the peer relationship establishment, the local device checks the hold time of the remote end. If the hold time is less than the minimum hold time, the local device sends an error packet with error code 02 and subcode 06, and the peer relationship fails to be established.";
                        }
    
                        leaf connect-retry-time {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          default "32";
                          description
                            "ConnectRetry interval.";
                        }
                      }  // container timer
    
                      container bfd-parameter {
                        description
                          "Configure BFD.";
                        leaf block {
                          type boolean;
                          must
                            "not(../block='true' and ../enable='true')";
                          default "false";
                          description
                            "Enable/disable preventing a BGP peer from inheriting the BFD configuration of the BGP peer group.";
                        }
    
                        leaf enable {
                          type boolean;
                          must
                            "not(../block='true' and ../enable='true')";
                          default "false";
                          description
                            "Enable/disable BFD.";
                        }
    
                        choice mode-type {
                          description
                            "Set bfd mode.";
                          case single {
                            description
                              "Single hop mode.";
                            leaf single-hop {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "The single hop mode is preferred during the BFD session establishment between IBGP peers.";
                            }
    
                            leaf compatible {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "Compatible.";
                            }
                          }  // case single
    
                          case link {
                            description
                              "The per-link-echo mode.";
                            leaf per-link-echo {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "The per-link one-arm-echo mode is preferred during the BFD session establishment between IBGP peers.";
                            }
                          }  // case link
    
                          case one-arm-echo {
                            description
                              "One-arm-echo mode.";
                            leaf one-arm-echo {
                              when
                                "../enable='true'";
                              type empty;
                              description
                                "The one arm echo mode is preferred during the BFD session establishment between BGP peers.";
                            }
                          }  // case one-arm-echo
                        }  // choice mode-type
    
                        leaf multiplier {
                          type uint32 {
                            range "3..50";
                          }
                          default "3";
                          description
                            "Specify the detection multiplier.";
                        }
    
                        leaf min-rx-interval {
                          type uint32 {
                            range "3..20000";
                          }
                          units "ms";
                          description
                            "Specify the minimum interval at which BFD packets are received. The value range and default value are controlled by the PAF.";
                        }
    
                        leaf min-tx-interval {
                          type uint32 {
                            range "3..20000";
                          }
                          units "ms";
                          description
                            "Specify the minimum interval at which BFD packets are sent. The value range and default value are controlled by the PAF.";
                        }
    
                        leaf valid-ttl-hops-operation {
                          type enumeration {
                            enum "enable" {
                              value 1;
                              description
                                "Enable:";
                            }
                            enum "disable" {
                              value 2;
                              description
                                "Disable:";
                            }
                          }
                          description
                            "Control specify the valid TTL hops value operation.";
                        }
    
                        leaf valid-ttl-hops {
                          when
                            "../valid-ttl-hops-operation='enable'";
                          type uint8 {
                            range "1..255";
                          }
                          mandatory true;
                          description
                            "Specify the valid TTL hops value.";
                        }
                      }  // container bfd-parameter
    
                      container bfd-parameter-state {
                        config false;
                        description
                          "Statistics of BFD Parameter State.";
                        leaf valid-ttl-hops {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "The valid TTL hops value.";
                        }
                      }  // container bfd-parameter-state
    
                      container egress-engineer-parameter {
                        when
                          "../egress-engineer='enable'";
                        description
                          "Configure BGP peer egress engineering information.";
                        leaf static-label {
                          type uint32 {
                            range "16..1048575";
                          }
                          description
                            "The static label for BGP EPE. The value range and default value are controlled by the PAF.";
                        }
    
                        leaf label-pop {
                          when "../static-label";
                          type boolean;
                          must
                            "not(../relate-bfd='true' and ../label-pop='true')";
                          default "false";
                          description
                            "Enable/disable the BGP-EPE label popping function.";
                        }
    
                        leaf relate-bfd {
                          type boolean;
                          must
                            "not(../relate-bfd='true' and ../label-pop='true')";
                          default "false";
                          description
                            "Enable/disable association between the BGP-EPE label and BFD status.";
                        }
    
                        leaf peer-set-name {
                          type leafref {
                            path "../../../../bgp:egress-engineer-peer-sets/bgp:egress-engineer-peer-set/bgp:peer-set-name";
                          }
                          description
                            "Add peer to peer set.";
                        }
                      }  // container egress-engineer-parameter
    
                      container graceful-restart {
                        description
                          "Configure graceful restart.";
                        leaf enable {
                          type peer-comm-config-type;
                          default "default";
                          description
                            "Enable/disable graceful restart capability.";
                        }
    
                        leaf time-wait-for-rib {
                          type uint32 {
                            range "3..3000";
                          }
                          units "s";
                          description
                            "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                        }
    
                        leaf restart-time {
                          type uint16 {
                            range "3..3600";
                          }
                          units "s";
                          description
                            "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                        }
    
                        leaf effect-restart-time {
                          type uint16 {
                            range "3..3600";
                          }
                          units "s";
                          config false;
                          description
                            "The maximum time during which a peer waits for a BGP session reestablishment.";
                        }
    
                        leaf effect-time-wait-for-rib {
                          type uint32 {
                            range "3..3000";
                          }
                          units "s";
                          config false;
                          description
                            "Period of waiting for the End-of-RIB flag.";
                        }
    
                        leaf effect-enable {
                          type boolean;
                          config false;
                          description
                            "Whether enable/disable graceful restart capability.";
                        }
    
                        leaf peer-reset {
                          type peer-comm-config-type;
                          default "default";
                          description
                            "Enable/disable reseting BGP peer graceful.";
                        }
    
                        leaf effect-peer-reset {
                          type boolean;
                          config false;
                          description
                            "Whether enable/disable reseting BGP peer graceful.";
                        }
                      }  // container graceful-restart
    
                      container local-graceful-restart {
                        description
                          "Configure local graceful restart.";
                        leaf enable {
                          type peer-comm-config-type;
                          default "default";
                          description
                            "Enable/disable graceful restart capability.";
                        }
    
                        leaf time-wait-for-rib {
                          type uint32 {
                            range "3..3000";
                          }
                          units "s";
                          description
                            "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                        }
    
                        leaf restart-time {
                          type uint16 {
                            range "3..3600";
                          }
                          units "s";
                          description
                            "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                        }
    
                        leaf effect-restart-time {
                          type uint16 {
                            range "3..3600";
                          }
                          units "s";
                          config false;
                          description
                            "The maximum time during which a peer waits for a BGP session reestablishment.";
                        }
    
                        leaf effect-time-wait-for-rib {
                          type uint32 {
                            range "3..3000";
                          }
                          units "s";
                          config false;
                          description
                            "Period of waiting for the End-of-RIB flag.";
                        }
    
                        leaf effect-enable {
                          type boolean;
                          config false;
                          description
                            "Whether enable/disable graceful restart capability.";
                        }
                      }  // container local-graceful-restart
    
                      container ssl-policy {
                        when
                          "../../../../../ni:name='_public_'";
                        description
                          "Configure SSL policy for BGP peer.";
                        leaf enable {
                          type peer-attr-enable-type;
                          description
                            "Enable/disable SSL policy.";
                        }
    
                        leaf name {
                          when
                            "../enable = 'enable'";
                          type leafref {
                            path "/ssl:ssl/ssl:ssl-policys/ssl:ssl-policy/ssl:policy-name";
                          }
                          mandatory true;
                          description
                            "SSL policy name.";
                        }
    
                        leaf role {
                          ext:operation-exclude "update" {
                            description "The node cannot be modified. You need to disable or delete the node first.";
                          }
                          type peer-ssl-role-type;
                          must
                            "(.='client' and ../../connect-mode != 'listen-only') or (.='server' and ../../connect-mode != 'connect-only') or (.= 'disable')";
                          description
                            "Configure a peer as an SSL client or server.";
                        }
    
                        leaf server-certificate {
                          type peer-attr-enable-type;
                          must
                            "(../role = 'server') or (../role = 'disable') or (../role = 'client' and ../server-certificate != 'enable') or (not(../role) and not(../../bgp:group-name)) or (not(../role) and ../../bgp:group-name and  (../../../../bgp:peer-groups/bgp:peer-group[bgp:name=current()/../../bgp:group-name]/bgp:ssl-policy/bgp:role = 'server' or not(../../../../bgp:peer-groups/bgp:peer-group[bgp:name=current()/../../bgp:group-name]/bgp:ssl-policy/bgp:role))) or (not(../role) and ../../bgp:group-name and  ../../../../bgp:peer-groups/bgp:peer-group[bgp:name=current()/../../bgp:group-name]/bgp:ssl-policy/bgp:role = 'client' and ../server-certificate != 'enable')";
                          description
                            "Enable/disable SSL/TLS authentication on an SSL server.";
                        }
                      }  // container ssl-policy
    
                      container afs {
                        description
                          "List of peers in a specified address family.";
                        list af {
                          key "type";
                          description
                            "Configure peer in a specified address family.";
                          leaf type {
                            type bgp:af-type;
                            must
                              "../../../../../afs/af[type = current()]";
                            description
                              "Specify the address family type to set the peer enable.";
                          }
    
                          container ipv4-unicast {
                            when
                              "../type='ipv4uni'";
                            must
                              "../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                            description
                              "Configure IPv4 unicast options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../peer-groups/peer-group/name";
                              }
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv4uni']";
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf orf-type {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:bgp-orf-type;
                              must
                                "(../orf-mode='null' and ../orf-type='null') or (../orf-mode!='null' and ../orf-type!='null')";
                              default "null";
                              description
                                "ORF Type.";
                            }
    
                            leaf orf-mode {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:bgp-orf-mode-type;
                              must
                                "(../orf-mode='null' and ../orf-type='null') or (../orf-mode!='null' and ../orf-type!='null')";
                              default "null";
                              description
                                "Configure an outbound route filtering (ORF) mode, which can be Receive, Send, or Both, and the default ORF mode is Both.";
                            }
    
                            leaf label-route-capability {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange labeled routes.";
                            }
    
                            leaf check-tunnel-reachable {
                              when
                                "../label-route-capability='true'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable tunnel reachability check.";
                            }
    
                            leaf check-withdraw-type {
                              when
                                "../label-route-capability='true'";
                              type boolean;
                              default "true";
                              status obsolete;
                              description
                                "Enable/disable withdraw type check.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf static-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable' and contains(../../../../address,'.')";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported static route when advertising them to its peers.";
                            }
    
                            leaf unicast-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable' and contains(../../../../address,'.')";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported unicast route when advertising them to its peers.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf origin-as-validation {
                              when
                                "../advertise-ext-community='true'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf default-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                            }
    
                            choice default-route-advertise-policy-type {
                              description
                                "Set default route advertise-policy.";
                              case rtp-ref {
                                description
                                  "The default-route-advertise-policy.";
                                leaf default-route-advertise-policy {
                                  when
                                    "../default-route-advertise='true'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a used policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "The default-route-advertise-filter.";
                                container default-route-advertise-filter {
                                  when
                                    "../default-route-advertise='true'";
                                  description
                                    "Configure the route-filter for default route advertise.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // container default-route-advertise-filter
                              }  // case xpl-ref
                            }  // choice default-route-advertise-policy-type
    
                            leaf default-route-match-mode {
                              when
                                "../default-route-advertise='true'";
                              type cra-match-mode;
                              default "null";
                              description
                                "Configure the matching mode of default route advertisement, which can be disabling of route advertisement conditions, enabling of all route advertisement conditions, and enabling of part route advertisement conditions. Enabling of all route advertisement conditions indicates that a default route can be advertised only when it matches all the conditions. Enabling of part route advertisement conditions indicates that a default route can be advertised only when it matches one condition.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable add-path route advertisement to a peer.";
                            }
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of add-path routes that can be advertised to a peer.";
                            }
    
                            leaf substitute-as-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                            }
    
                            leaf soo {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type string {
                                length "3..21";
                              }
                              description
                                "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf exp-mode {
                              type exp-mode-type;
                              default "null";
                              description
                                "Specify the ASs in which a BGP label can inherit the QoS priority carried in the outer label of public tunnel in the Core AS and the ASs in which the priorities of BGP LSPs must be restored before the LSPs are advertised to a non-core AS.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf prefix-sid {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable a device to exchange IPv4 prefix SIDs with a specified IPv6 peer.";
                            }
    
                            leaf prefix-sid-state {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether the prefix-sid to a peer is enabled.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf advertise-srv6-locator {
                                  when
                                    "../prefix-sid='enable'";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            container effect-state {
                              config false;
                              description
                                "Operational state of peer.";
                              leaf advertise-srv6-locator {
                                type boolean;
                                description
                                  "Whether to advertise SRv6 locators on the BGP peer.";
                              }
                            }  // container effect-state
    
                            leaf load-balancing-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            leaf rpd-policy-export {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:peer-enable-config-type;
                              default "default";
                              description
                                "Enable/disable RPD export policy.";
                            }
    
                            container option {
                              description
                                "Configure IPv4 unicast peer common options.";
                              leaf export-origin-as-validation {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable the function ebgp peer advertising dependent roa validation, route is advtised roa reslut is valid.";
                              }
    
                              leaf include-not-found {
                                when
                                  "../export-origin-as-validation='enable'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the include-not-found attribute of the ROA validation.";
                              }
    
                              leaf external {
                                when
                                  "../include-not-found='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable ROA export validation to advertise only external not found routes.";
                              }
                            }  // container option
    
                            container default-route-match-conditions {
                              when
                                "../default-route-match-mode and ../default-route-match-mode!='null'";
                              description
                                "List of condition matching to filter the default routes to be advertised. The value takes effect only when the default route matching mode is not null and more than one IPv4 default route matching condition lists are configured.";
                              list default-route-match-condition {
                                key "address mask";
                                min-elements 1;
                                max-elements 4;
                                description
                                  "Configure the matching condition for default route advertisement.";
                                leaf address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Configure a prefix that is used to match default routes.";
                                }
    
                                leaf mask {
                                  type uint32 {
                                    range
                                      "0..32";
                                  }
                                  description
                                    "Configure a mask that is used to match default routes.";
                                }
                              }  // list default-route-match-condition
                            }  // container default-route-match-conditions
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf accept-prefix {
                                when "../number";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container entropy-label-parameter {
                              when
                                "../../../../../../../../ni:name='_public_' and ../label-route-capability='true'";
                              description
                                "Configure information about entropy label parameter configuration in a peer.";
                              leaf advertise-entropy-label {
                                type peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable the capability of advertising entropy labels.";
                              }
    
                              leaf padding {
                                when
                                  "../advertise-entropy-label='enable'";
                                type string {
                                  length "1..32";
                                  pattern
                                    '(([0-9A-F])*)';
                                }
                                description
                                  "Padding format. The value is a hexadecimal string containing 1 to 32 characters (16 hexadecimal numbers). It cannot contain spaces, and can only contain uppercase letters (A to F) and digits (0 to 9), and the length must be an even number.";
                              }
    
                              leaf attribute-type {
                                when
                                  "../advertise-entropy-label='enable'";
                                type entropy-label-attribute-type;
                                mandatory true;
                                description
                                  "The attribute-type of advertising entropy labels.";
                              }
    
                              leaf entropy-label {
                                type peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable the function of delivering the entropy label capability to the forwarding plane.";
                              }
    
                              leaf effect-advertise-entropy-label {
                                type boolean;
                                default "false";
                                config false;
                                description
                                  "Whether the capability of advertising entropy labels is enabled on the BGP peer.";
                              }
    
                              leaf effect-padding {
                                when
                                  "../effect-advertise-entropy-label='true'";
                                type string {
                                  length "1..32";
                                  pattern
                                    '(([0-9A-F])*)';
                                }
                                config false;
                                description
                                  "Padding format.";
                              }
    
                              leaf effect-attribute-type {
                                when
                                  "../effect-advertise-entropy-label='true'";
                                type entropy-label-attribute-type;
                                config false;
                                description
                                  "The attribute-type of advertising entropy labels.";
                              }
    
                              leaf effect-entropy-label {
                                type boolean;
                                default "false";
                                config false;
                                description
                                  "Whether the function of delivering the entropy label capability to the forwarding plane is enabled on the BGP peer.";
                              }
                            }  // container entropy-label-parameter
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
    
                            container advertise-dependent-filter {
                              presence
                                "Enable peer advertising dependent filter.";
                              description
                                "Configure peer advertising dependent filter.";
                              leaf dependent-filter-switch {
                                type bgp:peer-attr-enable-type;
                                mandatory true;
                                description
                                  "Specify a switch type.";
                              }
    
                              leaf dependent-filter {
                                when
                                  "../dependent-filter-switch='enable'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-lists/rtp:ipv4-prefix-list/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Specify a dependent route-filter name.";
                              }
    
                              leaf dependent-filter-type {
                                when
                                  "../dependent-filter-switch='enable'";
                                type bgp:dependent-prefix-filter-type;
                                mandatory true;
                                description
                                  "Specify a dependent route-filter mode.";
                              }
    
                              leaf condition-filter {
                                when
                                  "../dependent-filter-switch='enable'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-lists/rtp:ipv4-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a condition route-filter name.";
                              }
                            }  // container advertise-dependent-filter
    
                            container advertise-dependent-filter-state {
                              config false;
                              description
                                "Peer advertising dependent filter state.";
                              leaf dependent-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-lists/rtp:ipv4-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a dependent route-filter name.";
                              }
    
                              leaf dependent-filter-type {
                                type bgp:dependent-prefix-filter-type;
                                description
                                  "Specify a dependent route-filter mode.";
                              }
    
                              leaf condition-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-lists/rtp:ipv4-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a condition route-filter name.";
                              }
                            }  // container advertise-dependent-filter-state
    
                            container route-server {
                              description
                                "Configure the route server function on a device and specifies an EBGP peer as its client.";
                              leaf route-server-client {
                                type peer-attr-enable-type;
                                must
                                  "(. = 'disable') or (not(/bgp:bgp/bgp:base-process/bgp:confederation/bgp:id) and (/bgp:bgp/bgp:base-process/bgp:confederation/bgp:nonstanded = 'false'))";
                                must
                                  "(. = 'disable') or (../../label-route-capability = 'false')";
                                description
                                  "Enable/disable the route server function on a device and specifies an EBGP peer as its client.";
                              }
                            }  // container route-server
    
                            container hierarchy-convergence {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure the current peer's hierarchy convergence capablity.";
                              leaf advertise-hierarchy-convergence {
                                type peer-attr-enable-type;
                                description
                                  "Hierarchy convergence configuration.";
                              }
    
                              leaf effect-advertise-hierarchy-convergence {
                                type boolean;
                                config false;
                                description
                                  "Hierarchy convergence state.";
                              }
                            }  // container hierarchy-convergence
    
                            container link-bandwidth {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure peer link bandwidth attribute.";
                              leaf advertise {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable advertise the link bandwidth attribute to an EBGP peer.";
                              }
    
                              leaf transitive {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable transitive the link bandwidth attribute.";
                              }
    
                              leaf generate {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable generate the link bandwidth attribute to an EBGP peer.";
                              }
                            }  // container link-bandwidth
                          }  // container ipv4-unicast
    
                          container ipv6-unicast {
                            when
                              "../type = 'ipv6uni'";
                            must
                              "../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                            description
                              "Configure IPv6 unicast options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../peer-groups/peer-group/name";
                              }
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv6uni']";
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf label-route-capability {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to exchange labeled routes.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              must
                                "(not(contains(../../../../address,':')) and ../nexthop-configure='local') or contains(../../../../address,':')";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf static-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported static route when advertising them to its peers.";
                            }
    
                            leaf unicast-route-nexthop-invariable {
                              when
                                "../../../../../../../../ni:name='_public_' and ../nexthop-configure='invariable'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP speaker does not change the next hop of an imported unicast route when advertising them to its peers.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf origin-as-validation {
                              when
                                "../advertise-ext-community='true'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf default-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                            }
    
                            choice default-route-advertise-policy-type {
                              description
                                "Set default route advertise-policy.";
                              case rtp-ref {
                                description
                                  "The default-route-advertise-policy.";
                                leaf default-route-advertise-policy {
                                  when
                                    "../default-route-advertise='true'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a used policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "The default-route-advertise-filter.";
                                container default-route-advertise-filter {
                                  when
                                    "../default-route-advertise='true'";
                                  description
                                    "Configure the route-filter for default route advertise.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // container default-route-advertise-filter
                              }  // case xpl-ref
                            }  // choice default-route-advertise-policy-type
    
                            leaf default-route-match-mode {
                              when
                                "../default-route-advertise='true'";
                              type cra-match-mode;
                              default "null";
                              description
                                "Configure the matching mode of default route advertisement, which can be disabling of route advertisement conditions, enabling of all route advertisement conditions, and enabling of part route advertisement conditions. Enabling of all route advertisement conditions indicates that a default route can be advertised only when it matches all the conditions. Enabling of part route advertisement conditions indicates that a default route can be advertised only when it matches one condition.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf import-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL6 policy.";
                            }
    
                            leaf export-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL6 policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf substitute-as-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                            }
    
                            leaf soo {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type string {
                                length "3..21";
                              }
                              description
                                "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf load-balancing-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf tunnel-policy {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type leafref {
                                path "/tnlm:tunnel-management/tnlm:tunnel-policys/tnlm:tunnel-policy/tnlm:name";
                              }
                              description
                                "Apply a tunnel policy for a 6PE peer. By default, no tunnel policy is configured.";
                            }
    
                            leaf prefix-sid {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:peer-comm-config-type;
                              must
                                "(contains(../../../../address,'.') and ../prefix-sid='default') or contains(../../../../address,':')";
                              default "default";
                              description
                                "Enable/disable a device to exchange prefix SIDs with a specified IPv6 peer.";
                            }
    
                            leaf prefix-sid-state {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether the prefix-sid to a peer is enabled.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf advertise-srv6-locator {
                                  when
                                    "../prefix-sid='enable'";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            container effect-state {
                              config false;
                              description
                                "Operational state of peer.";
                              leaf advertise-srv6-locator {
                                type boolean;
                                description
                                  "Whether to advertise SRv6 locators on the BGP peer.";
                              }
                            }  // container effect-state
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            container option {
                              description
                                "Configure IPv6 unicast peer common options.";
                              leaf export-origin-as-validation {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable the function ebgp peer advertising dependent roa validation, route is advtised roa reslut is valid.";
                              }
    
                              leaf include-not-found {
                                when
                                  "../export-origin-as-validation='enable'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the include-not-found attribute of the ROA validation.";
                              }
    
                              leaf external {
                                when
                                  "../include-not-found='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable ROA export validation to advertise only external not found routes.";
                              }
                            }  // container option
    
                            container default-route-match-conditions {
                              when
                                "../default-route-match-mode and ../default-route-match-mode!='null'";
                              description
                                "List of condition matching to filter the default routes to be advertised. The value takes effect only when the default route matching mode is not null and more than one IPv6 default route matching condition lists are configured.";
                              list default-route-match-condition {
                                key "address mask";
                                min-elements 1;
                                max-elements 4;
                                description
                                  "Configure the matching condition for default route advertisement.";
                                leaf address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Configure a IPv6-prefix that is used to match default routes.";
                                }
    
                                leaf mask {
                                  type uint32 {
                                    range
                                      "0..128";
                                  }
                                  description
                                    "Configure a mask that is used to match default routes.";
                                }
                              }  // list default-route-match-condition
                            }  // container default-route-match-conditions
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf accept-prefix {
                                when "../number";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
    
                            container advertise-dependent-filter6 {
                              presence
                                "Enable peer advertising dependent filter.";
                              description
                                "Configure peer advertising dependent filter.";
                              leaf dependent-filter-switch {
                                type bgp:peer-attr-enable-type;
                                mandatory true;
                                description
                                  "Specify a switch type.";
                              }
    
                              leaf dependent-filter6 {
                                when
                                  "../dependent-filter-switch='enable'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-lists/rtp:ipv6-prefix-list/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Specify a dependent route-filter name.";
                              }
    
                              leaf dependent-filter-type {
                                when
                                  "../dependent-filter-switch='enable'";
                                type bgp:dependent-prefix-filter-type;
                                mandatory true;
                                description
                                  "Specify a dependent route-filter mode.";
                              }
    
                              leaf condition-filter6 {
                                when
                                  "../dependent-filter-switch='enable'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-lists/rtp:ipv6-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a condition route-filter name.";
                              }
                            }  // container advertise-dependent-filter6
    
                            container advertise-dependent-filter6-state {
                              config false;
                              description
                                "Peer advertising dependent filter state.";
                              leaf dependent-filter6 {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-lists/rtp:ipv6-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a dependent route-filter name.";
                              }
    
                              leaf dependent-filter-type {
                                type bgp:dependent-prefix-filter-type;
                                description
                                  "Specify a dependent route-filter mode.";
                              }
    
                              leaf condition-filter6 {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-lists/rtp:ipv6-prefix-list/rtp:name";
                                }
                                description
                                  "Specify a condition route-filter name.";
                              }
                            }  // container advertise-dependent-filter6-state
    
                            container route-server {
                              description
                                "Configure the route server function on a device and specifies an EBGP peer as its client.";
                              leaf route-server-client {
                                type peer-attr-enable-type;
                                must
                                  "(. = 'disable') or (not(/bgp:bgp/bgp:base-process/bgp:confederation/bgp:id) and (/bgp:bgp/bgp:base-process/bgp:confederation/bgp:nonstanded = 'false'))";
                                must
                                  "(. = 'disable') or (../../label-route-capability = 'false')";
                                must
                                  "(. = 'disable') or (../../prefix-sid = 'disable')";
                                description
                                  "Enable/disable the route server function on a device and specifies an EBGP peer as its client.";
                              }
                            }  // container route-server
    
                            container hierarchy-convergence {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure the current peer's hierarchy convergence capablity.";
                              leaf advertise-hierarchy-convergence {
                                type peer-attr-enable-type;
                                description
                                  "Hierarchy convergence configuration.";
                              }
    
                              leaf effect-advertise-hierarchy-convergence {
                                type boolean;
                                config false;
                                description
                                  "Hierarchy convergence state.";
                              }
                            }  // container hierarchy-convergence
    
                            container link-bandwidth {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure peer link bandwidth attribute.";
                              leaf advertise {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable advertise the link bandwidth attribute to an EBGP peer.";
                              }
    
                              leaf transitive {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable transitive the link bandwidth attribute.";
                              }
    
                              leaf generate {
                                type peer-attr-enable-type;
                                description
                                  "Enable/disable generate the link bandwidth attribute to an EBGP peer.";
                              }
                            }  // container link-bandwidth
                          }  // container ipv6-unicast
    
                          container ipv4-vpn {
                            when
                              "../type = 'ipv4vpn'";
                            description
                              "Configure IPv4 VPNv4 options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../peer-groups/peer-group/name";
                              }
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv4vpn']";
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf ignore-bit-error {
                              when
                                "../export-policy or ../export-filter";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer to ignore bit error detection results.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf add-path-number {
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf reoriginate-route-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route regeneration.";
                            }
    
                            leaf reoriginate-ip-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable IP route regeneration and advertisement.";
                            }
    
                            leaf reoriginate-mac-ip-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable MAC-IP route regeneration and advertisement.";
                            }
    
                            leaf reoriginate-vpnv4-route-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable VPNv4 route regeneration and advertisement.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf upe {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer as an underlayer PE (UPE).";
                            }
    
                            leaf high-priority {
                              type peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable vpn-router high priority.";
                            }
    
                            leaf prefix-sid {
                              type bgp:peer-enable-config-type;
                              must
                                "(contains(../../../../address,'.') and ../prefix-sid='default') or contains(../../../../address,':')";
                              default "default";
                              description
                                "Specify a SID mode relay for peer.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf sid-type5 {
                                  when
                                    "../prefix-sid='enable'";
                                  type empty;
                                  description
                                    "Packet by type5.";
                                }
    
                                leaf advertise-srv6-locator {
                                  when
                                    "../sid-type5";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            leaf advertise-best-external {
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            leaf origin-as-validation {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            container default-route-originates {
                              description
                                "Configure advertised default VPNv4 routes.";
                              list default-route-originate {
                                key "vpn-name";
                                description
                                  "Configure advertised default VPNv4 route.";
                                leaf vpn-name {
                                  type leafref {
                                    path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                  }
                                  must
                                    "../vpn-name!='_public_'";
                                  description
                                    "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
                                }
                              }  // list default-route-originate
                            }  // container default-route-originates
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container ipv4-vpn
    
                          container ipv6-vpn {
                            when
                              "../type = 'ipv6vpn'";
                            description
                              "Configure IPv6 vpn options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../peer-groups/peer-group/name";
                              }
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv6vpn']";
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf ignore-bit-error {
                              when
                                "../export-policy or ../export-filter";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the peer to ignore bit error detection results.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf add-path-number {
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf import-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv6 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf reoriginate-route-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route regeneration.";
                            }
    
                            leaf reoriginate-ipv6-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable IP route regeneration and advertisement.";
                            }
    
                            leaf reoriginate-mac-ipv6-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable MAC-IP route regeneration and advertisement.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL6 policy.";
                            }
    
                            leaf export-acl6-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL6 policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf advertise-best-external {
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            leaf origin-as-validation {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the BGP peer origin validation.";
                            }
    
                            leaf high-priority {
                              type peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable vpn-router high priority.";
                            }
    
                            leaf prefix-sid {
                              type bgp:peer-comm-config-type;
                              must
                                "(contains(../../../../address,'.') and ../prefix-sid='default') or contains(../../../../address,':')";
                              default "default";
                              description
                                "Specify a SID mode relay for peer.";
                            }
    
                            leaf prefix-sid-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether the prefix-sid to a peer is enabled.";
                            }
    
                            choice prefix-sid-packet {
                              description
                                "Prefix-sid packet method.";
                              case sid-type5 {
                                description
                                  "Packet by type5.";
                                leaf advertise-srv6-locator {
                                  when
                                    "../prefix-sid='enable'";
                                  type empty;
                                  description
                                    "Advertise SRv6 locators.";
                                }
                              }  // case sid-type5
                            }  // choice prefix-sid-packet
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container ipv6-vpn
    
                          container ipv4-labeluni {
                            when
                              "../type = 'ipv4labeluni'";
                            must
                              "../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                            description
                              "Configure IPv4 label unicast options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../peer-groups/peer-group/name";
                              }
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv4labeluni']";
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf check-tunnel-reachable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable tunnel reachability check.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf aigp {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                            }
    
                            leaf add-path-mode {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type add-path-cap-type;
                              default "null";
                              description
                                "Enable add-path route advertisement to a peer.";
                            }
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf exp-mode {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type exp-mode-type;
                              default "null";
                              description
                                "Specify the ASs in which a BGP label can inherit the QoS priority carried in the outer label of public tunnel in the Core AS and the ASs in which the priorities of BGP LSPs must be restored before the LSPs are advertised to a non-core AS.";
                            }
    
                            leaf add-path-number {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            leaf substitute-as-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                            }
    
                            leaf soo {
                              when
                                "../../../../../../../../ni:name!='_public_'";
                              type string {
                                length "3..21";
                              }
                              description
                                "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                            }
    
                            leaf advertise-best-external {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              must
                                "../reflect-client='false' or ../advertise-best-external='false'";
                              must
                                "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                              must
                                "not(../add-path-number and ../advertise-best-external='true')";
                              default "false";
                              description
                                "Enable/disable the device to advertise Best External routes to peers.";
                            }
    
                            leaf prefix-sid {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable a device to exchange IPv4 prefix SIDs with a specified IPv6 peer.";
                            }
    
                            leaf prefix-sid-state {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              config false;
                              description
                                "Whether the prefix-sid to a peer is enabled.";
                            }
    
                            leaf load-balancing-enable {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf accept-prefix {
                                when "../number";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container entropy-label-parameter {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "Configure information about entropy label parameter configuration in a peer.";
                              leaf advertise-entropy-label {
                                type peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable the capability of advertising entropy labels.";
                              }
    
                              leaf padding {
                                when
                                  "../advertise-entropy-label='enable'";
                                type string {
                                  length "1..32";
                                  pattern
                                    '(([0-9A-F])*)';
                                }
                                description
                                  "Padding format. The value is a hexadecimal string containing 1 to 32 characters (16 hexadecimal numbers). It cannot contain spaces, and can only contain uppercase letters (A to F) and digits (0 to 9), and the length must be an even number.";
                              }
    
                              leaf attribute-type {
                                when
                                  "../advertise-entropy-label='enable'";
                                type entropy-label-attribute-type;
                                mandatory true;
                                description
                                  "The attribute-type of advertising entropy labels.";
                              }
    
                              leaf entropy-label {
                                type peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable the function of delivering the entropy label capability to the forwarding plane.";
                              }
    
                              leaf effect-advertise-entropy-label {
                                type boolean;
                                default "false";
                                config false;
                                description
                                  "Whether the capability of advertising entropy labels is enabled on the BGP peer.";
                              }
    
                              leaf effect-padding {
                                when
                                  "../effect-advertise-entropy-label='true'";
                                type string {
                                  length "1..32";
                                  pattern
                                    '(([0-9A-F])*)';
                                }
                                config false;
                                description
                                  "Padding format.";
                              }
    
                              leaf effect-attribute-type {
                                when
                                  "../effect-advertise-entropy-label='true'";
                                type entropy-label-attribute-type;
                                config false;
                                description
                                  "The attribute-type of advertising entropy labels.";
                              }
    
                              leaf effect-entropy-label {
                                type boolean;
                                default "false";
                                config false;
                                description
                                  "Whether the function of delivering the entropy label capability to the forwarding plane is enabled on the BGP peer.";
                              }
                            }  // container entropy-label-parameter
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container ipv4-labeluni
    
                          container ipv4-multicast {
                            when
                              "../type='ipv4multi'";
                            description
                              "Configure IPv4 multicast options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../peer-groups/peer-group/name";
                              }
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv4multi']";
                              must
                                "../../../../../../peer-groups/peer-group[name = current()]/peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf default-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                            }
    
                            choice default-route-advertise-policy-type {
                              description
                                "Set default route advertise-policy.";
                              case rtp-ref {
                                description
                                  "The default-route-advertise-policy.";
                                leaf default-route-advertise-policy {
                                  when
                                    "../default-route-advertise='true'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the name of a used policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "The default-route-advertise-filter.";
                                container default-route-advertise-filter {
                                  when
                                    "../default-route-advertise='true'";
                                  description
                                    "Configure the route-filter for default route advertise.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // container default-route-advertise-filter
                              }  // case xpl-ref
                            }  // choice default-route-advertise-policy-type
    
                            leaf import-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf export-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf import-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the import ACL policy.";
                            }
    
                            leaf export-acl-name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              description
                                "Specifies the name of the export ACL policy.";
                            }
    
                            leaf advertise-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the extended community attribute to a peer or peer group.";
                            }
    
                            leaf discard-ext-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf nexthop-configure {
                              type nexthop-configuration-type;
                              must
                                "../nexthop-configure='local'";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf keep-all-routes {
                              when
                                "/bgp:bgp/bgp:base-process/bgp:keep-all-routes='false'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf load-balancing-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable a neighbour to participate in load balancing.";
                            }
    
                            choice load-balancing-ignore-as-type {
                              description
                                "Set load balancing as path type.";
                              case as-attribute {
                                description
                                  "Ignore the as-path attribute.";
                                leaf load-balancing-as-path-ignore {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case as-attribute
    
                              case same-length-as-attribute {
                                description
                                  "Ignore comparison of as-path attributes with the same length.";
                                leaf load-balancing-as-path-relax {
                                  when
                                    "../load-balancing-enable='true'";
                                  type empty;
                                  description
                                    "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                }
                              }  // case same-length-as-attribute
                            }  // choice load-balancing-ignore-as-type
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container ipv4-multicast
    
                          container state {
                            config false;
                            description
                              "Operational state of peer information.";
                            leaf type {
                              type peer-type-info;
                              config false;
                              description
                                "Configures the type of BGP peers: IBGP or EBGP.";
                            }
    
                            leaf version {
                              type uint8;
                              config false;
                              description
                                "The current BGP version is BGP-4. BGP-4 provides a set of new mechanisms to support Classless Inter-Domain Routing (CIDR). The new mechanisms also support the network prefix-based advertisement, cancellation of the 'class' concept for a BGP network during the network prefix-supported advertisements, and route summarization and AS path summarization.";
                            }
    
                            leaf remote-router-id {
                              type inet:ipv4-address-no-zone;
                              config false;
                              description
                                "Router ID for a peer.";
                            }
    
                            leaf current-state {
                              type peer-state;
                              config false;
                              description
                                "Current BGP state, which can be Idle, Active, Established, Connect, OpenSent, or OpenConfirm.
    Idle: In this state, BGP denies all connection requests. This is the initial state of BGP.
    Active: In this state, BGP tries to establish TCP connections. This is the intermediate state of BGP.
    Established: In this state, BGP peers can exchange Update, Notification, and Keepalive packets with each other.
    Connect: In this state, BGP determines the subsequent operation after the TCP connections are established.
    OpenSent: In this state, BGP is waiting for the Open packet from the peer.
    OpenConfirm: In this state, BGP is waiting for a Notification packet and a Keepalive packet.";
                            }
    
                            leaf local-port {
                              type uint32;
                              config false;
                              description
                                "Local port number. BGP uses TCP as the transport layer protocol, and the port number of the TCP connection initiator is 179.";
                            }
    
                            leaf remote-port {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Port number for a peer to establish a peer relationship.";
                            }
    
                            leaf current-event {
                              type string {
                                length "1..39";
                              }
                              config false;
                              description
                                "Recent event that occurs on a peer.";
                            }
    
                            leaf last-state {
                              type peer-state;
                              config false;
                              description
                                "Last state of a peer, which can be Idle, Connect, Active, OpenSent, OpenConfirm, or Established.";
                            }
    
                            leaf up-down-duration {
                              type string {
                                length "1..49";
                              }
                              config false;
                              description
                                "Duration in which a BGP peer is in the Up or Down state.
    The Up state indicates the established state, and the Down state indicates a non-established state (including the Idle, Active, Connect, OpenSent and OpenConfirm state). When the state is switched between Up and Down, the upDownDuration timer is reset and starts from 0.";
                            }
    
                            leaf send-message {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of messages sent to the peer.";
                            }
    
                            leaf rpd-capability {
                              type rpd-cap-type;
                              config false;
                              description
                                "Peer route-policy distribute capability.";
                            }
    
                            leaf local-rpd-capability {
                              type rpd-cap-type;
                              config false;
                              description
                                "Local route-policy distribute capability.";
                            }
    
                            leaf negotiate-rpd-capability {
                              type rpd-cap-type;
                              config false;
                              description
                                "Negotiated route-policy distribute capability.";
                            }
    
                            leaf receive-message {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of messages received from the peer.";
                            }
    
                            leaf out-queue {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of messages to be sent in a queue.";
                            }
    
                            leaf receive-hold-time {
                              type uint32 {
                                range "0..65535";
                              }
                              units "s";
                              config false;
                              description
                                "Hold time of a peer.";
                            }
    
                            leaf receive-last-keepalive-time {
                              type yang:date-and-time;
                              config false;
                              description
                                "Last time when Keepalive packets were received from a peer.";
                            }
    
                            leaf negotiate-hold-time {
                              type uint32 {
                                range "0..65535";
                              }
                              units "s";
                              config false;
                              description
                                "Hold time negotiated by BGP peers.";
                            }
    
                            leaf negotiate-keepalive-time {
                              type uint32 {
                                range "0..21845";
                              }
                              units "s";
                              config false;
                              description
                                "Keepalive time negotiated by BGP peers.";
                            }
    
                            leaf receive-update-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Update packets received from a peer.";
                            }
    
                            leaf receive-open-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Open packets received from a peer.";
                            }
    
                            leaf receive-keepalive-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Keepalive packets received from a peer.";
                            }
    
                            leaf receive-notification-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Notification packets received from a peer.";
                            }
    
                            leaf receive-route-refresh-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Route-Refresh packets received from a peer.";
                            }
    
                            leaf send-update-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Update packets sent to a peer.";
                            }
    
                            leaf send-open-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Open packets sent to a peer.";
                            }
    
                            leaf send-keepalive-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Keepalive packets sent to a peer.";
                            }
    
                            leaf send-notification-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Notification packets sent to a peer.";
                            }
    
                            leaf send-route-refresh-count {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of Route-Refresh packets sent to a peer.";
                            }
    
                            leaf send-graceful-restart-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the local end supports the GR (Graceful Restart) capability.";
                            }
    
                            leaf receive-refresh-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports RR.";
                            }
    
                            leaf receive-four-byte-as-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports 4-byte AS numbers.";
                            }
    
                            leaf receive-multi-protocol-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports MP.";
                            }
    
                            leaf receive-graceful-restart-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports GR.";
                            }
    
                            leaf receive-add-path {
                              type string {
                                length "1..50";
                              }
                              config false;
                              description
                                "Whether the peer supports Add-Path.";
                            }
    
                            leaf negotiate-add-path {
                              type string {
                                length "1..50";
                              }
                              config false;
                              description
                                "Negotiated Add-Path.";
                            }
    
                            leaf receive-label-add-path {
                              type string {
                                length "1..50";
                              }
                              config false;
                              description
                                "Whether the peer supports labeled Add-Path.";
                            }
    
                            leaf negotiate-label-add-path {
                              type string {
                                length "1..50";
                              }
                              config false;
                              description
                                "Negotiated Label Add-Path.";
                            }
    
                            leaf receive-prefix {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of received route prefixes.";
                            }
    
                            leaf receive-active-prefix {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of received prefixes of active routes.";
                            }
    
                            leaf advertise-prefix {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              config false;
                              description
                                "Number of advertised route prefixes.";
                            }
    
                            leaf discard-attribute {
                              type string {
                                length "1..300";
                              }
                              config false;
                              description
                                "The attribute id discard info.";
                            }
    
                            leaf check-first-as {
                              type first-as-state;
                              config false;
                              description
                                "Check the first AS in the AS_Path of the update messages from EBGP peers.";
                            }
    
                            leaf extend-nexthop-capability {
                              type boolean;
                              config false;
                              description
                                "Peer extended next hop encoding capability.";
                            }
    
                            leaf egress-engineer-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports EPE.";
                            }
    
                            leaf orf-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports VPN orf capability.";
                            }
    
                            leaf rely-interface-capability {
                              type boolean;
                              config false;
                              description
                                "Whether the peer supports check interface.";
                            }
    
                            leaf remote-as {
                              type string {
                                length "1..11";
                              }
                              config false;
                              description
                                "AS number of the BGP peer.";
                            }
    
                            leaf memory-priority {
                              type memory-priority;
                              description
                                "Priority that is used to determine the disconnection order of a BGP peer relationship if memory overload occurs.";
                            }
    
                            leaf region-id {
                              ext:support-filter "true";
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "Region ID.";
                            }
    
                            leaf region-confederation-id {
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "Region confederation ID.";
                            }
                          }  // container state
    
                          container ipv4-mvpn {
                            when
                              "../bgp:type = 'mvpn'";
                            description
                              "Configure IPv4-family mvpn options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../bgp:peer-groups/bgp:peer-group/bgp:name";
                              }
                              must
                                "../../../../../../bgp:peer-groups/bgp:peer-group[bgp:name = current()]/bgp:afs/bgp:af[bgp:type='mvpn']";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf advertise-c-multicast-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise C-multicast route directional, only advertise to the neighbor which is matched the nexthop in intra-AD route.";
                            }
    
                            leaf nexthop-configure {
                              type bgp:nexthop-configuration-type;
                              must
                                "../nexthop-configure='local'";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address. If the value of nexthop-configure is set to local, the configuration does not take effect in the current address family.";
                            }
    
                            leaf nexthop-effective {
                              when
                                "../nexthop-configure='local'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the next hop of peer takes effect in the RR scenario.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from peers. By default, no route-filter is specified to filter the routes imported from peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to peers. By default, no route-filter is specified to filter the routes to be advertised to peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            leaf add-path-mode {
                              type bgp:add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf add-path-number {
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container ipv4-mvpn
    
                          container ipv6-mvpn {
                            when
                              "../bgp:type='mvpnv6'";
                            description
                              "Configure IPv6-family mvpn options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../bgp:peer-groups/bgp:peer-group/bgp:name";
                              }
                              must
                                "../../../../../../bgp:peer-groups/bgp:peer-group[bgp:name = current()]/bgp:afs/bgp:af[bgp:type='mvpnv6']";
                              must
                                "../../../../../../bgp:peer-groups/bgp:peer-group[bgp:name = current()]/bgp:peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf import-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                            }
    
                            leaf export-as-path-filter {
                              type leafref {
                                path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                              }
                              description
                                "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                            }
    
                            leaf advertise-c-multicast-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise C-multicast route directional, only advertise to the neighbor which is matched the nexthop in intra-AD route.";
                            }
    
                            leaf nexthop-configure {
                              type bgp:nexthop-configuration-type;
                              must
                                "../nexthop-configure='local'";
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address. If the value of nexthop-configure is set to local, the configuration does not take effect in the current address family.";
                            }
    
                            leaf nexthop-effective {
                              when
                                "../nexthop-configure='local'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the next hop of peer takes effect in the RR scenario.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from peers. By default, no route-filter is specified to filter the routes imported from peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to peers. By default, no route-filter is specified to filter the routes to be advertised to peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            leaf add-path-mode {
                              type bgp:add-path-cap-type;
                              default "null";
                              description
                                "Enable Add-Path route advertisement to a peer.";
                            }
    
                            leaf add-path-number {
                              type uint8 {
                                range "2..64";
                              }
                              description
                                "Number of Add-Path routes that can be advertised to a peer.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container ipv6-mvpn
    
                          container l2vpnad {
                            when
                              "../bgp:type='l2vpnad'";
                            description
                              "Configure l2vpn-ad-family options.";
                            leaf group-name {
                              ext:operation-exclude "update" {
                                description "The node cannot be modified, when the peer already belongs to a peer-group.";
                              }
                              type leafref {
                                path "../../../../../../bgp:peer-groups/bgp:peer-group/bgp:name";
                              }
                              must
                                "../../../../../../bgp:peer-groups/bgp:peer-group[bgp:name = current()]/bgp:afs/bgp:af[bgp:type='l2vpnad']";
                              must
                                "../../../../../../bgp:peer-groups/bgp:peer-group[bgp:name = current()]/bgp:peer-establish-mode = 'static'";
                              description
                                "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                            }
    
                            leaf advertise-community {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable advertise the community attribute to a peer or a peer group.";
                            }
    
                            leaf reflect-client {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                            }
    
                            leaf allow-as-loop {
                              type uint32 {
                                range "1..10";
                              }
                              description
                                "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                            }
    
                            leaf vpls-ad-disable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable virtual private LAN service auto-discovery.not receive BGP-AD route.";
                            }
    
                            leaf vpws-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable virtual private wire services.";
                            }
    
                            leaf vpls-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable virtual private LAN services.";
                            }
    
                            leaf nexthop-configure {
                              type bgp:nexthop-configuration-type;
                              description
                                "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                            }
    
                            leaf advertise-large-community {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            leaf advertise-large-community-state {
                              type boolean;
                              default "false";
                              config false;
                              description
                                "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                            }
    
                            choice import-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf import-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container import-filter {
                                  description
                                    "Configure an import route-filter to filter the routes received from peers. By default, no route-filter is specified to filter the routes imported from peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an import route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an import route-filter parameter.";
                                  }
                                }  // container import-filter
                              }  // case xpl-ref
                            }  // choice import-policy-type
    
                            choice export-policy-type {
                              description
                                "Set route policy or filter.";
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf export-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                container export-filter {
                                  description
                                    "Configure an export route-filter to filter the routes to be advertised to peers. By default, no route-filter is specified to filter the routes to be advertised to peers.";
                                  leaf name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify an export route-filter name.";
                                  }
    
                                  leaf parameter {
                                    when
                                      "../name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify an export route-filter parameter.";
                                  }
                                }  // container export-filter
                              }  // case xpl-ref
                            }  // choice export-policy-type
    
                            leaf route-update-interval {
                              ext:dynamic-default;
                              type uint16 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                            }
    
                            leaf preferred-value {
                              type uint32 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                            }
    
                            leaf update-group-independent {
                              type bgp:peer-comm-config-type;
                              default "default";
                              description
                                "Enable/disable the peer which can reside in an independent peer group.";
                            }
    
                            leaf update-group-independent-state {
                              type boolean;
                              config false;
                              description
                                "Whether the peer can reside in an independent peer group.";
                            }
    
                            container route-limit {
                              description
                                "Configure parameters of routes limited from this peer.";
                              leaf number {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Configure the maximum number of routes that can be accepted from a peer.";
                              }
    
                              leaf percent {
                                when "../number";
                                type uint8 {
                                  range "1..100";
                                }
                                default "75";
                                description
                                  "Specify the percentage of routes when a router starts to generate an alarm.";
                              }
    
                              leaf type {
                                when "../number";
                                type bgp:route-limit-type;
                                must
                                  "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                default
                                  "noparameter";
                                description
                                  "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                              }
    
                              leaf idle-timeout {
                                when
                                  "../type='idle-timeout'";
                                type uint16 {
                                  range
                                    "1..1200";
                                }
                                units "min";
                                description
                                  "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                              }
                            }  // container route-limit
    
                            container public-as-only {
                              description
                                "Configure BGP Remove private AS number from outbound updates parameters.";
                              leaf enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove AS numbers except peer AS number from outbound updates.";
                                case all {
                                  description
                                    "Remove all private AS numbers.";
                                  leaf force {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case all
    
                                case left-most {
                                  description
                                    "Remove the left-most private AS numbers.";
                                  leaf limited {
                                    when
                                      "../enable='true'";
                                    type empty;
                                    description
                                      "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                  }
                                }  // case left-most
                              }  // choice remove-private-as
    
                              leaf replace {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                              }
    
                              leaf no-skip-as {
                                when
                                  "../force or ../limited";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                              }
                            }  // container public-as-only
    
                            container public-as-only-import {
                              description
                                "Configure BGP remove private AS number in received BGP update messages parameters.";
                              leaf enable {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                              }
    
                              choice remove-private-as {
                                description
                                  "Remove private AS numbers in received BGP update messages.";
                                case all {
                                  description
                                    "Forcibly delete all the private AS numbers in the AS_Path list.";
                                  leaf force {
                                    when
                                      "../enable = 'enable'";
                                    type empty;
                                    description
                                      "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                  }
                                }  // case all
                              }  // choice remove-private-as
    
                              leaf effect-enable {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                              }
    
                              leaf effect-force {
                                type boolean;
                                config false;
                                description
                                  "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                              }
                            }  // container public-as-only-import
    
                            container path-attribute-treats {
                              description
                                "List of modes in which specified path attributes are processed.";
                              list path-attribute-treat {
                                must
                                  "discard-id-map or withdraw-id-map or unknown-id-map";
                                key "treat-type";
                                description
                                  "Configure mode in which specified path attributes are processed.";
                                leaf treat-type {
                                  type bgp:path-attr-treat-type;
                                  description
                                    "Mode in which specified path attributes are processed.";
                                }
    
                                leaf discard-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf withdraw-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
    
                                leaf unknown-id-map {
                                  type pub-type:id-range {
                                    pattern
                                      '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                  }
                                  description
                                    "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                }
                              }  // list path-attribute-treat
                            }  // container path-attribute-treats
                          }  // container l2vpnad
                        }  // list af
                      }  // container afs
    
                      container epe-srv6 {
                        when
                          "../../../../../ni:name='_public_' and ../bgp:egress-engineer='enable'";
                        description
                          "Configure BGP peer egress engineering segment-routing IPv6 information.";
                        choice sid-option {
                          description
                            "Set automatic SID or static SID.";
                          case auto-sid {
                            description
                              "Set automatic SID.";
                            leaf locator-name {
                              type leafref {
                                path "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator/srv6:name";
                              }
                              description
                                "Name of the locator referenced by a BGP peer.";
                            }
                          }  // case auto-sid
    
                          case static-sid {
                            when
                              "../../../bgp-epe:epe-srv6/bgp-epe:locator-name";
                            description
                              "Set static SID (PSP) value.";
                            choice psp-sid-type {
                              description
                                "Set SID compress flag.";
                              case uncompress {
                                description
                                  "SID (PSP).";
                                leaf psp-sid {
                                  type inet:ipv6-address-no-zone;
                                  must
                                    "not(../no-flavor-sid) or (.!=../no-flavor-sid)";
                                  must
                                    "not(../no-flavor-sid-compress) or (.!=../no-flavor-sid-compress)";
                                  must
                                    "not(../ext-static-sids/ext-static-sid[sid-value=current()])";
                                  description
                                    "Static End.X SID (PSP) of a BGP peer.";
                                }
                              }  // case uncompress
    
                              case compress {
                                description
                                  "Compress SID (PSP).";
                                leaf psp-sid-compress {
                                  type inet:ipv6-address-no-zone;
                                  must
                                    "not(../no-flavor-sid) or (.!=../no-flavor-sid)";
                                  must
                                    "not(../no-flavor-sid-compress) or (.!=../no-flavor-sid-compress)";
                                  must
                                    "not(../ext-static-sids/ext-static-sid[sid-value=current()])";
                                  must
                                    "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator[srv6:name=current()/../../../../bgp-epe:epe-srv6/bgp-epe:locator-name]/srv6:compress-block-length";
                                  must
                                    "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator[srv6:name=current()/../../../../bgp-epe:epe-srv6/bgp-epe:locator-name]/srv6:compress-static-length";
                                  description
                                    "Static End.X Compress SID (PSP) of a BGP peer.";
                                }
                              }  // case compress
                            }  // choice psp-sid-type
    
                            choice no-flavor-sid-type {
                              description
                                "Set static SID (no flavor) value.";
                              case uncompress {
                                description
                                  "SID (no flavor).";
                                leaf no-flavor-sid {
                                  type inet:ipv6-address-no-zone;
                                  must
                                    "not(../psp-sid) or (.!=../psp-sid)";
                                  must
                                    "not(../psp-sid-compress) or (.!=../psp-sid-compress)";
                                  must
                                    "not(../ext-static-sids/ext-static-sid[sid-value=current()])";
                                  description
                                    "Static End.X SID (no flavor) of a BGP peer.";
                                }
                              }  // case uncompress
    
                              case compress {
                                description
                                  "Compress SID (no flavor).";
                                leaf no-flavor-sid-compress {
                                  type inet:ipv6-address-no-zone;
                                  must
                                    "not(../psp-sid) or (.!=../psp-sid)";
                                  must
                                    "not(../psp-sid-compress) or (.!=../psp-sid-compress)";
                                  must
                                    "not(../ext-static-sids/ext-static-sid[sid-value=current()])";
                                  must
                                    "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator[srv6:name=current()/../../../../bgp-epe:epe-srv6/bgp-epe:locator-name]/srv6:compress-block-length";
                                  must
                                    "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator[srv6:name=current()/../../../../bgp-epe:epe-srv6/bgp-epe:locator-name]/srv6:compress-static-length";
                                  description
                                    "Static End.X Compress SID (no flavor) of a BGP peer.";
                                }
                              }  // case compress
                            }  // choice no-flavor-sid-type
    
                            container ext-static-sids {
                              description
                                "List of static SID.";
                              list ext-static-sid {
                                key "type";
                                unique "sid-value";
                                description
                                  "Configure static SID.";
                                leaf type {
                                  type sid-type;
                                  description
                                    "The type of SRv6 static SID type.";
                                }
    
                                leaf sid-mode {
                                  type sid-mode-type;
                                  must
                                    ".!='compress' or (.='compress' and /ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator[srv6:name=current()/../../../../bgp-epe:epe-srv6/bgp-epe:locator-name]/srv6:compress-block-length and /ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator[srv6:name=current()/../../../../bgp-epe:epe-srv6/bgp-epe:locator-name]/srv6:compress-static-length)";
                                  mandatory
                                    true;
                                  description
                                    "The mode of SRv6 static SID type.";
                                }
    
                                leaf sid-value {
                                  type inet:ipv6-address-no-zone;
                                  mandatory
                                    true;
                                  description
                                    "Sid value.";
                                }
                              }  // list ext-static-sid
                            }  // container ext-static-sids
                          }  // case static-sid
                        }  // choice sid-option
                      }  // container epe-srv6
    
                      container epe {
                        description
                          "Configure BGP peer egress engineering information.";
                        container virtual-link {
                          when
                            "../../../../../../ni:name='_public_'";
                          must
                            "../../bgp:egress-engineer='enable'";
                          must
                            "contains(../../bgp:address,':') and (substring(../../bgp:address,1,4) != 'FE80')";
                          must
                            "not(admin-groups-name) or not(admin-groups)";
                          presence
                            "Create EPE virtual link.";
                          description
                            "Configure BGP peer egress engineering segment-routing IPv6 virtual link information.";
                          leaf metric {
                            type uint32 {
                              range
                                "1..16777215";
                            }
                            description
                              "Specifies the Value of virtual link metric.";
                          }
    
                          leaf admin-groups {
                            type pub-type:hex-binary;
                            description
                              "Specifies virtual link management attributes. They are total 32 bits.";
                          }
    
                          leaf-list srlg-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            max-elements 64;
                            description
                              "Configure a list of risk-shared link groups of virtual link.";
                          }
    
                          leaf twamp-test-session-id {
                            type leafref {
                              path "/twamp-controller:twamp-controller/twamp-controller:client/twamp-controller:sessions/twamp-controller:session/twamp-controller:id";
                            }
                            must
                              "contains(/twamp-controller:twamp-controller/twamp-controller:client/twamp-controller:sessions/twamp-controller:session[twamp-controller:id = current()]/twamp-controller:send-ip-addr, ':')";
                            description
                              "Specifies the Value of twamp test-session ID.";
                          }
    
                          leaf-list admin-groups-name {
                            type leafref {
                              path "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping/te:attribute-name";
                            }
                            max-elements 32;
                            description
                              "Configure the virtual link management attributes. They are total 32 bits.";
                          }
                        }  // container virtual-link
                      }  // container epe
                    }  // list peer
                  }  // container peers
    
                  container peer-bfd-session-states {
                    config false;
                    description
                      "List of BFD sessions.";
                    list peer-bfd-session-state {
                      key "address";
                      config false;
                      description
                        "Operational state of BFD session.";
                      leaf address {
                        type inet:ip-address-no-zone;
                        config false;
                        description
                          "Peer address of the BFD session.";
                      }
    
                      leaf local-address {
                        type inet:ip-address-no-zone;
                        config false;
                        description
                          "Local address of the BFD session.";
                      }
    
                      leaf if-name {
                        type pub-type:if-name;
                        config false;
                        description
                          "Name of an interface of the BFD session.";
                      }
    
                      leaf tx-interval {
                        type uint32;
                        units "ms";
                        default "0";
                        config false;
                        description
                          "Interval at which BFD packets are sent.";
                      }
    
                      leaf rx-interval {
                        type uint32;
                        units "ms";
                        default "0";
                        config false;
                        description
                          "Interval at which BFD packets are received.";
                      }
    
                      leaf multiplier {
                        type uint32 {
                          range "0..50";
                        }
                        config false;
                        description
                          "Detection multiplier.";
                      }
    
                      leaf status {
                        type bfd-state;
                        config false;
                        description
                          "State of the BFD session.";
                      }
    
                      leaf global-bfd-enable {
                        type boolean;
                        config false;
                        description
                          "Global BFD state.";
                      }
    
                      leaf valid-ttl-hops {
                        type uint8 {
                          range "1..255";
                        }
                        config false;
                        description
                          "The valid TTL hops value.";
                      }
                    }  // list peer-bfd-session-state
                  }  // container peer-bfd-session-states
    
                  container egress-engineer-peer-sets {
                    when
                      "../../../ni:name='_public_'";
                    description
                      "List of peer set information under BGP instance.";
                    list egress-engineer-peer-set {
                      key "peer-set-name";
                      description
                        "Configure peer set information.";
                      leaf peer-set-name {
                        type string {
                          length "1..63";
                        }
                        description
                          "The name for peer set.";
                      }
    
                      leaf static-label {
                        type uint32 {
                          range "16..1048575";
                        }
                        description
                          "The static label for peer set. The value range and default value are controlled by the PAF.";
                      }
    
                      leaf label-pop {
                        when "../static-label";
                        type boolean;
                        must
                          "not(../relate-bfd='true' and ../label-pop='true')";
                        default "false";
                        description
                          "Enable/disable the BGP-EPE label popping function.";
                      }
    
                      leaf relate-bfd {
                        type boolean;
                        must
                          "not(../relate-bfd='true' and ../label-pop='true')";
                        default "false";
                        description
                          "Enable/disable association between the BGP-EPE label and BFD status.";
                      }
                    }  // list egress-engineer-peer-set
                  }  // container egress-engineer-peer-sets
    
                  container epe-srv6 {
                    when
                      "../../../ni:name='_public_'";
                    description
                      "Configure BGP egress engineering segment-routing IPv6 information.";
                    leaf locator-name {
                      type leafref {
                        path "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator/srv6:name";
                      }
                      description
                        "Referenced locator name.";
                    }
                  }  // container epe-srv6
                }  // container base-process
    
                container instance-processs {
                  description
                    "List of all BGP instances.";
                  list instance-process {
                    ext:generated-by "system" {
                      description "The BGP public instance is generated automatically when BGP instances is enabled.";
                    }
                    key "name";
                    max-elements 1;
                    description
                      "Configure a BGP instance.";
                    leaf name {
                      type leafref {
                        path "/bgp:bgp/bgp:instance-processs/bgp:instance-process/bgp:name";
                      }
                      description
                        "Name of BGP Site.";
                    }
    
                    leaf router-id {
                      type inet:ipv4-address-no-zone;
                      description
                        "ID of a router that is in IPv4 address format. Certain dynamic routing protocols require a router ID. If no router ID is specified for a router when these protocols are enabled, the router ID in the RM module is used by default. The default router ID in the RM module is 0.0.0.0 when the router is not configured with any interface.
    The rules for selecting a router ID are as follows:
    1. If you set a router ID through this configuration, the set router ID is used. If the router ID is not set, you need to select a router ID according to the following rules:
    (1) If loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the loopback interfaces is selected as the router ID.
    (2) If no loopback interface configured with an IP address exists, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.
    The router ID is reselected only when the interface address that is selected as the router ID is deleted or changed. The router ID is not reselected in any of the following cases:
    a. The interface is Down.
    b. A loopback interface is configured when the IP address of a non-loopback interface is selected as the router ID.
    c. A larger IP address of an interface is configured.
    2. Each VPN instance selects the router ID from the addresses of the interfaces of the VPN instance according to the preceding rules.
    3. When both the AMB and SMB exist on the router, the system backs up the router ID set through the related command and the router ID that is selected from IP addresses of the interfaces. After the active/standby switchover is performed, the system checks the validity of the router ID selected from the interface addresses. If the router ID is invalid, the system reselects a router ID.";
                    }
    
                    leaf effect-router-id {
                      type inet:ipv4-address-no-zone;
                      default "0.0.0.0";
                      config false;
                      description
                        "Router ID that takes effect.";
                    }
    
                    container afs {
                      description
                        "List of BGP address family instances.";
                      list af {
                        key "type";
                        description
                          "Configure BGP address family instance.";
                        leaf type {
                          type bgp:instance-af-type;
                          description
                            "Address family type of a BGP instance.";
                        }
    
                        container ipv4-unicast {
                          when
                            "../type = 'ipv4uni' and ../../../../../../ni:name!='_public_'";
                          must
                            "../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                          description
                            "Configure IPv4 unicast options.";
                          container common {
                            description
                              "Configure IPv4 unicast common options.";
                            leaf route-select-delay {
                              type uint16 {
                                range "0..3600";
                              }
                              units "s";
                              default "0";
                              description
                                "Route selection delay.";
                            }
    
                            choice reflector-type {
                              description
                                "Set IPv4 address or id.";
                              case address {
                                description
                                  "IPv4 address.";
                                leaf reflector-cluster-ipv4 {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                                }
                              }  // case address
    
                              case id {
                                description
                                  "Set value.";
                                leaf reflector-cluster-id {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                                }
                              }  // case id
                            }  // choice reflector-type
    
                            leaf reflect-change-path {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable an RR to use an export policy to change route AS_Path.";
                            }
    
                            leaf always-compare-med {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to compare the MEDs of routes from peers in different ASs in route selection. If
     there are multiple reachable routes to the same destination, the route with the smallest MED is preferred. Do not use this option unless different ASs use the same IGP and route selection mode.";
                            }
    
                            leaf default-med {
                              type uint32;
                              default "0";
                              description
                                "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                            }
    
                            leaf nexthop-third-party {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP third-party next hop.";
                            }
    
                            leaf default-local-preference {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              default "100";
                              description
                                "The local preference of BGP routes.";
                            }
    
                            leaf default-route-import {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to import default routes into the BGP routing table. Default-route-imported must be used with import-routes so that default routes can be imported to the BGP routing table. If only import-routes is used, no default routes can be added to the BGP routing table. In addition, default-route-imported can only import the default routes in the routing table into the BGP routing table.";
                            }
    
                            leaf routerid-neglect {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to ignore router IDs when selecting the optimal route. Comparing router IDs is the last resort in route selection. This means that if one optimal route must be selected and no other parameters can be used to break the tie, router IDs can be used. If this option is selected, the first received route will be selected as the optimal route, and BGP will ignore the router ID and peer address in route selection.";
                            }
    
                            leaf reflect-between-client {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                            }
    
                            leaf ext-community-change {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to change the extended community attribute.";
                            }
    
                            leaf active-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to advertise the optimal routes in the RM module to peers.";
                            }
    
                            leaf ebgp-interface-sensitive {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function of EBGP interface fast sensing. If this function is enabled, the sessions of directly connected EBGP peers are immediately cleared from the associated interface when the interface becomes down.";
                            }
    
                            leaf auto-frr {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP Auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                            }
    
                            leaf nexthop-resolve-aigp {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable route with AIGP attribute for route selection.";
                            }
    
                            leaf summary-automatic {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable automatic summarization for imported routes. Manual summarization takes precedence over automatic summarization. After automatic summarization is enabled, BGP summarizes routes based on the natural network segment (for example, 10.1.1.1/24 and 10.2.1.1/24 are summarized into 10.0.0.0/8, a Class A address), and sends only the summarized route to peers. This reduces the number of routes.";
                            }
    
                            leaf supernet-unicast-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to advertise supernet unicast routes.";
                            }
    
                            leaf supernet-label-advertise {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function to advertise supernet labeled routes.";
                            }
    
                            leaf label-free-delay {
                              type uint8 {
                                range "0..180";
                              }
                              units "s";
                              default "0";
                              description
                                "Label Free Delay.";
                            }
    
                            leaf attribute-set-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the capability of processing attribute set.";
                            }
    
                            leaf attribute-set-mode {
                              when
                                "../attribute-set-enable='true'";
                              type bgp:attribute-set-type;
                              default "both";
                              description
                                "The processing mode of attribute set.";
                            }
    
                            leaf best-route-bit-error-detection {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to reroute traffic when a bit error event occurs.";
                            }
    
                            leaf bestroute-med-plus-igp {
                              type boolean;
                              must
                                "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                              default "false";
                              description
                                "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                            }
    
                            leaf bestroute-med-multiplier {
                              when
                                "../bestroute-med-plus-igp='true'";
                              type uint16 {
                                range "1..1000";
                              }
                              default "1";
                              description
                                "Value of med product factor.";
                            }
    
                            leaf bestroute-igp-multiplier {
                              when
                                "../bestroute-med-plus-igp='true'";
                              type uint16 {
                                range "1..1000";
                              }
                              default "1";
                              description
                                "Value of IGP cost product factor.";
                            }
    
                            leaf bestroute-igp-metric-ignore {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                            }
    
                            leaf bestroute-router-id-prior-clusterlist {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to compare originator before clusterlist in route selection.";
                            }
    
                            leaf bestroute-med-none-as-maximum {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP considers its MED as the largest MED value (4294967295). If a route does not carry MED, BGP considers its MED as the default value (0) during route selection.";
                            }
    
                            leaf maximum-load-balancing-ibgp {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "not (../maximum-load-balancing>1 or ../maximum-load-balancing-eibgp or ../load-balancing-eibgp-enable='true') or ../maximum-load-balancing-ibgp=1";
                              default "1";
                              description
                                "Specify the maximum number of equal-cost IBGP routes. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf maximum-load-balancing-ebgp {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "not (../maximum-load-balancing>1 or ../maximum-load-balancing-eibgp or ../load-balancing-eibgp-enable='true') or ../maximum-load-balancing-ebgp=1";
                              default "1";
                              description
                                "Specify the maximum number of equal-cost EBGP routes. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf bestroute-as-path-ignore {
                              type boolean;
                              must
                                "../bestroute-as-path-ignore = 'false' or ../load-balanc-as-path-ignore ='false'";
                              default "false";
                              description
                                "Enable/disable BGP to ignore the AS_Path attribute when selecting the optimal route. By default, BGP uses the AS_Path attribute as one of route selection rules, and a route with a shorter AS_Path is preferred. After bestroute-as-path-ignore is selected, BGP does not compare the AS_Path length.";
                            }
    
                            leaf load-balanc-igp-metric-ignore {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same IGP cost can participate in load balancing.";
                            }
    
                            leaf load-balanc-as-path-ignore {
                              type boolean;
                              must
                                "../load-balanc-as-path-ignore ='false' or (../load-balanc-as-path-relax ='false' and ../bestroute-as-path-ignore ='false')";
                              default "false";
                              description
                                "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                            }
    
                            leaf load-balanc-as-path-relax {
                              type boolean;
                              must
                                "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                              default "false";
                              description
                                "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                            }
    
                            leaf maximum-load-balancing {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1 or ../maximum-load-balancing-eibgp) or ../maximum-load-balancing=1";
                              default "1";
                              description
                                "Specify the maximum number of equal-cost routes in the BGP routing table. The value can be 1 or an integer greater than 1. The value depends on the associated license. Equal-cost BGP routes can be generated for load balancing only when the BGP routes meet the first nine rules of the route-selection policy and have the same AS-Path attribute. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf ebgp-ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing-ebgp and ../maximum-load-balancing-ebgp>1";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost EBGP routes is changed. When equal-cost EBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost EBGP routes is greater than 1.";
                            }
    
                            leaf ibgp-ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing-ibgp and ../maximum-load-balancing-ibgp>1";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost IBGP routes is changed. When equal-cost IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost IBGP routes is greater than 1.";
                            }
    
                            leaf ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing and ../maximum-load-balancing>1";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost routes is changed. When equal-cost BGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost BGP routes is greater than 1.";
                            }
    
                            leaf maximum-load-balancing-eibgp {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "../maximum-load-balancing-ibgp=1 and ../maximum-load-balancing-ebgp=1 and ../maximum-load-balancing=1 and ../load-balancing-eibgp-enable='false'";
                              description
                                "Specify the maximum number of equal-cost EBGP routes and IBGP routes. After the attribute is set, load balancing is performed among equal-cost BGP VPN routes, regardless of the route type, EBGP or IBGP. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf eibgp-ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing-eibgp";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost EBGP and IBGP routes is changed. When equal-cost EBGP and IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised.";
                            }
    
                            leaf load-balancing-eibgp-enable {
                              type boolean;
                              must
                                "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1 or ../maximum-load-balancing-eibgp) or ../load-balancing-eibgp-enable='false'";
                              default "false";
                              description
                                "Enable/disable EIBGP route load balancing.";
                            }
    
                            leaf advertise-route-mode {
                              type bgp-advertise-route-mode;
                              default "all";
                              description
                                "VPN advertise route mode.";
                            }
    
                            leaf import-rib-nexthop-invariable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to advertise the route without modifying the next-hop.";
                            }
    
                            leaf determin-med {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable deterministic MED so that the route selection result is relevant to the sequence in which routes are received.";
                            }
                          }  // container common
    
                          container preference {
                            description
                              "Configure parameters relating to options for BGP routes preference.";
                            choice set-value-or-policy {
                              default
                                "set-value";
                              description
                                "Set BGP routes preference by value or policy.";
                              case set-value {
                                description
                                  "Set BGP routes preference by value.";
                                leaf external {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  default "255";
                                  description
                                    "Set the protocol priority of EBGP routes. The value is an integer. An EBGP route is the optimal route learned from a peer outside the local AS.";
                                }
    
                                leaf internal {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  default "255";
                                  description
                                    "Set the protocol priority of IBGP routes. The value is an integer. An IBGP route is a route learned from a peer inside the local AS.";
                                }
    
                                leaf local {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  default "255";
                                  description
                                    "Set the protocol priority of a local BGP route. A local route refers to an automatically or manually summarized route.";
                                }
                              }  // case set-value
    
                              case rtp-ref {
                                description
                                  "Set BGP routes preference by route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify a routing policy to filter routes so that a configured priority is applied to the routes that match the specified policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice set-value-or-policy
                          }  // container preference
    
                          container nexthop-recursive-lookup {
                            description
                              "Configure next hop iteration.";
                            container common {
                              description
                                "Configure next hop iteration common options.";
                              leaf restrain {
                                type boolean;
                                default "true";
                                description
                                  "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route-policy or route-filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a routing policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // container common
    
                            container delay {
                              description
                                "Configure time of next hop change responding delay.";
                              leaf time {
                                type uint8 {
                                  range "1..100";
                                }
                                units "s";
                                description
                                  "Specify the delay in responding to the next hop change.";
                              }
    
                              leaf no-critical-event-time {
                                type uint8 {
                                  range "0..100";
                                }
                                units "s";
                                default "10";
                                description
                                  "Specify the delay in responding to the next hop change on non critical relay change event.";
                              }
                            }  // container delay
                          }  // container nexthop-recursive-lookup
    
                          container import-routes {
                            description
                              "List of imported routes.";
                            list import-route {
                              key "protocol process-id";
                              description
                                "Configure route import. Routes of other protocol types can be imported by BGP. By default, BGP does not import routes of other protocol types.";
                              leaf protocol {
                                type bgp:ipv4-import-route-protocol-type;
                                description
                                  "Routing protocol from which routes can be imported.";
                              }
    
                              leaf process-id {
                                type uint32 {
                                  range
                                    "0..4294967295";
                                }
                                description
                                  "Process ID of an imported routing protocol. The process ID is 0, if the imported routing protocol is direct routes, static routes, UNRs, or OP-routes. The process ID must be specified range from 1 to 4294967295, if the imported routing protocol is RIP, OSPF, ISIS.";
                              }
    
                              leaf med {
                                type uint32;
                                description
                                  "Specifies the MED metric of the imported route.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list import-route
                          }  // container import-routes
    
                          container aggregate-routes {
                            description
                              "List of summarized routes.";
                            list aggregate-route {
                              key "address mask-length";
                              description
                                "Configure a summarized route in the BGP routing table. The local outbound interface of the summarized route is Null0. When another router receives the route, the route adds an outbound interface to the route. If the Origin attributes of the specific routes for the route summarization are different, the Origin attribute of the summarized route is that with the highest priority. Origin attributes are arranged in the priority order of complete > egp > igp. A summarized route carries the community attribute of each specific route.";
                              leaf address {
                                type inet:ip-address-no-zone;
                                description
                                  "Specify the IPv4 address or IPv6 address of a summarized route. Only IPv4 summarized routes can be configured in the IPv4 address family and only IPv6 summarized routes can be configured in the IPv6 address family.";
                              }
    
                              leaf mask-length {
                                type uint8 {
                                  range "1..128";
                                }
                                description
                                  "Specify the mask length of a summarized address.";
                              }
    
                              leaf as-set {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the generation of routes with the AS-SET attribute. This option can be used to create a summarized route. The AS_Path attribute of the summarized route contains the AS-Path attributes of the specific routes for the route summarization. Exercise caution when using this option if multiple AS_Paths need to be summarized to prevent route flapping.";
                              }
    
                              leaf detail-suppressed {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable detail-suppressed. Suppress the advertisement of specific routes for the route summarization. Only the summarized route is advertised.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf attribute-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify an attribute of summarized routes. If apply as-path is used to configure the AS_Path attribute that is used in the route Summarization policy, and the as-set keyword is set, the AS_Path attribute in the policy does not take effect. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                  }
    
                                  leaf origin-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a policy for generating summarized routes. Summarized routes are generated only when the routes match route-policy. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                  }
    
                                  leaf suppress-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify a policy for suppressing the advertisement of specified routes. The routes matching the policy are not advertised, and other routes are advertised. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf attribute-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf attribute-filter-parameter {
                                    when
                                      "../attribute-filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
    
                                  leaf origin-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf origin-filter-parameter {
                                    when
                                      "../origin-filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
    
                                  leaf suppress-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf suppress-filter-parameter {
                                    when
                                      "../suppress-filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list aggregate-route
                          }  // container aggregate-routes
    
                          container aggregate-default-route {
                            description
                              "Configure aggregate default route.";
                            leaf origin-ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the name of an IPv4 prefix list for a summary default route. Only the name of an IPv4 prefix list can be configured in a BGP IPv4 address family.";
                            }
    
                            leaf attribute-policy {
                              when
                                "../origin-ip-prefix";
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Specify an attribute policy of a summary default route.";
                            }
                          }  // container aggregate-default-route
    
                          container network-routes {
                            description
                              "List of network routes.";
                            list network-route {
                              key "address mask-length";
                              description
                                "Configure a network route in the BGP routing table.";
                              leaf address {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Specify the IP address advertised by BGP. An IPv4 address can be configured in the IPv4 address family. Note: During the configuration of a network route, the IP address is adjusted based on the mask. It is recommended that you click Synchronize All after creating a network route.";
                              }
    
                              leaf mask-length {
                                type uint8 {
                                  range "0..32";
                                }
                                description
                                  "Specify the mask length of an IP address.";
                              }
    
                              choice policy-type {
                                description
                                  "Specify the route-policy or filter for route advertisement.";
                                case rtp-ref {
                                  description
                                    "Specify the route policy.";
                                  leaf policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the route policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list network-route
                          }  // container network-routes
    
                          container import-ribs {
                            description
                              "List of imported RIBs configuration.";
                            list import-rib {
                              key "source-vpn source-address-family";
                              description
                                "Configure imported RIBs.";
                              leaf source-vpn {
                                type leafref {
                                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                }
                                must
                                  "../../../../../../../../../ni:name != current()";
                                description
                                  "Source VPN name.";
                              }
    
                              leaf source-address-family {
                                type bgp:vrf-import-rib-ipv4-safi-type;
                                description
                                  "Source address family type.";
                              }
    
                              leaf valid-route {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable imported valid route.";
                              }
    
                              leaf include-label-route {
                                when
                                  "../source-address-family='ipv4uni'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable imported include label route.";
                              }
    
                              choice policy-type {
                                description
                                  "Set policy or filter.";
                                case rtp-ref {
                                  description
                                    "Specify the route policy.";
                                  leaf policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the route policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list import-rib
                          }  // container import-ribs
    
                          container instance-import-ribs {
                            description
                              "List of imported RIBs from BGP instances configuration.";
                            list instance-import-rib {
                              key "source-instance source-vpn source-address-family";
                              description
                                "Configure imported RIBs.";
                              leaf source-instance {
                                type string {
                                  length "1..31";
                                }
                                must
                                  "../source-instance = 'default' and /bgp:bgp/bgp:base-process/bgp:enable='true'";
                                description
                                  "Configure source BGP instance.";
                              }
    
                              leaf source-vpn {
                                type leafref {
                                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                }
                                must
                                  "../../../../../../../../../ni:name != current()";
                                description
                                  "Source VPN name.";
                              }
    
                              leaf source-address-family {
                                type bgp:vrf-import-rib-ipv4-safi-type;
                                description
                                  "Source address family type.";
                              }
    
                              leaf valid-route {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable imported valid route.";
                              }
    
                              leaf include-label-route {
                                when
                                  "../source-address-family='ipv4uni'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable imported include label route.";
                              }
    
                              choice policy-type {
                                description
                                  "Set policy or filter.";
                                case rtp-ref {
                                  description
                                    "Specify the route policy.";
                                  leaf policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the route policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list instance-import-rib
                          }  // container instance-import-ribs
    
                          container import-filter-policy {
                            description
                              "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                            choice ipv4-import-filter-protocol-policy-type {
                              description
                                "Set IPv4 filter protocol policy.";
                              case acl-ref {
                                description
                                  "ACL Route Policy.";
                                leaf acl-name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  description
                                    "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                                }
                              }  // case acl-ref
    
                              case ip-prefix-ref {
                                description
                                  "IP prefix Policy.";
                                leaf ipv4-prefix-filter {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Specify the IPv4 prefix list name.";
                                }
                              }  // case ip-prefix-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice ipv4-import-filter-protocol-policy-type
                          }  // container import-filter-policy
    
                          container export-filter-policys {
                            description
                              "List of filtering policies.";
                            list export-filter-policy {
                              key "protocol process-id";
                              description
                                "Apply a filtering policy. It is used to filter the routes to be advertised to the peer. By default, routes are not filtered.";
                              leaf protocol {
                                type bgp:ipv4-export-filter-protocol-type;
                                description
                                  "Specify the name of a routing protocol. The routing protocol takes effect only on the routes to be advertised. The IPv4 address family supports the direct, IS-IS, OSPF, RIP, and static routing protocols. The IPv6 unicast address family of a public network instance supports the direct, IS-IS, OSPFv3, RIPng, and static routing protocols. The IPv6 address family of a VPNv6 instance supports the direct, IS-IS, RIPng, and static routing protocols.";
                              }
    
                              leaf process-id {
                                type uint32 {
                                  range
                                    "0..4294967295";
                                }
                                description
                                  "Specify the process ID required to be matched. The value is an integer ranging from 0 to 4294967295. If direct or static routes need to be filtered, no process ID is required.";
                              }
    
                              choice ipv4-filter-protocol-policy-type {
                                mandatory true;
                                description
                                  "Set IPv4 filter protocol policy.";
                                case acl-ref {
                                  description
                                    "ACL Route Policy.";
                                  leaf acl-name-or-num {
                                    type leafref {
                                      path "/acl:acl/acl:groups/acl:group/acl:identity";
                                    }
                                    description
                                      "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                                  }
                                }  // case acl-ref
    
                                case ip-prefix-ref {
                                  description
                                    "IP prefix Policy.";
                                  leaf ipv4-prefix-filter {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                    }
                                    description
                                      "Specify the IPv4 prefix list name.";
                                  }
                                }  // case ip-prefix-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice ipv4-filter-protocol-policy-type
                            }  // list export-filter-policy
                          }  // container export-filter-policys
    
                          container dampening-routes {
                            description
                              "List of route dampening.";
                            list dampening-route {
                              must
                                "reuse < suppress and suppress < ceiling";
                              key "peer-type";
                              description
                                "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                              leaf peer-type {
                                type dampening-route-peer-type;
                                description
                                  "Configure the peer type.";
                              }
    
                              leaf half-life-time {
                                type uint16 {
                                  range "1..45";
                                }
                                units "min";
                                default "15";
                                description
                                  "Configure a half-life for reachable routes.";
                              }
    
                              leaf reuse {
                                type uint16 {
                                  range
                                    "1..20000";
                                }
                                default "750";
                                description
                                  "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                              }
    
                              leaf suppress {
                                type uint16 {
                                  range
                                    "1..20000";
                                }
                                default "2000";
                                description
                                  "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                              }
    
                              leaf ceiling {
                                type uint16 {
                                  range
                                    "1001..20000";
                                }
                                default "16000";
                                description
                                  "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                              }
    
                              leaf update-standard {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable update standard.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route-policy or route-filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a routing policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list dampening-route
                          }  // container dampening-routes
    
                          container slow-peer {
                            description
                              "Configure peer advertising routes slowly.";
                            leaf detection {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable detect slow peers.";
                            }
    
                            leaf detection-threshold {
                              type uint16 {
                                range
                                  "120..3600";
                              }
                              units "s";
                              default "300";
                              description
                                "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                            }
    
                            leaf absolute-detection {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable absolute-detect slow peers.";
                            }
    
                            leaf absolute-detection-threshold {
                              type uint16 {
                                range "3..3600";
                              }
                              units "s";
                              default "9";
                              description
                                "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                            }
                          }  // container slow-peer
    
                          container qos {
                            description
                              "Configure QoS.";
                            choice local-id-policy {
                              description
                                "Configure QoS local ID.";
                              case value {
                                description
                                  "Specify the QoS local ID value.";
                                leaf local-id {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  description
                                    "Specify the QoS local ID value.";
                                }
                              }  // case value
    
                              case rtp-ref {
                                description
                                  "Route policy.";
                                leaf local-id-policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Set a routing policy to filter routes so that a configured QoS ID is applied to the routes that match the specified policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf local-id-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf local-id-filter-parameter {
                                  when
                                    "../local-id-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice local-id-policy
                          }  // container qos
                        }  // container ipv4-unicast
    
                        container ipv4-vpn {
                          when
                            "../type = 'ipv4vpn' and ../../../../../../ni:name='_public_'";
                          description
                            "Configure IPv4 VPNv4 options.";
                          leaf policy-vpntarget {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable VPN target-based filtering for the received VPN routes. Only the VPN route whose Export RT attribute matches the local Import RT attribute can be added to the routing table. This option can be used in the inter-AS VPN Option B solution and the ASBR MP-EBGP inter-AS L2VPN solution in Kompella mode.";
                          }
    
                          choice reflector-type {
                            description
                              "Set IPv4 address or id.";
                            case address {
                              description
                                "IPv4 address.";
                              leaf reflector-cluster-ipv4 {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case address
    
                            case id {
                              description
                                "Set value.";
                              leaf reflector-cluster-id {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                              }
                            }  // case id
                          }  // choice reflector-type
    
                          leaf reflect-change-path {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable an RR to use an export policy to change route AS_Path.";
                          }
    
                          leaf auto-frr {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP Auto FRR. If IP FRR, VPN FRR, and Auto FRR are all enabled, IP FRR and VPN FRR take precedence over Auto FRR. If a route fails to match the routing policy of IP FRR or VPN FRR, Auto FRR takes effect.";
                          }
    
                          leaf tunnel-selector-name {
                            type leafref {
                              path "/rtp:routing-policy/rtp:tunnel-selectors/rtp:tunnel-selector/rtp:name";
                            }
                            description
                              "Configure a tunnel selector and apply it to the BGP IPv4 unicast, BGP VPNv4 address families and BGP VPNv6 address families so that IPv4,VPNv4 and VPNv6 labeled routes can be iterated to tunnels based on the tunnel selector.";
                          }
    
                          leaf route-select-delay {
                            type uint16 {
                              range "0..3600";
                            }
                            units "s";
                            default "0";
                            description
                              "Route selection delay.";
                          }
    
                          leaf apply-label-mode {
                            type apply-label-type;
                            default "per-route";
                            description
                              "Method of distributing labels to VPNV4 and VPNV6 routes. The way which assigns the label depends on the paf value. If there are a large number of routes, assign a label for the routes that have same nexthop and out-label. This allows all routes which have same nexthop and out-label to use one label.";
                          }
    
                          leaf nexthop-select-depend-type {
                            type select-depend-type-ext;
                            default "depend-ip";
                            description
                              "Specify the route iteration mode: IP or tunnel. In tunnel mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an LSP. In IP
    mode, the labeled BGP IPv4 route can participate in route selection only after its next hop is iterated to an IP address. By default, the labeled BGP IPv4 route can participate in route selection
    if its next hop can be iterated to an IP address, regardless of whether the LSP of the next hop exists. This allows the RR that is not enabled with MPLS to forward labeled routes. In non-RR
    networking or RR networking where the BGP next hop is changed, BGP needs to check whether there is an LSP destined for the next hop. If such an LSP is not found, BGP needs to establish an LSP in
    advance. If the default setting is adopted, a labeled BGP IPv4 unicast route may be selected prior to LSP establishment. As a result, services are incorrectly switched before LSP establishment and
    service stability is affected. Therefore, allow route selection only after the labeled BGP IPv4 route is iterated to an LSP.";
                          }
    
                          leaf default-med {
                            type uint32;
                            default "0";
                            description
                              "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                          }
    
                          leaf best-external {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable best external route selection.";
                          }
    
                          leaf label-free-delay {
                            type uint8 {
                              range "0..180";
                            }
                            units "s";
                            default "0";
                            description
                              "Label free delay.";
                          }
    
                          leaf add-path-select-num {
                            type uint8 {
                              range "2..64";
                            }
                            description
                              "Number of Add-Path routes.";
                          }
    
                          leaf default-local-preference {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "100";
                            description
                              "The local preference of BGP routes.";
                          }
    
                          leaf bestroute-med-plus-igp {
                            type boolean;
                            must
                              "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                            default "false";
                            description
                              "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                          }
    
                          leaf bestroute-med-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of med product factor.";
                          }
    
                          leaf bestroute-igp-multiplier {
                            when
                              "../bestroute-med-plus-igp='true'";
                            type uint16 {
                              range "1..1000";
                            }
                            default "1";
                            description
                              "Value of IGP cost product factor.";
                          }
    
                          leaf bestroute-igp-metric-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                          }
    
                          leaf bestroute-router-id-prior-clusterlist {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BGP to compare originator before clusterlist in route selection.";
                          }
    
                          leaf reflect-between-client {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                          }
    
                          leaf activate-route-tag {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable tag-based filtering.";
                          }
    
                          leaf route-reflector-ext-community-filter {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ext-community-filters/rtp:ext-community-filter/rtp:name";
                            }
                            description
                              "Set the name of the extended community filter supported by an RR group. For the purpose of load balancing, only the IBGP route whose route-target extended community attribute meets the matching rules can be reflected.";
                          }
    
                          container dampening-routes {
                            description
                              "List of route dampening.";
                            list dampening-route {
                              must
                                "reuse < suppress and suppress < ceiling";
                              key "peer-type";
                              description
                                "Configure BGP route dampening or modify various BGP route dampening parameters. If a suppression policy for route dampening is configured, routes are preferentially matched against the suppression parameters defined in the suppression policy. If no parameter is configured, the default value of each parameter is used. The four route dampening parameters are mutually dependent. If you configure one of the parameters, the other parameters also need to be configured. When you configure BGP route dampening, the values of reuse threshold, suppress threshold, and penalty ceiling must meet the inequality of reuse threshold < suppress threshold < penalty ceiling. If Maximum suppression time obtained by using the formula of Maximum suppression time = Half life (of reachable routes) x 60 x (ln (Penalty ceiling/Reuse threshold)/ln(2)) is smaller than 1, suppression cannot be performed. Ensure that the value of the maximum suppression time is equal to or greater than 1. This means that the value of the penalty ceiling/reuse threshold must be great enough.";
                              leaf peer-type {
                                type bgp:dampening-route-ext-peer-type;
                                description
                                  "Configure the peer type.";
                              }
    
                              leaf half-life-time {
                                type uint16 {
                                  range "1..45";
                                }
                                units "min";
                                default "15";
                                description
                                  "Configure a half-life for reachable routes.";
                              }
    
                              leaf reuse {
                                type uint16 {
                                  range
                                    "1..20000";
                                }
                                default "750";
                                description
                                  "Configure a threshold for a route to be unsuppressed. If the penalty value of the route falls below the threshold, the route is reused.";
                              }
    
                              leaf suppress {
                                type uint16 {
                                  range
                                    "1..20000";
                                }
                                default "2000";
                                description
                                  "Configure a threshold for a route to be suppressed. When the penalty value of the route exceeds the suppression threshold, the route is suppressed. The configured suppression threshold must be greater than the reuse threshold.";
                              }
    
                              leaf ceiling {
                                type uint16 {
                                  range
                                    "1001..20000";
                                }
                                default "16000";
                                description
                                  "Configure the penalty ceiling. The configured threshold must be greater than the suppression threshold.";
                              }
    
                              leaf update-standard {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable update standard.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route-policy or route-filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a routing policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list dampening-route
                          }  // container dampening-routes
    
                          container nexthop-recursive-lookup {
                            description
                              "Configure next hop iteration.";
                            container common {
                              description
                                "Configure next hop iteration common options.";
                              leaf restrain {
                                type boolean;
                                default "true";
                                description
                                  "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route-policy or route-filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a routing policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // container common
    
                            container delay {
                              description
                                "Configure time of next hop change responding delay.";
                              leaf time {
                                type uint8 {
                                  range "1..100";
                                }
                                units "s";
                                description
                                  "Specify the delay in responding to the next hop change.";
                              }
    
                              leaf no-critical-event-time {
                                type uint8 {
                                  range "0..100";
                                }
                                units "s";
                                default "10";
                                description
                                  "Specify the delay in responding to the next hop change on non critical relay change event.";
                              }
                            }  // container delay
    
                            container bit-error-detection {
                              description
                                "Configure BGP bit-error detection parameters.";
                              leaf enable {
                                type boolean;
                                must
                                  "(../enable='false') or (../enable='true' and (../med or ../local-preference))";
                                default "false";
                                description
                                  "Enable/disable association between bit error events and the adjustment of route attributes.";
                              }
    
                              leaf med {
                                when
                                  "../enable='true'";
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Specify the MED adjustment for BGP routes used when a bit error event occurs.";
                              }
    
                              leaf local-preference {
                                when
                                  "../enable='true'";
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Specify the local preference adjustment for BGP routes used when a bit error event occurs.";
                              }
    
                              choice policy-type {
                                when
                                  "enable='true'";
                                description
                                  "Set route-policy or route-filter for bit-error-triggered protection switching.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of route-policy for bit-error-triggered protection switching. The MED or local preference of only the routes that match the route-policy is adjusted.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // container bit-error-detection
                          }  // container nexthop-recursive-lookup
    
                          container import-filter-policy {
                            description
                              "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                            choice ipv4-import-filter-protocol-policy-type {
                              description
                                "Set IPv4 filter protocol policy.";
                              case acl-ref {
                                description
                                  "ACL Route Policy.";
                                leaf acl-name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  description
                                    "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                                }
                              }  // case acl-ref
    
                              case ip-prefix-ref {
                                description
                                  "IP prefix Policy.";
                                leaf ipv4-prefix-filter {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Specify the IPv4 prefix list name.";
                                }
                              }  // case ip-prefix-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice ipv4-import-filter-protocol-policy-type
                          }  // container import-filter-policy
    
                          container export-filter-policy {
                            description
                              "Configure a filtering policy. It is used to filter the routes received from a peer. By default, routes are not filtered.";
                            choice ipv4-import-filter-protocol-policy-type {
                              description
                                "Set IPv4 filter protocol policy.";
                              case acl-ref {
                                description
                                  "ACL Route Policy.";
                                leaf acl-name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  description
                                    "Specify the name or number of an ACL Rule. The number value ranges from 2000 to 2999 and is used by basic ACL rules. The name must start with a letter, and the name is case-sensitive.";
                                }
                              }  // case acl-ref
    
                              case ip-prefix-ref {
                                description
                                  "IP prefix Policy.";
                                leaf ipv4-prefix-filter {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Specify the IPv4 prefix list name.";
                                }
                              }  // case ip-prefix-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice ipv4-import-filter-protocol-policy-type
                          }  // container export-filter-policy
    
                          container slow-peer {
                            description
                              "Configure peer advertising routes slowly.";
                            leaf detection {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable detect slow peers.";
                            }
    
                            leaf detection-threshold {
                              type uint16 {
                                range
                                  "120..3600";
                              }
                              units "s";
                              default "300";
                              description
                                "Specify the time in seconds lagging behind average when a peer is determined to be a slow peer.";
                            }
    
                            leaf absolute-detection {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable absolute-detect slow peers.";
                            }
    
                            leaf absolute-detection-threshold {
                              type uint16 {
                                range "3..3600";
                              }
                              units "s";
                              default "9";
                              description
                                "Specify the packet send delay time in second when a peer is determined to be a slow peer.";
                            }
                          }  // container slow-peer
                        }  // container ipv4-vpn
    
                        container ipv6-unicast {
                          when
                            "../type = 'ipv6uni' and ../../../../../../ni:name!='_public_'";
                          must
                            "../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                          description
                            "Configure IPv6 unicast options.";
                          container common {
                            description
                              "Configure IPv6 unicast common options.";
                            leaf route-select-delay {
                              type uint16 {
                                range "0..3600";
                              }
                              units "s";
                              default "0";
                              description
                                "Route selection delay.";
                            }
    
                            choice reflector-type {
                              description
                                "Set IPv4 address or id.";
                              case address {
                                description
                                  "IPv4 address.";
                                leaf reflector-cluster-ipv4 {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Set a cluster ID. The value is expressed in the format of an IPv4 address. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                                }
                              }  // case address
    
                              case id {
                                description
                                  "Set value.";
                                leaf reflector-cluster-id {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Set a cluster ID. Configuring multiple RRs in a cluster can enhance the stability of the network. If a cluster has more than one RR, select this option to set the same cluster ID for all the RRs to avoid routing loops. To allow clients to receive routes from RRs, ensure that the cluster ID of the RRs is different from the router ID of any client. If the cluster ID of the RRs is the same as the router ID of a client, the client will discard received routes.";
                                }
                              }  // case id
                            }  // choice reflector-type
    
                            leaf reflect-change-path {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable an RR to use an export policy to change route AS_Path.";
                            }
    
                            leaf always-compare-med {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to compare the MEDs of routes from peers in different ASs in route selection. If
     there are multiple reachable routes to the same destination, the route with the smallest MED is preferred. Do not use this option unless different ASs use the same IGP and route selection mode.";
                            }
    
                            leaf default-med {
                              type uint32;
                              default "0";
                              description
                                "Specify the Multi-Exit-Discriminator (MED) of BGP routes. The value is an integer. This value is valid only for the imported routes and BGP summarized routes on the local router.";
                            }
    
                            leaf nexthop-third-party {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP third-party next hop.";
                            }
    
                            leaf default-local-preference {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              default "100";
                              description
                                "The local preference of BGP routes.";
                            }
    
                            leaf default-route-import {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to import default routes into the BGP routing table. Default-route-imported must be used with import-routes so that default routes can be imported to the BGP routing table. If only import-routes is used, no default routes can be added to the BGP routing table. In addition, default-route-imported can only import the default routes in the routing table into the BGP routing table.";
                            }
    
                            leaf routerid-neglect {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to ignore router IDs when selecting the optimal route. Comparing router IDs is the last resort in route selection. This means that if one optimal route must be selected and no other parameters can be used to break the tie, router IDs can be used. If this option is selected, the first received route will be selected as the optimal route, and BGP will ignore the router ID and peer address in route selection.";
                            }
    
                            leaf reflect-between-client {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable route reflection between clients. If clients of a route reflector (RR) are fully meshed, you can disable route reflection among clients to reduce the cost.";
                            }
    
                            leaf ext-community-change {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to change the extended community attribute.";
                            }
    
                            leaf active-route-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to advertise the optimal routes in the RM module to peers.";
                            }
    
                            leaf ebgp-interface-sensitive {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the function of EBGP interface fast sensing. If this function is enabled, the sessions of directly connected EBGP peers are immediately cleared from the associated interface when the interface becomes down.";
                            }
    
                            leaf router-id-auto-select {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable router ID auto select. If a BGP VPN instance is not enabled to select a router ID, a router ID can be configured for the BGP VPN instance. If no router ID is configured for the BGP VPN instance, the BGP VPN instance inherits the router ID of the public network instance. If a BGP VPN instance is enabled to select a router ID, it uses the address of an interface bound to a VPN as the router ID based on the following rules:
    1. If Loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the Loopback interfaces is selected as the router ID.
    2. If there is no Loopback interface configured with an IP address, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.";
                            }
    
                            leaf router-id {
                              when
                                "../router-id-auto-select = 'false'";
                              type inet:ipv4-address-no-zone;
                              description
                                "ID of a router that is in IPv4 address format. Certain dynamic routing protocols require a router ID. If no router ID is specified for a router when these protocols are enabled, the router ID in the RM module is used by default. The default router ID in the RM module is 0.0.0.0 when the router is not configured with any interface.
    
     The rules for selecting a router ID are as follows:
     1. If a router ID is set through this configuration, the set router ID is used. If the router ID is not set, a router ID is selected according to the following rules:
     (1) If loopback interfaces configured with IP addresses exist, the largest IP address among the IP addresses of the loopback interfaces is selected as the router ID.
     (2) If no loopback interface configured with an IP address exists, the largest IP address among the IP addresses of other interfaces is selected as the router ID, regardless of whether the interface is Up.
     The router ID is reselected only when the interface address that is selected as the router ID is deleted or changed. The router ID is not reselected in any of the following cases:
     a. The interface is Down.
     b. A loopback interface is configured when the IP address of a non-loopback interface is selected as the router ID.
     c. A larger IP address of an interface is configured.
     2. Each VPN instance selects the router ID from the addresses of the interfaces of the VPN instance according to the preceding rules.
     3. When both the AMB and SMB exist on the router, the system backs up the router ID set through the related command and the router ID that is selected from IP addresses of the interfaces. After the active/standby switchover is performed, the system checks the validity of the router ID selected from the interface addresses. If the router ID is invalid, the system reselects a router ID.";
                            }
    
                            leaf supernet-unicast-advertise {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to advertise supernet unicast routes.";
                            }
    
                            leaf bestroute-med-plus-igp {
                              type boolean;
                              must
                                "not(../bestroute-igp-metric-ignore='true' and ../bestroute-med-plus-igp='true')";
                              default "false";
                              description
                                "Enable/disable the function to add the IGP cost to the next-hop destination to the MED before comparing MED values for path selection.";
                            }
    
                            leaf bestroute-med-multiplier {
                              when
                                "../bestroute-med-plus-igp='true'";
                              type uint16 {
                                range "1..1000";
                              }
                              default "1";
                              description
                                "Value of med product factor.";
                            }
    
                            leaf bestroute-igp-multiplier {
                              when
                                "../bestroute-med-plus-igp='true'";
                              type uint16 {
                                range "1..1000";
                              }
                              default "1";
                              description
                                "Value of IGP cost product factor.";
                            }
    
                            leaf bestroute-igp-metric-ignore {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to ignore the IGP cost of each BGP route to the next hop in route selection. By default, a BGP route with a smaller IGP cost to the next hop is preferred.";
                            }
    
                            leaf bestroute-router-id-prior-clusterlist {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP to compare originator before clusterlist in route selection.";
                            }
    
                            leaf bestroute-med-none-as-maximum {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable BGP considers its MED as the largest MED value (4294967295). If a route does not carry MED, BGP considers its MED as the default value (0) during route selection.";
                            }
    
                            leaf maximum-load-balancing-ibgp {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "not (../maximum-load-balancing>1 or ../maximum-load-balancing-eibgp ) or ../maximum-load-balancing-ibgp=1";
                              default "1";
                              description
                                "Specify the maximum number of equal-cost IBGP routes. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf maximum-load-balancing-ebgp {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "not (../maximum-load-balancing>1 or ../maximum-load-balancing-eibgp) or ../maximum-load-balancing-ebgp=1";
                              default "1";
                              description
                                "Specify the maximum number of equal-cost EBGP routes. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf bestroute-as-path-ignore {
                              type boolean;
                              must
                                "../bestroute-as-path-ignore = 'false' or ../load-balanc-as-path-ignore ='false'";
                              default "false";
                              description
                                "Enable/disable BGP to ignore the AS_Path attribute when selecting the optimal route. By default, BGP uses the AS_Path attribute as one of route selection rules, and a route with a shorter AS_Path is preferred. After bestroute-as-path-ignore is selected, BGP does not compare the AS_Path length.";
                            }
    
                            leaf load-balanc-as-path-ignore {
                              type boolean;
                              must
                                "../load-balanc-as-path-ignore ='false' or (../load-balanc-as-path-relax ='false' and ../bestroute-as-path-ignore ='false')";
                              default "false";
                              description
                                "Enable/disable BGP to ignore the AS_Path of each BGP route to the next hop when selecting routes for load balancing. By default, only the routes with the same AS_Path can participate in load balancing.";
                            }
    
                            leaf load-balanc-as-path-relax {
                              type boolean;
                              must
                                "../load-balanc-as-path-relax ='false' or ../load-balanc-as-path-ignore ='false'";
                              default "false";
                              description
                                "Enable/disable BGP to ignore comparison of AS_Path attributes with the same length. By default, only the routes with the same AS_Path can participate in load balancing.";
                            }
    
                            leaf maximum-load-balancing {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "not (../maximum-load-balancing-ibgp>1 or ../maximum-load-balancing-ebgp>1 or ../maximum-load-balancing-eibgp) or ../maximum-load-balancing=1";
                              default "1";
                              description
                                "Specify the maximum number of equal-cost routes in the BGP routing table. The value can be 1 or an integer greater than 1. The value depends on the associated license. Equal-cost BGP routes can be generated for load balancing only when the BGP routes meet the first nine rules of the route-selection policy and have the same AS-Path attribute. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf ebgp-ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing-ebgp and ../maximum-load-balancing-ebgp>1";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost EBGP routes is changed. When equal-cost EBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost EBGP routes is greater than 1.";
                            }
    
                            leaf ibgp-ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing-ibgp and ../maximum-load-balancing-ibgp>1";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost IBGP routes is changed. When equal-cost IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost IBGP routes is greater than 1.";
                            }
    
                            leaf ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing and ../maximum-load-balancing>1";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost routes is changed. When equal-cost BGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised. This function can be enabled only when the maximum number of equal-cost BGP routes is greater than 1.";
                            }
    
                            leaf maximum-load-balancing-eibgp {
                              type uint16 {
                                range "1..65535";
                              }
                              must
                                "../maximum-load-balancing-ibgp=1 and ../maximum-load-balancing-ebgp=1 and ../maximum-load-balancing=1";
                              description
                                "Specify the maximum number of equal-cost EBGP routes and IBGP routes. After the attribute is set, load balancing is performed among equal-cost BGP VPN routes, regardless of the route type, EBGP or IBGP. The value range and default value are controlled by the PAF.";
                            }
    
                            leaf eibgp-ecmp-nexthop-changed {
                              when
                                "../maximum-load-balancing-eibgp";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable next hop of equal-cost EBGP and IBGP routes is changed. When equal-cost EBGP and IBGP routes are load-balancing traffic, the next hop of these routes is changed to a local interface before these routes are advertised.";
                            }
    
                            leaf import-rib-nexthop-invariable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable the function to advertise the route without modifying the next-hop.";
                            }
    
                            leaf determin-med {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable deterministic MED so that the route selection result is relevant to the sequence in which routes are received.";
                            }
                          }  // container common
    
                          container aggregate-default-route {
                            description
                              "Configure aggregate default route.";
                            leaf origin-ipv6-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the name of an IPv6 prefix list for a summary default route. Only the name of an IPv6 prefix list can be configured in a BGP IPv6 address family.";
                            }
    
                            leaf attribute-policy {
                              when
                                "../origin-ipv6-prefix";
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Specify an attribute policy of a summary default route.";
                            }
                          }  // container aggregate-default-route
    
                          container aggregate-routes {
                            description
                              "List of summarized routes.";
                            list aggregate-route {
                              key "address mask-length";
                              description
                                "Configure a summarized route in the BGP routing table. The local outbound interface of the summarized route is Null0. When another router receives the route, the route adds an outbound interface to the route. By default, route summarization is not performed. If the Origin attributes of the specific routes for the route summarization are different, the Origin attribute of the summarized route is that with the highest priority. Origin attributes are arranged in the priority order of complete > egp > igp. A summarized route carries the community attribute of each specific route.";
                              leaf address {
                                type inet:ip-address-no-zone;
                                description
                                  "Specify the IPv4 address or IPv6 address of a summarized route. Only IPv4 summarized routes can be configured in the IPv4 address family and only IPv6 summarized routes can be configured in the IPv6 address family.";
                              }
    
                              leaf mask-length {
                                type uint8 {
                                  range "1..128";
                                }
                                description
                                  "Specify the mask length of a summarized address.";
                              }
    
                              leaf as-set {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the generation of routes with the AS-SET attribute. This option can be used to create a summarized route. The AS_Path attribute of the summarized route contains the AS-Path attributes of the specific routes for the route summarization. Exercise caution when using this option if multiple AS_Paths need to be summarized to prevent route flapping.";
                              }
    
                              leaf detail-suppressed {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable detail-suppressed. Suppress the advertisement of specific routes for the route summarization. Only the summarized route is advertised.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf attribute-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify an attribute of summarized routes. If apply as-path is used to configure the AS_Path attribute that is used in the route Summarization policy, and the as-set keyword is set, the AS_Path attribute in the policy does not take effect. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                  }
    
                                  leaf origin-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a policy for generating summarized routes. Summarized routes are generated only when the routes match route-policy. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                  }
    
                                  leaf suppress-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify a policy for suppressing the advertisement of specified routes. The routes matching the policy are not advertised, and other routes are advertised. This parameter and any of the following parameters overwrite each other: suppressFilter, originFilter, and attributeFilter.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf attribute-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf attribute-filter-parameter {
                                    when
                                      "../attribute-filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
    
                                  leaf origin-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf origin-filter-parameter {
                                    when
                                      "../origin-filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
    
                                  leaf suppress-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf suppress-filter-parameter {
                                    when
                                      "../suppress-filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list aggregate-route
                          }  // container aggregate-routes
    
                          container import-routes {
                            description
                              "List of imported routes.";
                            list import-route {
                              key "protocol process-id";
                              description
                                "Configure route import. Routes of other protocol types can be imported by BGP. By default, BGP does not import routes of other protocol types.";
                              leaf protocol {
                                type bgp:ipv6-import-route-protocol-type;
                                description
                                  "Routing protocol from which routes can be imported.";
                              }
    
                              leaf process-id {
                                type uint32 {
                                  range
                                    "0..4294967295";
                                }
                                description
                                  "Process ID of an imported routing protocol. The process ID is 0, if the imported routing protocol is direct routes, static routes, UNRs, or OP-routes. The process ID must be specified range from 1 to 4294967295, if the imported routing protocol is ISIS, RIPng, or OSPFv3.";
                              }
    
                              leaf med {
                                type uint32;
                                description
                                  "Specifies the MED metric of the imported route.";
                              }
    
                              choice policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "When routes are imported from other routing protocols, the route-policy filter can be used to filter the routes and change route attributes.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list import-route
                          }  // container import-routes
    
                          container nexthop-recursive-lookup {
                            description
                              "Configure next hop iteration.";
                            container common {
                              description
                                "Configure next hop iteration common options.";
                              leaf restrain {
                                type boolean;
                                default "true";
                                description
                                  "Enable/disable the function to restrain next hop iteration in case of next hop flapping.";
                              }
    
                              leaf route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Specify the name of a routing policy.";
                              }
                            }  // container common
    
                            container delay {
                              description
                                "Configure time of next hop change responding delay.";
                              leaf time {
                                type uint8 {
                                  range "1..100";
                                }
                                units "s";
                                description
                                  "Specify the delay in responding to the next hop change.";
                              }
    
                              leaf no-critical-event-time {
                                type uint8 {
                                  range "0..100";
                                }
                                units "s";
                                default "10";
                                description
                                  "Specify the delay in responding to the next hop change on non critical relay change event.";
                              }
                            }  // container delay
                          }  // container nexthop-recursive-lookup
    
                          container network-routes {
                            description
                              "List of network routes.";
                            list network-route {
                              key "address mask-length";
                              description
                                "Configure a network route in the BGP routing table.";
                              leaf address {
                                type inet:ipv6-address-no-zone;
                                description
                                  "Specify the IP address advertised by BGP. An IPv6 routes can be configured in the IPv6 address family. Note: During the configuration of a network route, the IP address is adjusted based on the mask. It is recommended that you click Synchronize All after creating a network route.";
                              }
    
                              leaf mask-length {
                                type uint8 {
                                  range "0..128";
                                }
                                description
                                  "Specify the mask length of an IP address.";
                              }
    
                              choice policy-type {
                                description
                                  "Specify the route-policy or filter for route advertisement.";
                                case rtp-ref {
                                  description
                                    "Specify the route policy.";
                                  leaf policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the route policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  leaf filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Specify a route-filter name.";
                                  }
    
                                  leaf filter-parameter {
                                    when
                                      "../filter-name";
                                    type xpl:filter-parameter-type;
                                    description
                                      "Specify a route-filter parameter.";
                                  }
                                }  // case xpl-ref
                              }  // choice policy-type
                            }  // list network-route
                          }  // container network-routes
    
                          container advertise-route-to-evpns {
                            description
                              "Configure advertise route protocol.";
                            list advertise-route-to-evpn {
                              key "protocol";
                              description
                                "Configure the advertise route protocol.";
                              leaf protocol {
                                type enumeration {
                                  enum "all" {
                                    value 0;
                                    description
                                      "Advertise all the types of route protocol.";
                                  }
                                }
                                description
                                  "Route protocol.";
                              }
    
                              leaf import-multipath {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable route import from multiple paths.";
                              }
    
                              leaf include-local-cross {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable local cross route to advertise l2vpn evpn.";
                              }
    
                              leaf advertise-route-mode {
                                type enumeration {
                                  enum "all" {
                                    value 0;
                                    description
                                      "All:";
                                  }
                                  enum "best" {
                                    value 1;
                                    description
                                      "Best:";
                                  }
                                  enum "valid" {
                                    value 2;
                                    description
                                      "Valid:";
                                  }
                                }
                                default "all";
                                description
                                  "VPN advertise route mode to evrf.";
                              }
                            }  // list advertise-route-to-evpn
                          }  // container advertise-route-to-evpns
    
                          container preference {
                            description
                              "Configure parameters relating to options for BGP routes preference.";
                            choice set-value-or-policy {
                              default
                                "set-value";
                              description
                                "Set BGP routes preference by value or policy.";
                              case set-value {
                                description
                                  "Set BGP routes preference by value.";
                                leaf external {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  default "255";
                                  description
                                    "Set the protocol priority of EBGP routes. The value is an integer. An EBGP route is the optimal route learned from a peer outside the local AS.";
                                }
    
                                leaf internal {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  default "255";
                                  description
                                    "Set the protocol priority of IBGP routes. The value is an integer. An IBGP route is a route learned from a peer inside the local AS.";
                                }
    
                                leaf local {
                                  type uint8 {
                                    range
                                      "1..255";
                                  }
                                  default "255";
                                  description
                                    "Set the protocol priority of a local BGP route. A local route refers to an automatically or manually summarized route.";
                                }
                              }  // case set-value
    
                              case rtp-ref {
                                description
                                  "Set BGP routes preference by route policy.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Specify a routing policy to filter routes so that a configured priority is applied to the routes that match the specified policy.";
                                }
                              }  // case rtp-ref
    
                              case xpl-ref {
                                description
                                  "Route filter.";
                                leaf filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route-filter name.";
                                }
    
                                leaf filter-parameter {
                                  when
                                    "../filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify a route-filter parameter.";
                                }
                              }  // case xpl-ref
                            }  // choice set-value-or-policy
                          }  // container preference
                        }  // container ipv6-unicast
                      }  // list af
                    }  // container afs
    
                    container vpn-as-number {
                      when
                        "../../../../ni:name!='_public_'";
                      description
                        "Configure BGP vpn as-number.";
                      leaf local-ipv4 {
                        type as-number-validate;
                        description
                          "IPv4 as-number.";
                      }
    
                      leaf local-ipv6 {
                        type as-number-validate;
                        description
                          "IPv6 as-number.";
                      }
                    }  // container vpn-as-number
    
                    container peer-groups {
                      description
                        "List of BGP peer groups. The BGP peer groups can help you simplify the configurations. If you want to perform the same configuration for several peers, you can create a peer group and then configure the peer group. After you add these peers to the peer group, all these peers will have the same configurations as the peer group.";
                      list peer-group {
                        key "name";
                        description
                          "Configure information about a BGP peer group.";
                        leaf name {
                          type string {
                            length "1..47";
                            pattern '([^\? ]+)';
                          }
                          description
                            "Specify the name of a peer group. The value is a string of characters, spaces not supported.";
                        }
    
                        leaf type {
                          ext:operation-exclude "update" {
                            description "The node cannot be modified, when node is already configured.";
                          }
                          type group-type;
                          mandatory true;
                          description
                            "Specify the type of a peer group. The value can be IBGP or EBGP.The object cannot be modified.";
                        }
    
                        leaf local-if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points: 1. The address of the loopback interface of the BGP peer must be reachable. 2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                        }
    
                        leaf local-if-address {
                          type inet:ip-address-no-zone;
                          description
                            "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points:
    1. The address of the loopback interface of the BGP peer must be reachable.
    2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                        }
    
                        leaf password-type {
                          type bgp:password-type;
                          must
                            "not((../password-type and ../password-type!='null') and (../key-chain-name or ../tcp-ao-name))";
                          must
                            "(not(../password-type and ../password-type!='null') and not(../password-text)) or (../password-type and ../password-type!='null' and ../password-text)";
                          default "null";
                          description
                            "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. Plaintexts and ciphertexts are supported.";
                        }
    
                        leaf password-text {
                          when
                            "../password-type and ../password-type!='null'";
                          type pub-type:password-extend;
                          mandatory true;
                          description
                            "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. The character string in a password identifies the contents of the password, spaces not supported. The TCP connection can be established only when the same MD5 authentication password is set on both ends. If a plaintext is used, the maximum password length is 255. If a ciphertext is used, the maximum password length is 432. If the length is set to 0, no password is set.";
                        }
    
                        leaf key-chain-name {
                          ext:case-sensitivity "lower-only";
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          must
                            "not(../password-type!='null' or ../tcp-ao-name)";
                          description
                            "Specify the Keychain authentication name used when BGP peers establish a TCP connection. The value is a string, spaces not supported. By default, the Keychain authentication is not configured. Keychain authentication mode and password authentication mode are mutually exclusive. Configuring Keychain authentication can enhance the security of the TCP connections between BGP peers. Keychain authentication using the same encryption algorithm and password must be configured on the two ends of BGP peers to establish a TCP connection and exchange BGP packets. Before configuring BGP Keychain authentication, you need to configure Keychain according to keychain name. Otherwise, the TCP connections between the BGP peers cannot be established.";
                        }
    
                        leaf tcp-ao-name {
                          type leafref {
                            path "/socket:socket/socket:tcp-aos/socket:tcp-ao/socket:name";
                          }
                          must
                            "not(../password-type!='null' or ../key-chain-name)";
                          description
                            "Specify TCP-AO authentication for establishing the TCP connection between BGP peers.";
                        }
    
                        leaf description {
                          type string {
                            length "1..255";
                            pattern '([^?]*)';
                          }
                          description
                            "Specify the description of a peer group. The value is a string, which can be letters or digits, spaces supported. By default, no description is configured.";
                        }
    
                        leaf group-as {
                          when
                            "not(../type='ibgp')";
                          type as-number-validate;
                          description
                            "Specify the AS number of a peer group. The AS number is in either a 2-byte or 4-byte format.
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.";
                        }
    
                        leaf ebgp-max-hop {
                          when "../type='ebgp'";
                          type uint32 {
                            range "1..255";
                          }
                          must
                            "not(../valid-ttl-hops) or (../valid-ttl-hops>=1 and not(../valid-ttl-hops>255) and ../ebgp-max-hop=1)";
                          default "1";
                          description
                            "Maximum number of hops in an indirect EBGP connection. By default, EBGP connections can be established only between directly connected peers. The function must be configured on both ends.";
                        }
    
                        leaf valid-ttl-hops {
                          type uint16 {
                            range "1..255";
                          }
                          must
                            "not(../ebgp-max-hop and ../ebgp-max-hop>1)";
                          description
                            "Enable GTSM on a peer or peer group. The valid-TTL-Value parameter is used to specify the number of TTL hops to be detected. If the value is configured as hops, the valid TTL range of the detected packet is [255-hops+1, 255].";
                        }
    
                        leaf tracking-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable peer tracking, After peer tracking is enabled, the device can fast detect the unreachability of a peer and reset the session.";
                        }
    
                        leaf tracking-delay-time {
                          when
                            "../tracking-enable='true'";
                          type uint16;
                          units "s";
                          default "0";
                          description
                            "Specify the delay to reset the session.";
                        }
    
                        leaf conventional {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable general router functions on peers. In conventional mode, not all the extended router functions, such as, route refreshing, GR, and multi-address family negotiation, are available. Therefore, the router of a new version can be compatible with the routers of earlier versions.";
                        }
    
                        leaf route-refresh {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to advertise Refresh messages to peers.";
                        }
    
                        leaf four-byte-as {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to advertise routes carrying 4-byte AS numbers to peers. After the 4-byte AS number function is disabled, Open packets will not carry 4-byte AS number capability flag, and peer ends will not know that local ends have the 4-byte AS number function. The 4-byte AS number function cannot be disabled from peers (peer groups) if a 4-byte AS number, fake AS number, or confederation ID is configured on a router and the AS number of a peer is 4-byte. If the 4-byte AS number function is disabled in such a situation, BGP sessions may fail to be established, and route transmission may be affected.";
                        }
    
                        leaf ignore {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to tear down sessions between peers and clear all related routing information.";
                        }
    
                        leaf connect-mode {
                          type connect-mode;
                          default "null";
                          description
                            "The value can be Connect-only, Listen-only, or Both. If the value is Connect-only, the specified peer or peer group only initiatively sends connection requests, instead of listening to connection requests. If the value is Listen-only, the specified peer or peer group only listens to connection requests, instead of initiatively sending connection requests. If the value is Both, the specified peer or peer group not only initiatively sends connection requests, but also listens to connection requests. The default value is Both.";
                        }
    
                        leaf log-change {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to record the session status and events of the specified peer or peer group.";
                        }
    
                        leaf check-first-as {
                          when "../type='ebgp'";
                          type peer-cap-config-state;
                          default "default";
                          description
                            "Check the first AS in the AS_Path of the update messages from EBGP peers.";
                        }
    
                        leaf memory-priority {
                          type memory-priority;
                          default "medium";
                          description
                            "Set a priority that determines the disconnection order of each BGP peer relationship in a peer group if memory overload occurs.";
                        }
    
                        leaf oscillation-dampening {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to suppress the establishment of a specified peer group's peer relationships that flap continuously. By default, the capability is enabled.";
                        }
    
                        container fake-as-parameter {
                          when
                            "../../../../../../ni:name!='_public_'";
                          description
                            "Configure BGP fake-as parameters.";
                          leaf fake-as {
                            when
                              "../../bgp:type='ebgp'";
                            type bgp:as-number-validate;
                            description
                              "Fake AS number that is specified for a local peer. By default, a peer uses the actual AS number of the local end.
    An AS number can be in either two-byte format or four-byte format:
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.";
                          }
    
                          leaf dual-as {
                            when "../fake-as";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to the remote EBGP peer can use the actual or fake AS number when specifying the AS number for a local peer. The local peer uses the fake and actual AS numbers to establish a BGP peer relationship with the remote end and identifies the AS number configured by the remote end through the error code (OPEN Message Error) and sub-error code (Bad Peer AS) of the Notification message from the remote end.";
                          }
    
                          leaf prepend-global-as {
                            when "../fake-as";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to add the global AS number to the Update packets to be advertised.";
                          }
    
                          leaf prepend-fake-as {
                            when "../fake-as";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to add the Fake AS number to received Update packets.";
                          }
                        }  // container fake-as-parameter
    
                        container timer {
                          description
                            "Configure BGP peer timer parameters.";
                          leaf keep-alive-time {
                            type uint32 {
                              range "0..21845";
                            }
                            units "s";
                            must
                              "(../keep-alive-time != 0 and (../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)";
                            default "60";
                            description
                              "If the value of a timer changes, the BGP peer relationship between the routers is disconnected. This is because the peers need to re-negotiate the Keepalive time and hold time. Therefore, confirm the action before you change the value of the timer. The Keepalive time should be at least three times of the hold time.";
                          }
    
                          leaf hold-time {
                            type uint32 {
                              range
                                "0 | 3..65535";
                            }
                            units "s";
                            must
                              "(((../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)) and ../hold-time>=../min-hold-time";
                            default "180";
                            description
                              "Hold time. When setting keepalive-time and hold-time, note the following:
    1. The values of keepalive-time and hold-time cannot both be 0. Otherwise, the BGP timer becomes invalid. That is, BGP does not detect link faults according to the timer.
    2. The value of hold-time is much greater than that of keepalive-time, such as, keepalive 1 and hold 65535. If the value of hold-time is too large, BGP cannot detect link faults timely.
    The priority of a timer is lower than that of a peer timer.
    After a connection is established between peers, the values of keepalive-time and hold-time are negotiated by the peers. The smaller value of hold-time contained in Open packets of both peers is taken as the value of hold-time. The smaller value of the locally set value of keepalive-time and one third of the value of hold-time is taken as the value of keepalive-time.";
                          }
    
                          leaf min-hold-time {
                            type uint32 {
                              range
                                "0 | 20..65535";
                            }
                            units "s";
                            must
                              "../hold-time>=../min-hold-time";
                            default "0";
                            description
                              "The default value of zero means that the minimum hold time check does not take effect. If the value is changed, the new value takes effect since the next peer relationship establishment. During the peer relationship establishment, the local device checks the hold time of the remote end. If the hold time is less than the minimum hold time, the local device sends an error packet with error code 02 and subcode 06, and the peer relationship fails to be established.";
                          }
    
                          leaf connect-retry-time {
                            type uint16 {
                              range "1..65535";
                            }
                            units "s";
                            default "32";
                            description
                              "ConnectRetry interval.";
                          }
                        }  // container timer
    
                        container bfd-parameter {
                          description
                            "Configure BFD.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BFD.";
                          }
    
                          choice mode-type {
                            description
                              "Set bfd mode.";
                            case single {
                              description
                                "Single hop mode.";
                              leaf single-hop {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "The single hop mode is preferred during the BFD session establishment between IBGP peers.";
                              }
    
                              leaf compatible {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "Compatible.";
                              }
                            }  // case single
    
                            case link {
                              description
                                "Per-link-echo mode.";
                              leaf per-link-echo {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "The per-link one-arm-echo mode is preferred during the BFD session establishment between IBGP peers.";
                              }
                            }  // case link
    
                            case one-arm-echo {
                              description
                                "One-arm-echo mode.";
                              leaf one-arm-echo {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "The one arm echo mode is preferred during the BFD session establishment between BGP peers.";
                              }
                            }  // case one-arm-echo
                          }  // choice mode-type
    
                          leaf multiplier {
                            type uint32 {
                              range "3..50";
                            }
                            default "3";
                            description
                              "Specify the detection multiplier.";
                          }
    
                          leaf min-rx-interval {
                            type uint32 {
                              range "3..20000";
                            }
                            units "ms";
                            description
                              "Specify the minimum interval at which BFD packets are received. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf min-tx-interval {
                            type uint32 {
                              range "3..20000";
                            }
                            units "ms";
                            description
                              "Specify the minimum interval at which BFD packets are sent. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf valid-ttl-hops {
                            type uint8 {
                              range "1..255";
                            }
                            description
                              "Specify the valid TTL hops value.";
                          }
                        }  // container bfd-parameter
    
                        container graceful-restart {
                          description
                            "Configure graceful restart.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable graceful restart capability.";
                          }
    
                          leaf time-wait-for-rib {
                            type uint32 {
                              range "3..3000";
                            }
                            units "s";
                            default "600";
                            description
                              "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                          }
    
                          leaf restart-time {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "150";
                            description
                              "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                          }
    
                          leaf peer-reset {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable reseting BGP peer graceful.";
                          }
                        }  // container graceful-restart
    
                        container local-graceful-restart {
                          description
                            "Configure local graceful restart.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable graceful restart capability.";
                          }
    
                          leaf time-wait-for-rib {
                            type uint32 {
                              range "3..3000";
                            }
                            units "s";
                            default "600";
                            description
                              "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                          }
    
                          leaf restart-time {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            default "150";
                            description
                              "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                          }
                        }  // container local-graceful-restart
    
                        container afs {
                          description
                            "List of all peer groups that are enabled in a specified address family.";
                          list af {
                            key "type";
                            description
                              "Configure peer group enabled in a specified address family.";
                            leaf type {
                              type bgp:instance-group-af-type;
                              must
                                "../../../../../afs/af[type = current()]";
                              description
                                "Address family type of a BGP instance.";
                            }
    
                            container ipv4-unicast {
                              when
                                "../type = 'ipv4uni' and ../../../../../../../../ni:name!='_public_'";
                              must
                                "../../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                              description
                                "Configure IPv4 unicast options.";
                              leaf reflect-client {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                              }
    
                              leaf label-route-capability {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable a device to exchange labeled routes.";
                              }
    
                              leaf check-tunnel-reachable {
                                when
                                  "../label-route-capability='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable tunnel reachability check.";
                              }
    
                              leaf nexthop-configure {
                                type vrf-nexthop-configuration-type;
                                description
                                  "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNv6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                              }
    
                              choice import-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf import-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container import-filter {
                                    description
                                      "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an import route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // container import-filter
                                }  // case xpl-ref
                              }  // choice import-policy-type
    
                              choice export-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf export-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container export-filter {
                                    description
                                      "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an export route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an export route-filter parameter.";
                                    }
                                  }  // container export-filter
                                }  // case xpl-ref
                              }  // choice export-policy-type
    
                              leaf allow-as-loop {
                                type uint32 {
                                  range "1..10";
                                }
                                description
                                  "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                              }
    
                              leaf import-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf export-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf import-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                              }
    
                              leaf export-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                              }
    
                              leaf import-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the import ACL policy.";
                              }
    
                              leaf export-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the export ACL policy.";
                              }
    
                              leaf default-route-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                              }
    
                              choice default-route-advertise-policy-type {
                                description
                                  "Set default route advertise-policy.";
                                case rtp-ref {
                                  description
                                    "The default-route-advertise-policy.";
                                  leaf default-route-advertise-policy {
                                    when
                                      "../default-route-advertise='true'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a used policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "The default-route-advertise-filter.";
                                  container default-route-advertise-filter {
                                    when
                                      "../default-route-advertise='true'";
                                    description
                                      "Configure the route-filter for default route advertise.";
                                    leaf filter-name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify a route-filter name.";
                                    }
    
                                    leaf filter-parameter {
                                      when
                                        "../filter-name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify a route-filter parameter.";
                                    }
                                  }  // container default-route-advertise-filter
                                }  // case xpl-ref
                              }  // choice default-route-advertise-policy-type
    
                              leaf default-route-match-mode {
                                when
                                  "../default-route-advertise='true'";
                                type cra-match-mode;
                                default "null";
                                description
                                  "Configure the matching mode of default route advertisement, which can be disabling of route advertisement conditions, enabling of all route advertisement conditions, and enabling of part route advertisement conditions. Enabling of all route advertisement conditions indicates that a default route can be advertised only when it matches all the conditions. Enabling of part route advertisement conditions indicates that a default route can be advertised only when it matches one condition.";
                              }
    
                              leaf route-update-interval {
                                ext:dynamic-default;
                                type uint16 {
                                  range "0..600";
                                }
                                units "s";
                                description
                                  "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                              }
    
                              leaf preferred-value {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                default "0";
                                description
                                  "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                              }
    
                              leaf substitute-as-enable {
                                when
                                  "../../../../bgp:type='ebgp'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                              }
    
                              leaf soo {
                                type string {
                                  length "3..21";
                                }
                                description
                                  "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                              }
    
                              leaf keep-all-routes {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                              }
    
                              leaf load-balancing-enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable a neighbour to participate in load balancing.";
                              }
    
                              choice load-balancing-ignore-as-type {
                                description
                                  "Set load balancing as path type.";
                                case as-attribute {
                                  description
                                    "Ignore the as-path attribute.";
                                  leaf load-balancing-as-path-ignore {
                                    when
                                      "../load-balancing-enable='true'";
                                    type empty;
                                    description
                                      "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                  }
                                }  // case as-attribute
    
                                case same-length-as-attribute {
                                  description
                                    "Ignore comparison of as-path attributes with the same length.";
                                  leaf load-balancing-as-path-relax {
                                    when
                                      "../load-balancing-enable='true'";
                                    type empty;
                                    description
                                      "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                  }
                                }  // case same-length-as-attribute
                              }  // choice load-balancing-ignore-as-type
    
                              leaf update-group-independent {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the peer which can reside in an independent peer group.";
                              }
    
                              leaf advertise-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the community attribute to a peer or a peer group.";
                              }
    
                              leaf advertise-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the extended community attribute to a peer or peer group.";
                              }
    
                              leaf discard-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                              }
    
                              leaf advertise-large-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                              }
    
                              container default-route-match-conditions {
                                when
                                  "../default-route-match-mode and ../default-route-match-mode!='null'";
                                description
                                  "List of condition matching to filter the default routes to be advertised. The value takes effect only when the default route matching mode is not null and more than one IPv4 default route matching condition lists are configured.";
                                list default-route-match-condition {
                                  key "address mask";
                                  min-elements
                                    1;
                                  max-elements
                                    4;
                                  description
                                    "Configure the matching condition for default route advertisement.";
                                  leaf address {
                                    type inet:ipv4-address-no-zone;
                                    description
                                      "Configure a prefix that is used to match default routes.";
                                  }
    
                                  leaf mask {
                                    type uint32 {
                                      range
                                        "0..32";
                                    }
                                    description
                                      "Configure a mask that is used to match default routes.";
                                  }
                                }  // list default-route-match-condition
                              }  // container default-route-match-conditions
    
                              container route-limit {
                                description
                                  "Configure parameters of routes limited from this peer.";
                                leaf number {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Configure the maximum number of routes that can be accepted from a peer.";
                                }
    
                                leaf accept-prefix {
                                  when
                                    "../number";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                                }
    
                                leaf percent {
                                  when
                                    "../number";
                                  type uint8 {
                                    range
                                      "1..100";
                                  }
                                  default "75";
                                  description
                                    "Specify the percentage of routes when a router starts to generate an alarm.";
                                }
    
                                leaf type {
                                  when
                                    "../number";
                                  type bgp:route-limit-type;
                                  must
                                    "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                  default
                                    "noparameter";
                                  description
                                    "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                                }
    
                                leaf idle-timeout {
                                  when
                                    "../type='idle-timeout'";
                                  type uint16 {
                                    range
                                      "1..1200";
                                  }
                                  units "min";
                                  description
                                    "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                                }
                              }  // container route-limit
    
                              container public-as-only {
                                description
                                  "Configure BGP Remove private AS number from outbound updates parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove AS numbers except peer AS number from outbound updates.";
                                  case all {
                                    description
                                      "Remove all private AS numbers.";
                                    leaf force {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case all
    
                                  case left-most {
                                    description
                                      "Remove the left-most private AS numbers.";
                                    leaf limited {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case left-most
                                }  // choice remove-private-as
    
                                leaf replace {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                                }
    
                                leaf no-skip-as {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                                }
                              }  // container public-as-only
    
                              container public-as-only-import {
                                description
                                  "Configure BGP remove private AS number in received BGP update messages parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove private AS numbers in received BGP update messages.";
                                  case all {
                                    description
                                      "Forcibly delete all the private AS numbers in the AS_Path list.";
                                    leaf force {
                                      when
                                        "../enable = 'true'";
                                      type empty;
                                      description
                                        "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                    }
                                  }  // case all
                                }  // choice remove-private-as
                              }  // container public-as-only-import
                            }  // container ipv4-unicast
    
                            container ipv4-vpn {
                              when
                                "../type = 'ipv4vpn' and ../../../../../../../../ni:name='_public_'";
                              description
                                "Configure IPv4 vpnv4 options.";
                              leaf advertise-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the community attribute to a peer or a peer group.";
                              }
    
                              leaf reflect-client {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                              }
    
                              leaf nexthop-configure {
                                type nexthop-configuration-type;
                                description
                                  "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                              }
    
                              choice import-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf import-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container import-filter {
                                    description
                                      "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an import route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // container import-filter
                                }  // case xpl-ref
                              }  // choice import-policy-type
    
                              choice export-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf export-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container export-filter {
                                    description
                                      "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an export route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an export route-filter parameter.";
                                    }
                                  }  // container export-filter
                                }  // case xpl-ref
                              }  // choice export-policy-type
    
                              leaf allow-as-loop {
                                type uint32 {
                                  range "1..10";
                                }
                                description
                                  "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                              }
    
                              leaf aigp {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                              }
    
                              leaf add-path-mode {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type add-path-cap-type;
                                default "null";
                                description
                                  "Enable Add-Path route advertisement to a peer.";
                              }
    
                              leaf import-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf export-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf import-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                              }
    
                              leaf export-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                              }
    
                              leaf import-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the import ACL policy.";
                              }
    
                              leaf export-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the export ACL policy.";
                              }
    
                              leaf route-update-interval {
                                ext:dynamic-default;
                                type uint16 {
                                  range "0..600";
                                }
                                units "s";
                                description
                                  "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                              }
    
                              leaf preferred-value {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                default "0";
                                description
                                  "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                              }
    
                              leaf add-path-number {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type uint8 {
                                  range "2..64";
                                }
                                description
                                  "Number of Add-Path routes that can be advertised to a peer.";
                              }
    
                              leaf upe {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the peer as an underlayer PE (UPE).";
                              }
    
                              leaf advertise-best-external {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type boolean;
                                must
                                  "../reflect-client='false' or ../advertise-best-external='false'";
                                must
                                  "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                                must
                                  "not(../add-path-number and ../advertise-best-external='true')";
                                default "false";
                                description
                                  "Enable/disable the device to advertise Best External routes to peers.";
                              }
    
                              leaf keep-all-routes {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                              }
    
                              leaf update-group-independent {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the peer which can reside in an independent peer group.";
                              }
    
                              leaf origin-as-validation {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the BGP peer origin validation.";
                              }
    
                              container default-route-originates {
                                description
                                  "Configure advertised default VPNv4 routes.";
                                list default-route-originate {
                                  key "vpn-name";
                                  description
                                    "Configure advertised default VPNv4 route.";
                                  leaf vpn-name {
                                    type leafref {
                                      path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                    }
                                    must
                                      "../vpn-name!='_public_'";
                                    description
                                      "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
                                  }
                                }  // list default-route-originate
                              }  // container default-route-originates
    
                              container route-limit {
                                description
                                  "Configure parameters of routes limited from this peer.";
                                leaf number {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Configure the maximum number of routes that can be accepted from a peer.";
                                }
    
                                leaf percent {
                                  when
                                    "../number";
                                  type uint8 {
                                    range
                                      "1..100";
                                  }
                                  default "75";
                                  description
                                    "Specify the percentage of routes when a router starts to generate an alarm.";
                                }
    
                                leaf type {
                                  when
                                    "../number";
                                  type bgp:route-limit-type;
                                  must
                                    "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                  default
                                    "noparameter";
                                  description
                                    "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                                }
    
                                leaf idle-timeout {
                                  when
                                    "../type='idle-timeout'";
                                  type uint16 {
                                    range
                                      "1..1200";
                                  }
                                  units "min";
                                  description
                                    "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                                }
                              }  // container route-limit
    
                              container public-as-only {
                                description
                                  "Configure BGP Remove private AS number from outbound updates parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove AS numbers except peer AS number from outbound updates.";
                                  case all {
                                    description
                                      "Remove all private AS numbers.";
                                    leaf force {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case all
    
                                  case left-most {
                                    description
                                      "Remove the left-most private AS numbers.";
                                    leaf limited {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case left-most
                                }  // choice remove-private-as
    
                                leaf replace {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                                }
    
                                leaf no-skip-as {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                                }
                              }  // container public-as-only
    
                              container public-as-only-import {
                                description
                                  "Configure BGP remove private AS number in received BGP update messages parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove private AS numbers in received BGP update messages.";
                                  case all {
                                    description
                                      "Forcibly delete all the private AS numbers in the AS_Path list.";
                                    leaf force {
                                      when
                                        "../enable = 'true'";
                                      type empty;
                                      description
                                        "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                    }
                                  }  // case all
                                }  // choice remove-private-as
                              }  // container public-as-only-import
                            }  // container ipv4-vpn
    
                            container ipv6-unicast {
                              when
                                "../type = 'ipv6uni' and ../../../../../../../../ni:name!='_public_'";
                              must
                                "../../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                              description
                                "Configure IPv6 unicast options.";
                              leaf advertise-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the community attribute to a peer or a peer group.";
                              }
    
                              leaf advertise-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the extended community attribute to a peer or peer group.";
                              }
    
                              leaf discard-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                              }
    
                              leaf advertise-large-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                              }
    
                              leaf keep-all-routes {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                              }
    
                              leaf reflect-client {
                                when
                                  "../../../../bgp:type='ibgp'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                              }
    
                              leaf preferred-value {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                default "0";
                                description
                                  "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                              }
    
                              choice import-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf import-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container import-filter {
                                    description
                                      "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an import route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // container import-filter
                                }  // case xpl-ref
                              }  // choice import-policy-type
    
                              choice export-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf export-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container export-filter {
                                    description
                                      "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an export route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an export route-filter parameter.";
                                    }
                                  }  // container export-filter
                                }  // case xpl-ref
                              }  // choice export-policy-type
    
                              leaf allow-as-loop {
                                type uint32 {
                                  range "1..10";
                                }
                                description
                                  "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                              }
    
                              leaf import-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                              }
    
                              leaf export-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                              }
    
                              leaf import-ipv6-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf export-ipv6-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                              }
    
                              container route-limit {
                                description
                                  "Configure parameters of routes limited from this peer.";
                                leaf number {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Configure the maximum number of routes that can be accepted from a peer.";
                                }
    
                                leaf percent {
                                  when
                                    "../number";
                                  type uint8 {
                                    range
                                      "1..100";
                                  }
                                  default "75";
                                  description
                                    "Specify the percentage of routes when a router starts to generate an alarm.";
                                }
    
                                leaf type {
                                  when
                                    "../number";
                                  type bgp:route-limit-type;
                                  must
                                    "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                  default
                                    "noparameter";
                                  description
                                    "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                                }
    
                                leaf idle-timeout {
                                  when
                                    "../type='idle-timeout'";
                                  type uint16 {
                                    range
                                      "1..1200";
                                  }
                                  units "min";
                                  description
                                    "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                                }
                              }  // container route-limit
    
                              container public-as-only {
                                description
                                  "Configure BGP Remove private AS number from outbound updates parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove AS numbers except peer AS number from outbound updates.";
                                  case all {
                                    description
                                      "Remove all private AS numbers.";
                                    leaf force {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case all
    
                                  case left-most {
                                    description
                                      "Remove the left-most private AS numbers.";
                                    leaf limited {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case left-most
                                }  // choice remove-private-as
    
                                leaf replace {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                                }
    
                                leaf no-skip-as {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                                }
                              }  // container public-as-only
    
                              container public-as-only-import {
                                description
                                  "Configure BGP remove private AS number in received BGP update messages parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove private AS numbers in received BGP update messages.";
                                  case all {
                                    description
                                      "Forcibly delete all the private AS numbers in the AS_Path list.";
                                    leaf force {
                                      when
                                        "../enable = 'true'";
                                      type empty;
                                      description
                                        "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                    }
                                  }  // case all
                                }  // choice remove-private-as
                              }  // container public-as-only-import
                            }  // container ipv6-unicast
                          }  // list af
                        }  // container afs
                      }  // list peer-group
                    }  // container peer-groups
    
                    container peers {
                      description
                        "List of BGP peers.";
                      list peer {
                        key "address";
                        description
                          "Configure a single BGP peer.";
                        leaf address {
                          type inet:ip-address-no-zone;
                          description
                            "Connection address of a peer, which can be an IPv4 or IPv6 address.";
                        }
    
                        leaf remote-as {
                          ext:operation-exclude "update" {
                            description "The node cannot be modified, when node is already configured.";
                          }
                          type as-number-validate;
                          mandatory true;
                          description
                            "AS number of a peer, which must be selected or group name when creating, and which can be in either two-byte format or four-byte format:
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.
    The object cannot be modified.";
                        }
    
                        leaf group-name {
                          ext:operation-exclude "update" {
                            description "The node cannot be modified, when the peer already belongs to a peer-group.";
                          }
                          type leafref {
                            path "../../../peer-groups/peer-group/name";
                          }
                          description
                            "Specify the name of a peer group that BGP peers need to join. That must be selected group name or AS when creating, and the value is a string, spaces not supported. By default, BGP peers join no peer group. BGP peers distinguish the peer group type when joining a peer group. IBGP peers cannot join an EBGP peer group. BGP peers will be deleted when they leave a peer group. The object cannot be modified.";
                        }
    
                        leaf local-if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points: 1. The address of the loopback interface of the BGP peer must be reachable. 2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                        }
    
                        leaf local-if-address {
                          type inet:ip-address-no-zone;
                          must
                            "not(contains(., ':'))";
                          description
                            "Name of a source interface that sends BGP packets. By default, the outbound interface of a BGP packet serves as the source interface of a BGP packet. To ensure that a router can send BGP packets when a physical interface fails, you can configure the source interface that sends BGP packets as a loopback interface. When using the loopback interface as the source interface, note the following points:
    1. The address of the loopback interface of the BGP peer must be reachable.
    2. For an EBGP connection, configure the maximum number of hops and allow EBGP peer relationships to be established in indirect mode.";
                        }
    
                        leaf password-type {
                          type bgp:password-type;
                          must
                            "not((../password-type and ../password-type!='null') and (../key-chain-name or ../tcp-ao-name))";
                          must
                            "(not(../password-type and ../password-type!='null') and not(../password-text)) or (../password-type and ../password-type!='null' and ../password-text)";
                          default "null";
                          description
                            "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. Plaintexts and ciphertexts are supported.";
                        }
    
                        leaf password-text {
                          when
                            "../password-type and ../password-type!='null'";
                          type pub-type:password-extend;
                          mandatory true;
                          description
                            "Enable BGP peers to establish a TCP connection and perform the Message Digest 5 (MD5) authentication for BGP messages. The character string in a password identifies the contents of the password, spaces not supported. The TCP connection can be established only when the same MD5 authentication password is set on both ends. If a plaintext is used, the maximum password length is 255. If a ciphertext is used, the maximum password length is 432. If the length is set to 0, no password is set.";
                        }
    
                        leaf key-chain-name {
                          ext:case-sensitivity "lower-only";
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          must
                            "not(../password-type!='null' or ../tcp-ao-name)";
                          description
                            "Specify the Keychain authentication name used when BGP peers establish a TCP connection. The value is a string, spaces not supported. By default, the Keychain authentication is not configured. Keychain authentication mode and password authentication mode are mutually exclusive. Configuring Keychain authentication can enhance the security of the TCP connections between BGP peers. Keychain authentication using the same encryption algorithm and password must be configured on the two ends of BGP peers to establish a TCP connection and exchange BGP packets. Before configuring BGP Keychain authentication, you need to configure Keychain according to keychain name. Otherwise, the TCP connections between the BGP peers cannot be established.";
                        }
    
                        leaf tcp-ao-disable {
                          type empty;
                          description
                            "Disable the TCP-AO authentication for establishing the TCP connection between BGP peers.";
                        }
    
                        leaf tcp-ao-name {
                          when
                            "not(../tcp-ao-disable)";
                          type leafref {
                            path "/socket:socket/socket:tcp-aos/socket:tcp-ao/socket:name";
                          }
                          must
                            "not(../password-type!='null' or ../key-chain-name)";
                          description
                            "Specify TCP-AO authentication for establishing the TCP connection between BGP peers.";
                        }
    
                        leaf description {
                          type string {
                            length "1..255";
                            pattern '([^?]*)';
                          }
                          description
                            "Description of a peer, which can be letters or digits. The description is a string, spaces supported. By default, no description is configured for a peer.";
                        }
    
                        leaf ebgp-max-hop {
                          type uint32 {
                            range "1..255";
                          }
                          must
                            "not(../valid-ttl-hops) or (../valid-ttl-hops>=1 and ../valid-ttl-hops<=255 and ../ebgp-max-hop=1)";
                          description
                            "Maximum number of hops in an indirect EBGP connection. By default, EBGP connections can be established only between directly connected peers. The function must be configured on both ends. By default, value is determined by the neighbor type, the default value of EBGP is 1 and the default value of IBGP is 0.";
                        }
    
                        leaf tracking-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable peer tracking, After peer tracking is enabled, the device can fast detect the unreachability of a peer and reset the session.";
                        }
    
                        leaf tracking-delay-time {
                          when
                            "../tracking-enable='true'";
                          type uint16;
                          units "s";
                          default "0";
                          description
                            "Specify the delay to reset the session.";
                        }
    
                        leaf conventional {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable general router functions on peers. In conventional mode, not all the extended router functions, such as, route refreshing, GR, and multi-address family negotiation, are available. Therefore, the router of a new version can be compatible with the routers of earlier versions.";
                        }
    
                        leaf route-refresh {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to advertise Refresh messages to peers.";
                        }
    
                        leaf four-byte-as {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to advertise routes carrying 4-byte AS numbers to peers. After the 4-byte AS number function is disabled, Open packets will not carry 4-byte AS number capability flag, and peer ends will not know that local ends have the 4-byte AS number function. The 4-byte AS number function cannot be disabled from peers (peer groups) if a 4-byte AS number, fake AS number, or confederation ID is configured on a router and the AS number of a peer is 4-byte. If the 4-byte AS number function is disabled in such a situation, BGP sessions may fail to be established, and route transmission may be affected.";
                        }
    
                        leaf ignore {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the function to tear down sessions between peers and clear all related routing information.";
                        }
    
                        leaf valid-ttl-hops {
                          type uint16 {
                            range "1..255";
                          }
                          must
                            "not(../ebgp-max-hop and ../ebgp-max-hop>1)";
                          description
                            "Enable GTSM on a peer or peer group. The valid-TTL-Value parameter is used to specify the number of TTL hops to be detected. If the value is configured as hops, the valid TTL range of the detected packet is [255-hops+1, 255].";
                        }
    
                        leaf connect-mode {
                          type connect-mode;
                          default "null";
                          description
                            "The value can be Connect-only, Listen-only, or Both. If the value is Connect-only, the specified peer or peer group only initiatively sends connection requests, instead of listening to connection requests. If the value is Listen-only, the specified peer or peer group only listens to connection requests, instead of initiatively sending connection requests. If the value is Both, the specified peer or peer group not only initiatively sends connection requests, but also listens to connection requests. The default value is Both.";
                        }
    
                        leaf log-change {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable BGP to record the session status and events of the specified peer or peer group.";
                        }
    
                        leaf check-first-as {
                          type peer-cap-config-state;
                          default "default";
                          description
                            "Check the first AS in the AS_Path of the update messages from EBGP peers.";
                        }
    
                        leaf memory-priority {
                          type peer-memory-priority;
                          default "default";
                          description
                            "Set a priority that determines the disconnection order of a BGP peer relationship if memory overload occurs.";
                        }
    
                        leaf memory-priority-capability {
                          type memory-priority;
                          config false;
                          description
                            "Priority that is used to determine the disconnection order of a BGP peer relationship if memory overload occurs.";
                        }
    
                        leaf oscillation-dampening {
                          type peer-attr-enable-type;
                          description
                            "Enable/disable BGP to suppress the establishment of a specified peer relationship that flaps continuously. By default, the capability is enabled.";
                        }
    
                        container fake-as-parameter {
                          when
                            "../../../../../../ni:name!='_public_'";
                          description
                            "Configure BGP fake-as parameters.";
                          leaf fake-as {
                            type bgp:as-number-validate;
                            description
                              "Fake AS number that is specified for a local peer. By default, a peer uses the actual AS number of the local end.
    An AS number can be in either two-byte format or four-byte format:
    The two-byte format is X. X is an integer ranging from 1 to 65535.
    The four-byte format is X.Y and X. When the format is X.Y, X and Y are both integers, with the value of X ranging from 1 to 65535, and the value of Y ranging from 0 to 65535; when the format is X, X is an interger, with the value of X ranging from 1 to 4294967295.";
                          }
    
                          leaf dual-as {
                            when "../fake-as";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to the remote EBGP peer can use the actual or fake AS number when specifying the AS number for a local peer. The local peer uses the fake and actual AS numbers to establish a BGP peer relationship with the remote end and identifies the AS number configured by the remote end through the error code (OPEN Message Error) and sub-error code (Bad Peer AS) of the Notification message from the remote end.";
                          }
    
                          leaf prepend-global-as {
                            when "../fake-as";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to add the global AS number to the update packets to be advertised.";
                          }
    
                          leaf prepend-fake-as {
                            when "../fake-as";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function to add the fake AS number to received update packets.";
                          }
                        }  // container fake-as-parameter
    
                        container timer {
                          description
                            "Configure BGP peer timer parameters.";
                          leaf keep-alive-time {
                            type uint32 {
                              range "0..21845";
                            }
                            units "s";
                            must
                              "(../keep-alive-time != 0 and (../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)";
                            default "60";
                            description
                              "If the value of a timer changes, the BGP peer relationship between the routers is disconnected. This is because the peers need to re-negotiate the Keepalive time and hold time. Therefore, confirm the action before you change the value of the timer. The Keepalive time should be at least three times of the hold time.";
                          }
    
                          leaf hold-time {
                            type uint32 {
                              range
                                "0 | 3..65535";
                            }
                            units "s";
                            must
                              "(((../hold-time>=../keep-alive-time * 3) and ../hold-time != ../keep-alive-time ) or (../hold-time = 0 and ../keep-alive-time = 0)) and ../hold-time>=../min-hold-time";
                            default "180";
                            description
                              "Hold time. When setting keepalive-time and hold-time, note the following:
    1. The values of keepalive-time and hold-time cannot both be 0. Otherwise, the BGP timer becomes invalid. That is, BGP does not detect link faults according to the timer.
    2. The value of hold-time is much greater than that of keepalive-time, such as, keepalive 1 and hold 65535. If the value of hold-time is too large, BGP cannot detect link faults timely.
    The priority of a timer is lower than that of a peer timer.
    After a connection is established between peers, the values of keepalive-time and hold-time are negotiated by the peers. The smaller value of hold-time contained in Open packets of both peers is taken as the value of hold-time. The smaller value of the locally set value of keepalive-time and one third of the value of hold-time is taken as the value of keepalive-time.";
                          }
    
                          leaf min-hold-time {
                            type uint32 {
                              range
                                "0 | 20..65535";
                            }
                            units "s";
                            must
                              "../hold-time>=../min-hold-time";
                            default "0";
                            description
                              "The default value of zero means that the minimum hold time check does not take effect. If the value is changed, the new value takes effect since the next peer relationship establishment. During the peer relationship establishment, the local device checks the hold time of the remote end. If the hold time is less than the minimum hold time, the local device sends an error packet with error code 02 and subcode 06, and the peer relationship fails to be established.";
                          }
    
                          leaf connect-retry-time {
                            type uint16 {
                              range "1..65535";
                            }
                            units "s";
                            default "32";
                            description
                              "ConnectRetry interval.";
                          }
                        }  // container timer
    
                        container bfd-parameter {
                          description
                            "Configure BFD.";
                          leaf block {
                            type boolean;
                            must
                              "not(../block='true' and ../enable='true')";
                            default "false";
                            description
                              "Enable/disable preventing a BGP peer from inheriting the BFD configuration of the BGP peer group.";
                          }
    
                          leaf enable {
                            type boolean;
                            must
                              "not(../block='true' and ../enable='true')";
                            default "false";
                            description
                              "Enable/disable BFD.";
                          }
    
                          choice mode-type {
                            description
                              "Set bfd mode.";
                            case single {
                              description
                                "Single hop mode.";
                              leaf single-hop {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "The single hop mode is preferred during the BFD session establishment between IBGP peers.";
                              }
    
                              leaf compatible {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "Compatible.";
                              }
                            }  // case single
    
                            case link {
                              description
                                "The per-link-echo mode.";
                              leaf per-link-echo {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "The per-link one-arm-echo mode is preferred during the BFD session establishment between IBGP peers.";
                              }
                            }  // case link
    
                            case one-arm-echo {
                              description
                                "One-arm-echo mode.";
                              leaf one-arm-echo {
                                when
                                  "../enable='true'";
                                type empty;
                                description
                                  "The one arm echo mode is preferred during the BFD session establishment between BGP peers.";
                              }
                            }  // case one-arm-echo
                          }  // choice mode-type
    
                          leaf multiplier {
                            type uint32 {
                              range "3..50";
                            }
                            default "3";
                            description
                              "Specify the detection multiplier.";
                          }
    
                          leaf min-rx-interval {
                            type uint32 {
                              range "3..20000";
                            }
                            units "ms";
                            description
                              "Specify the minimum interval at which BFD packets are received. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf min-tx-interval {
                            type uint32 {
                              range "3..20000";
                            }
                            units "ms";
                            description
                              "Specify the minimum interval at which BFD packets are sent. The value range and default value are controlled by the PAF.";
                          }
    
                          leaf valid-ttl-hops-operation {
                            type enumeration {
                              enum "enable" {
                                value 1;
                                description
                                  "Enable:";
                              }
                              enum "disable" {
                                value 2;
                                description
                                  "Disable:";
                              }
                            }
                            description
                              "Control specify the valid TTL hops value operation.";
                          }
    
                          leaf valid-ttl-hops {
                            when
                              "../valid-ttl-hops-operation='enable'";
                            type uint8 {
                              range "1..255";
                            }
                            mandatory true;
                            description
                              "Specify the valid TTL hops value.";
                          }
                        }  // container bfd-parameter
    
                        container bfd-parameter-state {
                          config false;
                          description
                            "Statistics of BFD Parameter State.";
                          leaf valid-ttl-hops {
                            type uint8 {
                              range "1..255";
                            }
                            description
                              "The valid TTL hops value.";
                          }
                        }  // container bfd-parameter-state
    
                        container graceful-restart {
                          description
                            "Configure graceful restart.";
                          leaf enable {
                            type peer-comm-config-type;
                            default "default";
                            description
                              "Enable/disable graceful restart capability.";
                          }
    
                          leaf time-wait-for-rib {
                            type uint32 {
                              range "3..3000";
                            }
                            units "s";
                            description
                              "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                          }
    
                          leaf restart-time {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            description
                              "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                          }
    
                          leaf effect-restart-time {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            config false;
                            description
                              "The maximum time during which a peer waits for a BGP session reestablishment.";
                          }
    
                          leaf effect-time-wait-for-rib {
                            type uint32 {
                              range "3..3000";
                            }
                            units "s";
                            config false;
                            description
                              "Period of waiting for the End-of-RIB flag.";
                          }
    
                          leaf effect-enable {
                            type boolean;
                            config false;
                            description
                              "Whether enable/disable graceful restart capability.";
                          }
    
                          leaf peer-reset {
                            type peer-comm-config-type;
                            default "default";
                            description
                              "Enable/disable reseting BGP peer graceful.";
                          }
    
                          leaf effect-peer-reset {
                            type boolean;
                            config false;
                            description
                              "Whether enable/disable reseting BGP peer graceful.";
                          }
                        }  // container graceful-restart
    
                        container local-graceful-restart {
                          description
                            "Configure local graceful restart.";
                          leaf enable {
                            type peer-comm-config-type;
                            default "default";
                            description
                              "Enable/disable graceful restart capability.";
                          }
    
                          leaf time-wait-for-rib {
                            type uint32 {
                              range "3..3000";
                            }
                            units "s";
                            description
                              "Period of waiting for the End-of-RIB flag. The value is an integer. When a BGP session is established or re-established, the router enabled with GR should receive the End-of-RIB flag in this period. If the router does not receive the End-of-RIB flag in this period, ensure that the router can exit from the GR process.";
                          }
    
                          leaf restart-time {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            description
                              "Specifies the maximum time during which a peer waits for a BGP session reestablishment.";
                          }
    
                          leaf effect-restart-time {
                            type uint16 {
                              range "3..3600";
                            }
                            units "s";
                            config false;
                            description
                              "The maximum time during which a peer waits for a BGP session reestablishment.";
                          }
    
                          leaf effect-time-wait-for-rib {
                            type uint32 {
                              range "3..3000";
                            }
                            units "s";
                            config false;
                            description
                              "Period of waiting for the End-of-RIB flag.";
                          }
    
                          leaf effect-enable {
                            type boolean;
                            config false;
                            description
                              "Whether enable/disable graceful restart capability.";
                          }
                        }  // container local-graceful-restart
    
                        container afs {
                          description
                            "List of peers in a specified address family.";
                          list af {
                            key "type";
                            description
                              "Configure peer in a specified address family.";
                            leaf type {
                              type bgp:instance-af-type;
                              must
                                "../../../../../afs/af[type = current()]";
                              description
                                "Specify the address family type to set the peer enable.";
                            }
    
                            container ipv4-unicast {
                              when
                                "../type='ipv4uni' and ../../../../../../../../ni:name!='_public_'";
                              must
                                "../../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                              description
                                "Configure IPv4 unicast options.";
                              leaf group-name {
                                ext:operation-exclude "update" {
                                  description "The node cannot be modified, when the peer already belongs to a peer-group.";
                                }
                                type leafref {
                                  path "../../../../../../peer-groups/peer-group/name";
                                }
                                must
                                  "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv4uni']";
                                description
                                  "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                              }
    
                              leaf reflect-client {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                              }
    
                              leaf label-route-capability {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable a device to exchange labeled routes.";
                              }
    
                              leaf check-tunnel-reachable {
                                when
                                  "../label-route-capability='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable tunnel reachability check.";
                              }
    
                              leaf nexthop-configure {
                                type vrf-nexthop-configuration-type;
                                description
                                  "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                              }
    
                              choice import-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf import-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container import-filter {
                                    description
                                      "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an import route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // container import-filter
                                }  // case xpl-ref
                              }  // choice import-policy-type
    
                              choice export-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf export-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container export-filter {
                                    description
                                      "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an export route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an export route-filter parameter.";
                                    }
                                  }  // container export-filter
                                }  // case xpl-ref
                              }  // choice export-policy-type
    
                              leaf allow-as-loop {
                                type uint32 {
                                  range "1..10";
                                }
                                description
                                  "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                              }
    
                              leaf default-route-advertise {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable a device to advertise the default route to its peers. This option enables a device to send a default route with the device as the next hop address to its peers, regardless of whether there is a default route in the local routing table.";
                              }
    
                              choice default-route-advertise-policy-type {
                                description
                                  "Set default route advertise-policy.";
                                case rtp-ref {
                                  description
                                    "The default-route-advertise-policy.";
                                  leaf default-route-advertise-policy {
                                    when
                                      "../default-route-advertise='true'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the name of a used policy.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "The default-route-advertise-filter.";
                                  container default-route-advertise-filter {
                                    when
                                      "../default-route-advertise='true'";
                                    description
                                      "Configure the route-filter for default route advertise.";
                                    leaf filter-name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify a route-filter name.";
                                    }
    
                                    leaf filter-parameter {
                                      when
                                        "../filter-name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify a route-filter parameter.";
                                    }
                                  }  // container default-route-advertise-filter
                                }  // case xpl-ref
                              }  // choice default-route-advertise-policy-type
    
                              leaf default-route-match-mode {
                                when
                                  "../default-route-advertise='true'";
                                type cra-match-mode;
                                default "null";
                                description
                                  "Configure the matching mode of default route advertisement, which can be disabling of route advertisement conditions, enabling of all route advertisement conditions, and enabling of part route advertisement conditions. Enabling of all route advertisement conditions indicates that a default route can be advertised only when it matches all the conditions. Enabling of part route advertisement conditions indicates that a default route can be advertised only when it matches one condition.";
                              }
    
                              leaf import-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf export-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf import-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                              }
    
                              leaf export-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                              }
    
                              leaf import-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the import ACL policy.";
                              }
    
                              leaf export-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the export ACL policy.";
                              }
    
                              leaf route-update-interval {
                                ext:dynamic-default;
                                type uint16 {
                                  range "0..600";
                                }
                                units "s";
                                description
                                  "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                              }
    
                              leaf preferred-value {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                default "0";
                                description
                                  "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                              }
    
                              leaf substitute-as-enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable replace the AS number of a specified peer in the AS_Path attribute with the local AS number. On a PE where AS number replacement is enabled, if an AS number in the AS_Path attribute of a route is same as that of the CE to which the PE advertises the route, the PE replaces the AS number with its own AS number before advertising the route.";
                              }
    
                              leaf soo {
                                type string {
                                  length "3..21";
                                }
                                description
                                  "Configure the Site-of-Origin (SoO) extended community attribute. This attribute can be expressed in the following formats: X.X.X.X:number<0-65535>, number<0-65535>:number<0-4294967295>, or number<0-65535>.number<0-65535>:number<0-65535> or <65536-4294967295>:<0-65535>. 0:0 or 0.0:0 is not supported.
    Two CEs are in the same site and can advertise routes to each other, and they are connected to a VPN through PEs. If the local routes of a CE are advertised to the other CE over the VPN, a routing loop may occur.
    The SoO feature can prevent a route advertised by a site from being sent back to the site, preventing routing loops. After SoO is enabled and a PE receives a route from a CE, the specified SoO attribute will be added to the route. Before advertising the route to the other CE, the PE checks the SoO attribute. If the SoO attribute is the same as the locally configured SoO attribute, the PE does not advertise the route, preventing routing loops.";
                              }
    
                              leaf keep-all-routes {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                              }
    
                              leaf load-balancing-enable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable a neighbour to participate in load balancing.";
                              }
    
                              choice load-balancing-ignore-as-type {
                                description
                                  "Set load balancing as path type.";
                                case as-attribute {
                                  description
                                    "Ignore the as-path attribute.";
                                  leaf load-balancing-as-path-ignore {
                                    when
                                      "../load-balancing-enable='true'";
                                    type empty;
                                    description
                                      "Configure BGP to ignore the AS_Path attribute when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                  }
                                }  // case as-attribute
    
                                case same-length-as-attribute {
                                  description
                                    "Ignore comparison of as-path attributes with the same length.";
                                  leaf load-balancing-as-path-relax {
                                    when
                                      "../load-balancing-enable='true'";
                                    type empty;
                                    description
                                      "Configure BGP to ignore comparison of AS_Path attributes with the same length when selecting the equal route. After as-path-neglect is selected, BGP does not compare the AS_Path length.";
                                  }
                                }  // case same-length-as-attribute
                              }  // choice load-balancing-ignore-as-type
    
                              leaf advertise-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the community attribute to a peer or a peer group.";
                              }
    
                              leaf advertise-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the extended community attribute to a peer or peer group.";
                              }
    
                              leaf discard-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                              }
    
                              leaf advertise-large-community {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                              }
    
                              leaf advertise-large-community-state {
                                type boolean;
                                default "false";
                                config false;
                                description
                                  "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                              }
    
                              leaf update-group-independent {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable the peer which can reside in an independent peer group.";
                              }
    
                              leaf update-group-independent-state {
                                type boolean;
                                config false;
                                description
                                  "Whether the peer can reside in an independent peer group.";
                              }
    
                              container default-route-match-conditions {
                                when
                                  "../default-route-match-mode and ../default-route-match-mode!='null'";
                                description
                                  "List of condition matching to filter the default routes to be advertised. The value takes effect only when the default route matching mode is not null and more than one IPv4 default route matching condition lists are configured.";
                                list default-route-match-condition {
                                  key "address mask";
                                  min-elements
                                    1;
                                  max-elements
                                    4;
                                  description
                                    "Configure the matching condition for default route advertisement.";
                                  leaf address {
                                    type inet:ipv4-address-no-zone;
                                    description
                                      "Configure a prefix that is used to match default routes.";
                                  }
    
                                  leaf mask {
                                    type uint32 {
                                      range
                                        "0..32";
                                    }
                                    description
                                      "Configure a mask that is used to match default routes.";
                                  }
                                }  // list default-route-match-condition
                              }  // container default-route-match-conditions
    
                              container route-limit {
                                description
                                  "Configure parameters of routes limited from this peer.";
                                leaf number {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Configure the maximum number of routes that can be accepted from a peer.";
                                }
    
                                leaf accept-prefix {
                                  when
                                    "../number";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the device to keep receiving routes and the routes are valid if the maximum number of routes allowed have been received and the alert-only parameter is specified.";
                                }
    
                                leaf percent {
                                  when
                                    "../number";
                                  type uint8 {
                                    range
                                      "1..100";
                                  }
                                  default "75";
                                  description
                                    "Specify the percentage of routes when a router starts to generate an alarm.";
                                }
    
                                leaf type {
                                  when
                                    "../number";
                                  type bgp:route-limit-type;
                                  must
                                    "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                  default
                                    "noparameter";
                                  description
                                    "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                                }
    
                                leaf idle-timeout {
                                  when
                                    "../type='idle-timeout'";
                                  type uint16 {
                                    range
                                      "1..1200";
                                  }
                                  units "min";
                                  description
                                    "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                                }
                              }  // container route-limit
    
                              container public-as-only {
                                description
                                  "Configure BGP Remove private AS number from outbound updates parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove AS numbers except peer AS number from outbound updates.";
                                  case all {
                                    description
                                      "Remove all private AS numbers.";
                                    leaf force {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case all
    
                                  case left-most {
                                    description
                                      "Remove the left-most private AS numbers.";
                                    leaf limited {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case left-most
                                }  // choice remove-private-as
    
                                leaf replace {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                                }
    
                                leaf no-skip-as {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                                }
                              }  // container public-as-only
    
                              container public-as-only-import {
                                description
                                  "Configure BGP remove private AS number in received BGP update messages parameters.";
                                leaf enable {
                                  type bgp:peer-comm-config-type;
                                  default
                                    "default";
                                  description
                                    "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove private AS numbers in received BGP update messages.";
                                  case all {
                                    description
                                      "Forcibly delete all the private AS numbers in the AS_Path list.";
                                    leaf force {
                                      when
                                        "../enable = 'enable'";
                                      type empty;
                                      description
                                        "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                    }
                                  }  // case all
                                }  // choice remove-private-as
    
                                leaf effect-enable {
                                  type boolean;
                                  config false;
                                  description
                                    "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                                }
    
                                leaf effect-force {
                                  type boolean;
                                  config false;
                                  description
                                    "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                                }
                              }  // container public-as-only-import
    
                              container path-attribute-treats {
                                description
                                  "List of modes in which specified path attributes are processed.";
                                list path-attribute-treat {
                                  must
                                    "discard-id-map or withdraw-id-map or unknown-id-map";
                                  key "treat-type";
                                  description
                                    "Configure mode in which specified path attributes are processed.";
                                  leaf treat-type {
                                    type bgp:path-attr-treat-type;
                                    description
                                      "Mode in which specified path attributes are processed.";
                                  }
    
                                  leaf discard-id-map {
                                    type pub-type:id-range {
                                      pattern
                                        '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                    }
                                    description
                                      "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                  }
    
                                  leaf withdraw-id-map {
                                    type pub-type:id-range {
                                      pattern
                                        '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                    }
                                    description
                                      "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                  }
    
                                  leaf unknown-id-map {
                                    type pub-type:id-range {
                                      pattern
                                        '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                    }
                                    description
                                      "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                  }
                                }  // list path-attribute-treat
                              }  // container path-attribute-treats
                            }  // container ipv4-unicast
    
                            container ipv4-vpn {
                              when
                                "../type = 'ipv4vpn' and ../../../../../../../../ni:name='_public_'";
                              description
                                "Configure IPv4 VPNv4 options.";
                              leaf group-name {
                                ext:operation-exclude "update" {
                                  description "The node cannot be modified, when the peer already belongs to a peer-group.";
                                }
                                type leafref {
                                  path "../../../../../../peer-groups/peer-group/name";
                                }
                                must
                                  "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv4vpn']";
                                description
                                  "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                              }
    
                              leaf advertise-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the community attribute to a peer or a peer group.";
                              }
    
                              leaf reflect-client {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                              }
    
                              leaf nexthop-configure {
                                type nexthop-configuration-type;
                                description
                                  "Both the next-hop-local mode and next-hop-invariable mode are available when the peer address family is the VPNv4/VPNV6/L2VPN AD address family. Only the next-hop-local mode is available when the peer address family is not VPNv4/VPNV6/L2VPN AD address family. In next-hop-local mode, you can configure a BGP speaker to set its IP address of as the next hop of the routes to be advertised to IBGP peers or IBGP peer groups. In next-hop-invariable mode, you can configure PEs in different ASs not to change the next hop of routes when the PEs advertise the routes to their EBGP peers and use the next hop addresses of IGP routes to advertise imported IGP routes to IBGP peers. By default, when a BGP speaker advertises routes to EBGP peers and imported IGP routes to IBGP peers, the BGP speaker changes the next hop to its interface address.";
                              }
    
                              choice import-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf import-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container import-filter {
                                    description
                                      "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an import route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // container import-filter
                                }  // case xpl-ref
                              }  // choice import-policy-type
    
                              choice export-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf export-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container export-filter {
                                    description
                                      "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an export route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an export route-filter parameter.";
                                    }
                                  }  // container export-filter
                                }  // case xpl-ref
                              }  // choice export-policy-type
    
                              leaf allow-as-loop {
                                type uint32 {
                                  range "1..10";
                                }
                                description
                                  "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                              }
    
                              leaf aigp {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable route with AIGP attribute advertisement to or from a peer.";
                              }
    
                              leaf add-path-mode {
                                type add-path-cap-type;
                                default "null";
                                description
                                  "Enable Add-Path route advertisement to a peer.";
                              }
    
                              leaf add-path-number {
                                type uint8 {
                                  range "2..64";
                                }
                                description
                                  "Number of Add-Path routes that can be advertised to a peer.";
                              }
    
                              leaf import-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf export-ip-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv4 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf import-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                              }
    
                              leaf export-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                              }
    
                              leaf import-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the import ACL policy.";
                              }
    
                              leaf export-acl-name-or-num {
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                description
                                  "Specifies the name of the export ACL policy.";
                              }
    
                              leaf route-update-interval {
                                ext:dynamic-default;
                                type uint16 {
                                  range "0..600";
                                }
                                units "s";
                                description
                                  "Specify the minimum interval at which Update packets are sent. By default, the interval at which Update packets are sent to IBGP peers is 15s,
    and the interval at which Update packets are sent to EBGP peers is 30s. When routes change, a router will send Update packets to notify its peers.
    If a route changes frequently, you can set an interval at which Update packets are sent to prevent the router from sending Update packets each time the route changes.
    This configuration is valid only to the routes learned from peers.";
                              }
    
                              leaf preferred-value {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                default "0";
                                description
                                  "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                              }
    
                              leaf upe {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the peer as an underlayer PE (UPE).";
                              }
    
                              leaf advertise-best-external {
                                type boolean;
                                must
                                  "../reflect-client='false' or ../advertise-best-external='false'";
                                must
                                  "../add-path-mode='null' or not(../add-path-mode) or ../advertise-best-external='false'";
                                must
                                  "not(../add-path-number and ../advertise-best-external='true')";
                                default "false";
                                description
                                  "Enable/disable the device to advertise Best External routes to peers.";
                              }
    
                              leaf keep-all-routes {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                              }
    
                              leaf update-group-independent {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable/disable the peer which can reside in an independent peer group.";
                              }
    
                              leaf update-group-independent-state {
                                type boolean;
                                config false;
                                description
                                  "Whether the peer can reside in an independent peer group.";
                              }
    
                              leaf origin-as-validation {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the BGP peer origin validation.";
                              }
    
                              container default-route-originates {
                                description
                                  "Configure advertised default VPNv4 routes.";
                                list default-route-originate {
                                  key "vpn-name";
                                  description
                                    "Configure advertised default VPNv4 route.";
                                  leaf vpn-name {
                                    type leafref {
                                      path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                                    }
                                    must
                                      "../vpn-name!='_public_'";
                                    description
                                      "VPN instance name. It uniquely identifies a VPN instance. The name is a string of case-sensitive characters.";
                                  }
                                }  // list default-route-originate
                              }  // container default-route-originates
    
                              container route-limit {
                                description
                                  "Configure parameters of routes limited from this peer.";
                                leaf number {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Configure the maximum number of routes that can be accepted from a peer.";
                                }
    
                                leaf percent {
                                  when
                                    "../number";
                                  type uint8 {
                                    range
                                      "1..100";
                                  }
                                  default "75";
                                  description
                                    "Specify the percentage of routes when a router starts to generate an alarm.";
                                }
    
                                leaf type {
                                  when
                                    "../number";
                                  type bgp:route-limit-type;
                                  must
                                    "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                  default
                                    "noparameter";
                                  description
                                    "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                                }
    
                                leaf idle-timeout {
                                  when
                                    "../type='idle-timeout'";
                                  type uint16 {
                                    range
                                      "1..1200";
                                  }
                                  units "min";
                                  description
                                    "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                                }
                              }  // container route-limit
    
                              container public-as-only {
                                description
                                  "Configure BGP Remove private AS number from outbound updates parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove AS numbers except peer AS number from outbound updates.";
                                  case all {
                                    description
                                      "Remove all private AS numbers.";
                                    leaf force {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case all
    
                                  case left-most {
                                    description
                                      "Remove the left-most private AS numbers.";
                                    leaf limited {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case left-most
                                }  // choice remove-private-as
    
                                leaf replace {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                                }
    
                                leaf no-skip-as {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                                }
                              }  // container public-as-only
    
                              container public-as-only-import {
                                description
                                  "Configure BGP remove private AS number in received BGP update messages parameters.";
                                leaf enable {
                                  type bgp:peer-comm-config-type;
                                  default
                                    "default";
                                  description
                                    "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove private AS numbers in received BGP update messages.";
                                  case all {
                                    description
                                      "Forcibly delete all the private AS numbers in the AS_Path list.";
                                    leaf force {
                                      when
                                        "../enable = 'enable'";
                                      type empty;
                                      description
                                        "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                    }
                                  }  // case all
                                }  // choice remove-private-as
    
                                leaf effect-enable {
                                  type boolean;
                                  config false;
                                  description
                                    "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                                }
    
                                leaf effect-force {
                                  type boolean;
                                  config false;
                                  description
                                    "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                                }
                              }  // container public-as-only-import
    
                              container path-attribute-treats {
                                description
                                  "List of modes in which specified path attributes are processed.";
                                list path-attribute-treat {
                                  must
                                    "discard-id-map or withdraw-id-map or unknown-id-map";
                                  key "treat-type";
                                  description
                                    "Configure mode in which specified path attributes are processed.";
                                  leaf treat-type {
                                    type bgp:path-attr-treat-type;
                                    description
                                      "Mode in which specified path attributes are processed.";
                                  }
    
                                  leaf discard-id-map {
                                    type pub-type:id-range {
                                      pattern
                                        '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                    }
                                    description
                                      "Specify a discard attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                  }
    
                                  leaf withdraw-id-map {
                                    type pub-type:id-range {
                                      pattern
                                        '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                    }
                                    description
                                      "Specify a withdraw attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                  }
    
                                  leaf unknown-id-map {
                                    type pub-type:id-range {
                                      pattern
                                        '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])?(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?(,((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))?))*)|((([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\)))?(,(([\+|\-](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|([\+|\-]\((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])-(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\))))*)';
                                    }
                                    description
                                      "Specify an unknown attribute ID list. The attribute IDs which are not supported as follows: 1 (ORIGIN), 2 (AS_PATH), 3 (NEXT_HOP), 4 (MED), 5 (LOCAL_PREF), 6 (ATOMICAGGREGATE), 7 (AGGREGATOR), 8 (COMMUNITY), 9 (ORIGINATOR_ID), 10 (CLUSTER_LIST), 14 (MP_REACH_NLRI), 15 (MP_UNREACH_NLRI), 17 (AS4PATH), 18 (AS4AGGREGATOR).";
                                  }
                                }  // list path-attribute-treat
                              }  // container path-attribute-treats
                            }  // container ipv4-vpn
    
                            container ipv6-unicast {
                              when
                                "../type='ipv6uni' and ../../../../../../../../ni:name!='_public_'";
                              must
                                "../../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                              description
                                "Configure IPv6 unicast options.";
                              leaf group-name {
                                ext:operation-exclude "update" {
                                  description "The node cannot be modified, when the peer already belongs to a peer-group.";
                                }
                                type leafref {
                                  path "../../../../../../peer-groups/peer-group/name";
                                }
                                must
                                  "../../../../../../peer-groups/peer-group[name = current()]/afs/af[type = 'ipv6uni']";
                                description
                                  "Configure a name for a peer group. After a peer is deleted from the peer group, the peer is disabled from the address family. The object cannot be modified.";
                              }
    
                              leaf advertise-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the community attribute to a peer or a peer group.";
                              }
    
                              leaf advertise-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable advertise the extended community attribute to a peer or peer group.";
                              }
    
                              leaf discard-ext-community {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable discard the extended community attribute in the routing information about a specified peer.";
                              }
    
                              leaf advertise-large-community {
                                type bgp:peer-comm-config-type;
                                default
                                  "default";
                                description
                                  "Enable large-community attribute advertisement. The Link-state address family and the RPD address family do not support this element.";
                              }
    
                              leaf advertise-large-community-state {
                                type boolean;
                                default "false";
                                config false;
                                description
                                  "Whether large-community attribute advertisement is enabled on a peer. The Link-state address family and the RPD address family do not support this element.";
                              }
    
                              leaf keep-all-routes {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable saving all the updated information about BGP routes from a specified peer or peer group after a BGP connection is established, even though these BGP routes fail to match the routing policy on the ingress. By default, the updated information about BGP routes from a specified peer is saved only when the routes match the routing policy on the ingress. If a router supports route refreshing, this option is not required.";
                              }
    
                              leaf reflect-client {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the local device as a route reflector (RR) and a peer or peer group as its client. This configuration is applicable between IBGP peers only. The configurations of RRs and its clients in an address family are valid only in this address family. Therefore, it is recommended to configure RRs and its clients in the specified address family that is required.";
                              }
    
                              leaf preferred-value {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                default "0";
                                description
                                  "Assign a preferred value for the routes learned from a specified peer. After a preferred value is configured for the routes learned from a specified peer,
    all the routes that learnt from this peer will use this preferred value. When multiple routes reach the same address prefix, the route with the largest preferred value will be selected.";
                              }
    
                              choice import-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf import-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes learned from a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container import-filter {
                                    description
                                      "Configure an import route-filter to filter the routes received from a peer group. By default, no route-filter is specified to filter the routes imported from a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an import route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // container import-filter
                                }  // case xpl-ref
                              }  // choice import-policy-type
    
                              choice export-policy-type {
                                description
                                  "Set route policy or filter.";
                                case rtp-ref {
                                  description
                                    "Route policy.";
                                  leaf export-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Specify the filtering policy applied to the routes to be advertised to a peer. By default, no such policy is specified.";
                                  }
                                }  // case rtp-ref
    
                                case xpl-ref {
                                  description
                                    "Route filter.";
                                  container export-filter {
                                    description
                                      "Configure an export route-filter to filter the routes to be advertised to a peer group. By default, no route-filter is specified to filter the routes to be advertised to a peer group.";
                                    leaf name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify an export route-filter name.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an export route-filter parameter.";
                                    }
                                  }  // container export-filter
                                }  // case xpl-ref
                              }  // choice export-policy-type
    
                              leaf allow-as-loop {
                                type uint32 {
                                  range "1..10";
                                }
                                description
                                  "Allow repetitive local AS numbers. By default, repetitive local AS numbers are not allowed.";
                              }
    
                              leaf import-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes received from a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be accepted.";
                              }
    
                              leaf export-as-path-filter {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:as-path-filters/rtp:as-path-filter/rtp:name";
                                }
                                description
                                  "Apply an AS_Path-based filtering policy to the routes to be advertised to a specified peer. The policy can be identified with a name or number, and the number ranges from 1 to 256. By default, no such policy is specified. Therefore, all BGP routes can be advertised.";
                              }
    
                              leaf import-ipv6-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 filtering policy applied to the routes received from a specified peer. By default, no such policy is specified.";
                              }
    
                              leaf export-ipv6-prefix {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the IPv6 filtering policy applied to the routes to be advertised to a specified peer. By default, no such policy is specified.";
                              }
    
                              container route-limit {
                                description
                                  "Configure parameters of routes limited from this peer.";
                                leaf number {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Configure the maximum number of routes that can be accepted from a peer.";
                                }
    
                                leaf percent {
                                  when
                                    "../number";
                                  type uint8 {
                                    range
                                      "1..100";
                                  }
                                  default "75";
                                  description
                                    "Specify the percentage of routes when a router starts to generate an alarm.";
                                }
    
                                leaf type {
                                  when
                                    "../number";
                                  type bgp:route-limit-type;
                                  must
                                    "(../type='idle-timeout' and ../idle-timeout) or (../type!='idle-timeout')";
                                  default
                                    "noparameter";
                                  description
                                    "Set the processing method as alert-only, idle-forever, or idle-timeout when the number of routes exceeds the set threshold. When alert-only is used, only an alarm is generated when the number of routes exceeds the threshold. In this case, new routes are no longer accepted. When idle-forever is used, connections are not automatically reestablished after being cut off until BGP connections are reset if the number of routes exceeds the set threshold. When idle-timeout is used and the idle-timeout timer is specified, the connections are automatically reestablished after being cut off if the number of routes exceeds the set threshold. You can reset BGP connections to reestablish the connections before the idle-timeout times expires.";
                                }
    
                                leaf idle-timeout {
                                  when
                                    "../type='idle-timeout'";
                                  type uint16 {
                                    range
                                      "1..1200";
                                  }
                                  units "min";
                                  description
                                    "Specify the value of the idle-timeout timer to automatically reestablish the connections after they are cut off when the number of routes exceeds the set threshold.";
                                }
                              }  // container route-limit
    
                              container public-as-only {
                                description
                                  "Configure BGP Remove private AS number from outbound updates parameters.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BGP to send Update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove AS numbers except peer AS number from outbound updates.";
                                  case all {
                                    description
                                      "Remove all private AS numbers.";
                                    leaf force {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "Configures BGP to carry only the public AS number instead of the private AS number when BGP sends Update packets. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case all
    
                                  case left-most {
                                    description
                                      "Remove the left-most private AS numbers.";
                                    leaf limited {
                                      when
                                        "../enable='true'";
                                      type empty;
                                      description
                                        "When the BGP sends update packets, the left ends of both the local AS and public AS do not carry the private AS. By default, BGP can carry the private AS number when BGP sends Update packets.";
                                    }
                                  }  // case left-most
                                }  // choice remove-private-as
    
                                leaf replace {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the private AS is replaced by the local AS when the BGP sends update packets.";
                                }
    
                                leaf no-skip-as {
                                  when
                                    "../force or ../limited";
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable the function to the neighbour AS is not processed when the BGP sends update packets.";
                                }
                              }  // container public-as-only
    
                              container public-as-only-import {
                                description
                                  "Configure BGP remove private AS number in received BGP update messages parameters.";
                                leaf enable {
                                  type bgp:peer-comm-config-type;
                                  default
                                    "default";
                                  description
                                    "Enable/disable BGP to receive update packets carrying only public AS numbers.";
                                }
    
                                choice remove-private-as {
                                  description
                                    "Remove private AS numbers in received BGP update messages.";
                                  case all {
                                    description
                                      "Forcibly delete all the private AS numbers in the AS_Path list.";
                                    leaf force {
                                      when
                                        "../enable = 'enable'";
                                      type empty;
                                      description
                                        "Enable a device to forcibly remove all the private AS numbers in received BGP update messages in which the AS_Path list contains private AS numbers. By default, a device does not remove private AS numbers from the AS_Path list when receiving BGP update messages.";
                                    }
                                  }  // case all
                                }  // choice remove-private-as
    
                                leaf effect-enable {
                                  type boolean;
                                  config false;
                                  description
                                    "Flag indicating that the device is enabled to remove private AS numbers from the AS_Path list in received BGP update messages.";
                                }
    
                                leaf effect-force {
                                  type boolean;
                                  config false;
                                  description
                                    "Flag indicating that the device is enabled to forcibly remove all the private AS numbers from the AS_Path list in received BGP update messages.";
                                }
                              }  // container public-as-only-import
                            }  // container ipv6-unicast
                          }  // list af
                        }  // container afs
                      }  // list peer
                    }  // container peers
                  }  // list instance-process
                }  // container instance-processs
              }  // container bgp
    
              container ospfv2 {
                description "Configure OSPFv2.";
                container gtsm {
                  when
                    "../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                  presence "Enable gtsm.";
                  description
                    "Configure the OSPF GTSM.";
                  leaf hops {
                    type uint8 {
                      range "1..255";
                    }
                    mandatory true;
                    description
                      "Specifies the number of TTL hops to be detected.";
                  }
    
                  leaf nonstandard-multicast {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable sending Multicast packet with TTL as 255 and receive multicast packet TTL should be 1 or 255 to ((255 - configured hop) + 1).";
                  }
                }  // container gtsm
    
                container sites {
                  when
                    "../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                  description
                    "List of OSPF instance.";
                  list site {
                    key "process-id";
                    description
                      "Configure OSPF instance.";
                    leaf process-id {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description "Process ID.";
                    }
    
                    leaf description {
                      type string {
                        length "1..80";
                        pattern '([^?]*)';
                      }
                      description
                        "Description of an OSPF process.";
                    }
    
                    leaf router-id {
                      type inet:ipv4-address-no-zone;
                      description
                        "Router ID. It is used to set the OSPF private ID.";
                    }
    
                    leaf opaque {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable the opaque LSA capability. After it is enabled, an OSPF process can generate the opaque LSA and receive the opaque LSA from the neighbor device.";
                    }
    
                    leaf rfc1583-compatible {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable the route selection rule that is compatible with RFC 1583.";
                    }
    
                    leaf rfc1583-prefer {
                      type asbr-prefer-rule;
                      must
                        "../rfc1583-prefer='none' or ../rfc1583-prefer='lower-cost' and ../rfc1583-compatible='true' or ../rfc1583-prefer='intra-area' and ../rfc1583-compatible='false'";
                      default "none";
                      description
                        "ASBR source prefer rules for compatible with RFC 1583.";
                    }
    
                    leaf silent-all-interface {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable to suppress all interfaces in an OSPF process from sending or receiving OSPF packets.";
                    }
    
                    leaf retransmission-limit {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable maximum retransmission.";
                    }
    
                    leaf retransmission-limit-value {
                      when
                        "../retransmission-limit='true'";
                      type uint32 {
                        range "2..255";
                      }
                      default "30";
                      description
                        "Maximum retransmission times.";
                    }
    
                    leaf safe-sync {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable safe synchronization.";
                    }
    
                    leaf traffic-adj {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable traffic adjust info.";
                    }
    
                    leaf traffic-adv {
                      when
                        "../traffic-adj='true'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable traffic advertise info.";
                    }
    
                    leaf local-mt {
                      when
                        "../../../../ni:name='_public_'";
                      type boolean;
                      must
                        "../local-mt='false' or ../traffic-adj='true'";
                      default "false";
                      description
                        "Enable/disable local multicast topology.";
                    }
    
                    leaf advertise-mpls-lsr-id {
                      type boolean;
                      must
                        "../advertise-mpls-lsr-id='false' or ../../../../ni:name='_public_'";
                      default "false";
                      description
                        "Enable/disable advertise MPLS LSR ID into multiple areas as an intra area route.";
                    }
    
                    leaf advertise-mpls-lsr-id-cost {
                      when
                        "../advertise-mpls-lsr-id='true'";
                      type uint32 {
                        range "0..65535";
                      }
                      default "0";
                      description
                        "MPLS LSR ID link cost.";
                    }
    
                    leaf suppress-reachability {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable suppress reachability.";
                    }
    
                    leaf lsa-refresh {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable refresh the age of LSA with greater lsa age.";
                    }
    
                    leaf mpls-ldp-auto-flag {
                      type proc-auto-cfg-state;
                      default "none";
                      description
                        "Enable LDP automatically on OSPF enabled interfaces, but need to set MPLS first.";
                    }
    
                    leaf lsdb-overflow-limit {
                      type uint32 {
                        range "1..1000000";
                      }
                      description
                        "Maximum number of AS external LSAs allowed in the LSDB.";
                    }
    
                    leaf peer-flapping-suppress {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable peer flapping suppress feature.";
                    }
    
                    leaf shutdown {
                      type boolean;
                      must
                        "../shutdown='false' or ../../../../ni:name='__dcn_vpn__'";
                      default "false";
                      description
                        "Enable/disable shutdown OSPFv2 service.";
                    }
    
                    leaf sham-hello {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable peers keep alive by receiving any valid OSPF packet.";
                    }
    
                    leaf max-link-cost {
                      type uint16 {
                        range "1..65534";
                      }
                      description
                        "Set the max value of link cost.";
                    }
    
                    leaf maxage-lsa {
                      type uint32 {
                        range "0..65535";
                      }
                      units "s";
                      default "20";
                      description
                        "Calculation of route delay when the OSPF LSA frequently flaps.";
                    }
    
                    container private-net {
                      when
                        "../../../../ni:name!='_public_'";
                      description
                        "Configure private network configuration of OSPF.";
                      leaf eca-route {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable route type of the extended community attribute for VPN.";
                      }
    
                      choice route-tag {
                        description
                          "To set route tag value.";
                        case disable {
                          description
                            "To disable the using of the tag for loop detection.";
                          leaf disable {
                            type empty;
                            description
                              "To disable the using of the tag for loop detection.";
                          }
                        }  // case disable
    
                        case value {
                          description
                            "Tag of an imported VPN route.";
                          leaf value {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Tag of an imported VPN route. By default, the first two bytes of the tag value are fixed to be 0xD000, and the last two bytes are the local AS number of the local BGP. For example, if the AS number of BGP is 100, the default tag value in decimal notation is 3489661028.If not configed, the default is 0.";
                          }
                        }  // case value
                      }  // choice route-tag
    
                      leaf vpn-capability {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable route loop detection and directly calculate routes. When VPN multi instance is supported on the multi VPN instance CE (MCE) router, loop detection must be cancelled. It is applicable to only OSPF VPN instances.";
                      }
    
                      container domain-id {
                        presence
                          "ID of an OSPF domain.";
                        description
                          "Configure ID of an OSPF domain.";
                        leaf domain-id {
                          type inet:ipv4-address-no-zone;
                          mandatory true;
                          description
                            "ID of an OSPF domain.";
                        }
    
                        leaf type {
                          type domain-id-type;
                          default "0x0005";
                          description
                            "Type of an OSPF domain ID.";
                        }
    
                        leaf value {
                          type pub-type:hex-binary {
                            length "1..6";
                            pattern
                              '((0x|0X)?[0-9a-fA-F]{0,4})';
                          }
                          default "0x0";
                          description
                            "Value of an OSPF domain ID type.";
                        }
                      }  // container domain-id
    
                      container domain-id-secondarys {
                        when "../domain-id";
                        description
                          "List of ID of a secondary domain.";
                        list domain-id-secondary {
                          key "domain-id type value";
                          description
                            "Configure ID of a secondary domain.";
                          leaf domain-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "ID of an OSPF domain.";
                          }
    
                          leaf type {
                            type domain-id-type;
                            description
                              "Type of an OSPF domain ID.";
                          }
    
                          leaf value {
                            type pub-type:hex-binary {
                              length "1..6";
                              pattern
                                '((0x|0X)?[0-9a-fA-F]{0,4})';
                            }
                            description
                              "Value of an OSPF domain ID type.";
                          }
                        }  // list domain-id-secondary
                      }  // container domain-id-secondarys
                    }  // container private-net
    
                    container host-name {
                      description
                        "Configure OSPF host name.";
                      leaf enable {
                        type boolean;
                        must
                          "../enable='false' or ../../opaque='true'";
                        default "false";
                        description
                          "Enable/disable host name.";
                      }
    
                      leaf value {
                        when "../enable='true'";
                        type string {
                          length "1..255";
                        }
                        description
                          "Set host name.";
                      }
                    }  // container host-name
    
                    container bandwidth {
                      description
                        "Configure bandwidth.";
                      leaf config-bw-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable bandwidth config.";
                      }
    
                      leaf reference-value {
                        type uint32 {
                          range "1..2147483648";
                        }
                        default "100";
                        description
                          "Reference to the calculation of link costs.";
                      }
                    }  // container bandwidth
    
                    container timer {
                      description
                        "Configure timer.";
                      container lsa-arrival {
                        description
                          "Configure interval for receiving LSAs either through an intelligent timer or timer.";
                        choice timer-type {
                          default
                            "intelligent-timer";
                          description
                            "Set a value for the LDP and OSPF synchronization timer.";
                          case timer {
                            description
                              "Interval for receiving LSAs.";
                            leaf interval {
                              type uint32 {
                                range "0..10000";
                              }
                              description
                                "Interval for receiving LSAs.";
                            }
                          }  // case timer
    
                          case intelligent-timer {
                            description
                              "Specify an intelligent timer.";
                            leaf max-interval {
                              type uint32 {
                                range
                                  "1..300000";
                              }
                              must
                                "../start-interval<=../max-interval and ../hold-interval<=../max-interval";
                              default "1000";
                              description
                                "Maximum interval for receiving OSPF LSAs.";
                            }
    
                            leaf start-interval {
                              type uint32 {
                                range "0..60000";
                              }
                              must
                                "../start-interval<=../max-interval";
                              default "500";
                              description
                                "Initial interval for receiving OSPF LSAs.";
                            }
    
                            leaf hold-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              must
                                "../hold-interval<=../max-interval";
                              default "500";
                              description
                                "Hold interval for receiving OSPF LSAs.";
                            }
                          }  // case intelligent-timer
                        }  // choice timer-type
                      }  // container lsa-arrival
    
                      container lsa-arr-supp-flap {
                        description
                          "Configure the delay timer for LSA acceptance.";
                        leaf interval {
                          type uint32 {
                            range "0..600";
                          }
                          units "s";
                          default "10";
                          description
                            "Specifies an interval for suppressing LSA advertising in case of route flapping. The value 0 indicates that LSA advertising is not suppressed.";
                        }
    
                        leaf threshold-count {
                          type uint32 {
                            range "3..100";
                          }
                          default "30";
                          description
                            "Value of the threshold of LSAs to be suppressed.";
                        }
                      }  // container lsa-arr-supp-flap
    
                      container lsa-originate {
                        description
                          "Configure interval for receiving LSAs either through an intelligent timer or timer.";
                        leaf other-type-interval {
                          type uint32 {
                            range "0..10";
                          }
                          default "5";
                          description
                            "Specify an updating/originating interval for type3, type4 and type10 LSAs. Interval for updating the LSAs except OSPF router LSAs and network LSAs.";
                        }
    
                        choice timer-type {
                          default
                            "intelligent-timer";
                          description
                            "Specify an updating/originating interval for type3, type4 and type10 LSAs.";
                          case intelligent-timer {
                            description
                              "Specify an intelligent timer for router LSA, network LSA, external LSA and NSSA LSA.";
                            leaf max-interval {
                              type uint32 {
                                range
                                  "1..300000";
                              }
                              must
                                "../start-interval<=../max-interval and ../hold-interval<=../max-interval";
                              default "5000";
                              description
                                "Maximum interval for updating OSPF LSAs.";
                            }
    
                            leaf start-interval {
                              type uint32 {
                                range "0..60000";
                              }
                              must
                                "../start-interval<=../max-interval";
                              default "500";
                              description
                                "Initial interval for updating OSPF LSAs.";
                            }
    
                            leaf hold-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              must
                                "../hold-interval<=../max-interval";
                              default "1000";
                              description
                                "Hold interval for updating OSPF LSAs.";
                            }
                          }  // case intelligent-timer
                        }  // choice timer-type
                      }  // container lsa-originate
    
                      container lsa-org-supp-flap {
                        description
                          "Configure the delay timer for LSA generation.";
                        leaf interval {
                          type uint32 {
                            range "0..600";
                          }
                          units "s";
                          default "10";
                          description
                            "Specifies an interval for suppressing LSA advertising in case of route flapping. The value 0 indicates that LSA advertising is not suppressed.";
                        }
    
                        leaf threshold-count {
                          type uint32 {
                            range "3..100";
                          }
                          default "30";
                          description
                            "Value of the threshold of LSAs to be suppressed.";
                        }
                      }  // container lsa-org-supp-flap
    
                      container spf-schedule {
                        description
                          "Configure the interval for SPF calculation.";
                        choice schedule-type {
                          default
                            "intelligent-timer";
                          description
                            "SPF schedule interval.";
                          case timer {
                            description
                              "Specify an updating/originating interval for type3, type4 and type10 LSAs.";
                            leaf interval {
                              type uint32 {
                                range "1..10";
                              }
                              units "s";
                              description
                                "Interval for OSPF SPF calculation. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidth and router resources caused by frequent network changes.";
                            }
                          }  // case timer
    
                          case intelligent-timer {
                            description
                              "Specify an intelligent timer.";
                            leaf max-interval {
                              type uint32 {
                                range
                                  "1..300000";
                              }
                              units "ms";
                              must
                                "../start-interval<=../max-interval and ../hold-interval<=../max-interval";
                              default "5000";
                              description
                                "Maximum interval for OSPF SPF calculation set through an intelligent timer. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidths and device resources caused by frequent network changes.";
                            }
    
                            leaf start-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              units "ms";
                              must
                                "../start-interval<=../max-interval";
                              default "50";
                              description
                                "Initial interval for OSPF SPF calculation set through an intelligent timer. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidth and router resources caused by frequent network changes.";
                            }
    
                            leaf hold-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              units "ms";
                              must
                                "../hold-interval<=../max-interval";
                              default "200";
                              description
                                "Hold interval for OSPF SPF calculation set through an intelligent timer. By adjusting the interval for calculating SPF, you can prevent the occupation of too many bandwidth and router resources caused by frequent network changes.";
                            }
    
                            leaf conserv-flag {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable conservative mode.";
                            }
                          }  // case intelligent-timer
    
                          case millisecond {
                            description
                              "Specify an interval.";
                            leaf millisecond {
                              type uint32 {
                                range "1..10000";
                              }
                              units "ms";
                              description
                                "Interval for OSPF SPF calculation. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidths and device resources caused by frequent network changes.";
                            }
                          }  // case millisecond
                        }  // choice schedule-type
                      }  // container spf-schedule
                    }  // container timer
    
                    container bfd {
                      description
                        "Configure BFD in an OSPF process.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable BFD in an OSPF process.";
                      }
    
                      leaf min-rx {
                        type uint32 {
                          range "3..20000";
                        }
                        units "ms";
                        description
                          "Minimum interval for receiving BFD packets from the peer end. The range and default are based on PAF.";
                      }
    
                      leaf min-tx {
                        type uint32 {
                          range "3..20000";
                        }
                        units "ms";
                        description
                          "Minimum interval for sending BFD packets to the peer end. The range and default are based on PAF.";
                      }
    
                      leaf detect-multiplier {
                        type uint32 {
                          range "3..50";
                        }
                        default "3";
                        description
                          "Local detection multiplier.";
                      }
    
                      leaf incr-cost {
                        type uint32 {
                          range "1..65535";
                        }
                        description
                          "BFD sync cost.";
                      }
    
                      leaf frr-binding {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable bind FRR with BFD.";
                      }
                    }  // container bfd
    
                    container metric-delay {
                      when "../opaque='true'";
                      description
                        "Configure metric delay in an OSPF process.";
                      leaf adv-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable metric delay advertisement.";
                      }
    
                      leaf suppress-timer {
                        type uint32 {
                          range "0..600";
                        }
                        units "s";
                        default "120";
                        description
                          "Metric delay suppress timer.";
                      }
    
                      leaf suppress-percent {
                        type uint8 {
                          range "0..100";
                        }
                        default "10";
                        description
                          "Metric delay suppress percent threshold.";
                      }
    
                      leaf suppress-absolute {
                        type uint32 {
                          range "0..10000";
                        }
                        default "1000";
                        description
                          "Metric delay suppress absolute threshold.";
                      }
                    }  // container metric-delay
    
                    container bier {
                      when
                        "../opaque='true' and ../../../../ni:name='_public_'";
                      description
                        "Configure the bier.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the bier.";
                      }
                    }  // container bier
    
                    container stub-router {
                      description
                        "Configure stub router is used to configure the router as stub router.";
                      leaf flag {
                        type stub-router-flag;
                        default "no-config";
                        description
                          "Stub router. The router configured with the stub router command notifies other OSPF routers of not using the stub router to forward data by increasing the metric greater than 65535 of the links in the LSA that is generated by the router.";
                      }
    
                      leaf interval {
                        when
                          "../flag='stub-on-boot'";
                        type uint32 {
                          range "5..65535";
                        }
                        default "500";
                        description
                          "Interval for remaining as the stub router during the active/standby switchover of a router.";
                      }
    
                      leaf include-stub {
                        when
                          "../flag!='no-config'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable set maximum cost for router lsa stub link.";
                      }
    
                      leaf external-lsa {
                        when
                          "../flag!='no-config'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable set maximum cost for external lsa.";
                      }
    
                      leaf external-cost {
                        when
                          "../external-lsa='true'";
                        type uint32 {
                          range "1..16777215";
                        }
                        default "16711680";
                        description
                          "Advertise external LSAs with configured/default overriding metric.";
                      }
    
                      leaf summary-lsa {
                        when
                          "../flag!='no-config'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable set maximum cost for summary lsa.";
                      }
    
                      leaf summary-cost {
                        when
                          "../summary-lsa='true'";
                        type uint32 {
                          range "1..16777215";
                        }
                        default "16711680";
                        description
                          "Advertise summary LSAs with configured/default overriding metric.";
                      }
                    }  // container stub-router
    
                    container bgp-ls {
                      description
                        "Configure BGP LS.";
                      leaf enable {
                        type boolean;
                        must
                          "../enable='false' or ../../../../../ni:name='_public_'";
                        default "false";
                        description
                          "Enable/disable BGP LS.";
                      }
    
                      leaf identifier {
                        when "../enable='true'";
                        type uint32 {
                          range "2..65535";
                        }
                        description
                          "Topo identifier.";
                      }
                    }  // container bgp-ls
    
                    container import-limit {
                      presence
                        "Enable import-limit";
                      description
                        "Configure limits the maximum number of routes to be imported.";
                      leaf max-number {
                        type uint32 {
                          range "1..4294967295";
                        }
                        mandatory true;
                        description
                          "Maximum number of external routes that can be imported.";
                      }
    
                      leaf threshold-upper {
                        type uint32 {
                          range "1..100";
                        }
                        must
                          "../threshold-upper>=../threshold-lower";
                        default "80";
                        description
                          "Upper threshold of the maximum number of routes that can be imported.";
                      }
    
                      leaf threshold-lower {
                        type uint32 {
                          range "1..100";
                        }
                        must
                          "../threshold-upper>=../threshold-lower";
                        default "70";
                        description
                          "Lower threshold of the maximum number of routes that can be imported.";
                      }
                    }  // container import-limit
    
                    container spf-control {
                      description
                        "Configure SPF calculation control.";
                      leaf max-load-balancing {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..128";
                        }
                        description
                          "Maximum number of the equal cost routes of the destination address in the routing table. The range and default are based on PAF.";
                      }
                    }  // container spf-control
    
                    container default-para {
                      description
                        "Configure default parameter.";
                      choice cost {
                        default "cost-value";
                        description
                          "Cost assigned to the ASE or NSSA LSA generated when an external route is imported.";
                        case cost-value {
                          description
                            "Default metric of the external routes imported by OSPF.";
                          leaf cost-value {
                            type uint32 {
                              range
                                "0..16777214";
                            }
                            default "1";
                            description
                              "Default metric of the external routes imported by OSPF.";
                          }
                        }  // case cost-value
    
                        case cost-inherit-metric {
                          description
                            "Cost of the imported route is the cost carried in the route. If the cost is not specified, the default cost can be set through the default command.";
                          leaf cost-inherit-metric {
                            type empty;
                            description
                              "Cost of the imported route is the cost carried in the route. If the cost is not specified, the default cost can be set through the default command.";
                          }
                        }  // case cost-inherit-metric
                      }  // choice cost
    
                      leaf tag {
                        type uint32 {
                          range "0..4294967295";
                        }
                        default "1";
                        description
                          "Tag of an external route.";
                      }
    
                      leaf type {
                        type external-route-type;
                        default "type2";
                        description
                          "Type of an external route.";
                      }
                    }  // container default-para
    
                    container avoid-micro-loop {
                      description
                        "Configure OSPF avoid microloop.";
                      leaf frr-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable avoid microloop.";
                      }
    
                      leaf frr-rib-update-delay {
                        type uint32 {
                          range "100..5000";
                        }
                        units "ms";
                        default "100";
                        description
                          "Set the maximum interval of delay timer.";
                      }
    
                      leaf te-tunnel-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable TE shortcut tunnel avoid microloop.";
                      }
    
                      leaf te-tunnel-rib-update-delay {
                        type uint32 {
                          range "100..30000";
                        }
                        units "ms";
                        default "1000";
                        description
                          "Set the route delivery delay for TE shortcut tunnel.";
                      }
                    }  // container avoid-micro-loop
    
                    container asbr-summary-prefixs {
                      description
                        "List of aggregate addresses for OSPF (only for ASBR).";
                      list asbr-summary-prefix {
                        key "prefix network-mask";
                        description
                          "Configure aggregate addresses for OSPF (only for ASBR).";
                        leaf prefix {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address. Prefix is the address after mask.";
                        }
    
                        leaf network-mask {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address mask.";
                        }
    
                        leaf cost {
                          type uint32 {
                            range "0..16777214";
                          }
                          description
                            "Specifies the cost of the aggregated route.";
                        }
    
                        leaf distribute-delay {
                          type uint32 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Distribute delay interval.";
                        }
    
                        leaf tag {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Specifies that the tag is mainly used to control advertisement of routes through the routing policy.";
                        }
    
                        leaf advertise {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable the aggregated route is advertised.";
                        }
    
                        leaf generate-null-zero {
                          when
                            "../advertise = 'true'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable generate black hole route.";
                        }
                      }  // list asbr-summary-prefix
                    }  // container asbr-summary-prefixs
    
                    choice default-route {
                      description
                        "Notification of default routes to the OSPF routing area.";
                      case summary {
                        description "Summary.";
                        container summary {
                          when
                            "../../../../ni:name!='_public_'";
                          presence
                            "Enable default-route-advertise summary.";
                          description
                            "Configure advertises the type3 summary LSAs of the specified default route.";
                          leaf cost {
                            type uint32 {
                              range
                                "0..16777214";
                            }
                            mandatory true;
                            description
                              "Metric of an ASE LSA.";
                          }
                        }  // container summary
                      }  // case summary
    
                      case no-summary {
                        description
                          "No summary.";
                        container no-summary {
                          presence
                            "Enable default-route-advertise no-summary.";
                          description
                            "Configure default routes to the OSPF routing area.";
                          leaf enable {
                            type empty;
                            status deprecated;
                            description
                              "Default Route Enable. The node enable is deprecated. You are advised to use the node no-summary.";
                          }
    
                          leaf cost {
                            type uint32 {
                              range
                                "0..16777214";
                            }
                            description
                              "Metric of an ASE LSA.";
                          }
    
                          leaf tag {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Route tag for default imported routes.";
                          }
    
                          leaf type {
                            type external-route-type;
                            description
                              "Metric type of an ASE LSA for the default routes.";
                          }
    
                          leaf distribute-delay {
                            type uint32 {
                              range "1..65535";
                            }
                            description
                              "Distribute delay timer used for the local router to calculate the default routes advertised by other routers.";
                          }
    
                          choice mode {
                            description
                              "Mode for default route.";
                            case permit-calculate-other {
                              description
                                "Set permit calculate other.";
                              leaf permit-calculate-other {
                                type empty;
                                description
                                  "To generate and advertise an ASE LSA that describes the default route only when there are valid default routes of other protocols in the routing table of the host. The router configured with permit calculate other still calculates the default routes of other routers.";
                              }
    
                              leaf permit-ibgp {
                                type empty;
                                description
                                  "Match IBGP default route.";
                              }
                            }  // case permit-calculate-other
    
                            case always {
                              description
                                "Set always.";
                              leaf always {
                                type empty;
                                description
                                  "The router configured with the always parameter does not calculate the default routes of other routers.";
                              }
                            }  // case always
                          }  // choice mode
    
                          choice policy-type {
                            description
                              "Mode of the policy used for default route.";
                            case route-policy-name {
                              description
                                "Set a route policy name.";
                              leaf route-policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Name of a routing policy. Through the routing policy, the device matches the default routing entry generated by the device that does not run OSPF in the routing table, and advertises the default route according to the parameters set through the routing policy.";
                              }
                            }  // case route-policy-name
    
                            case route-filter-name {
                              description
                                "Set a route filter name.";
                              leaf route-filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Name of a routing Filter.";
                              }
                            }  // case route-filter-name
                          }  // choice policy-type
                        }  // container no-summary
                      }  // case no-summary
                    }  // choice default-route
    
                    container route-preferences {
                      description
                        "List of preference of an OSPF route.";
                      list route-preference {
                        ext:generated-by "system" {
                          ext:filter "route-type='default' or route-type='ase'";
                        }
                        key "route-type";
                        max-elements 4;
                        description
                          "Configure preference of an OSPF route.";
                        leaf route-type {
                          type ospf-route-type;
                          description
                            "Router type.";
                        }
    
                        leaf preference {
                          ext:dynamic-default {
                            ext:default-value "10" {
                              when "../route-type != 'ase'";
                              description "The default value is 10 when route type is not ase.";
                            }
                            ext:default-value "150" {
                              when "../route-type = 'ase'";
                              description "The default value is 150 when route type is ase.";
                            }
                          }
                          type uint32 {
                            range "1..255";
                          }
                          description
                            "Preference of an OSPF route. The default of intra and inter area is 10.And The default of external is 150.";
                        }
    
                        choice policy-type {
                          description
                            "Type of a filtering rule.";
                          case route-policy-name {
                            description
                              "Name of a routing policy.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Name of a routing policy.";
                            }
                          }  // case route-policy-name
    
                          case route-filter-name {
                            description
                              "Name of a routing Filter.";
                            leaf route-filter-name {
                              type leafref {
                                path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                              }
                              description
                                "Name of a routing Filter.";
                            }
                          }  // case route-filter-name
                        }  // choice policy-type
                      }  // list route-preference
                    }  // container route-preferences
    
                    container nexthop-weights {
                      description
                        "List of preference of an equal cost route.";
                      list nexthop-weight {
                        key "ip-address";
                        description
                          "Configure preference of an equal cost route.";
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the next hop.";
                        }
    
                        leaf weight {
                          type uint32 {
                            range "1..254";
                          }
                          mandatory true;
                          description
                            "Weight of the next hop. After OSPF calculates the equal cost routes, the next hop is chosen from these equal cost routes based on the value of weight. The smaller the value is, the higher the preference is. By default, the weight is 255. This indicates that load balancing is carried out among equal cost routes and packets are forwarded at the same time without the preference being set.";
                        }
                      }  // list nexthop-weight
                    }  // container nexthop-weights
    
                    container prefix-prioritys {
                      description
                        "List of priority of OSPF route.";
                      list prefix-priority {
                        key "priority";
                        description
                          "Configure priority of OSPF route.";
                        leaf priority {
                          type prefix-priority;
                          description
                            "Convergence priority of OSPF routes.";
                        }
    
                        leaf ip-prefix {
                          type leafref {
                            path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                          }
                          mandatory true;
                          description
                            "Name of the IP prefix list. The value is a string of 1 to 169 characters without spaces. The prefix priority command sets the convergence priority of OSPF routes according to the specified IP prefix list name, and takes effect on the public network only.
    By default, the convergence priority of public OSPF host routes is medium, the convergence priority of directly connected routes is high, the convergence priority of static routes is medium, and the convergence priority of the routes of other protocols (such as BGP and RIP) is low. On the private network, OSPF 32 bit host routes are globally identified as medium.";
                        }
                      }  // list prefix-priority
                    }  // container prefix-prioritys
    
                    container ecmp-prefer {
                      description
                        "Configure equal cost multipath preference of OSPF routes.";
                      leaf te-tunnel {
                        type boolean;
                        must
                          "../te-tunnel='false' or ../intact='false'";
                        default "false";
                        description
                          "Enable/disable TE tunnel interface nexthops.";
                      }
    
                      leaf intact {
                        type boolean;
                        must
                          "../intact='false' or ../te-tunnel='false'";
                        default "false";
                        description
                          "Enable/disable IGP native nexthop.";
                      }
                    }  // container ecmp-prefer
    
                    container frr {
                      description
                        "Configure OSPF fast rerouting.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable FRR for this particular process.";
                      }
    
                      leaf lfa-enable {
                        type boolean;
                        must
                          "../lfa-enable='false' or ../enable='true'";
                        default "false";
                        description
                          "Enable/disable loop free alternate.";
                      }
    
                      leaf rlfa-enable {
                        type boolean;
                        must
                          "../rlfa-enable='false' or ../lfa-enable='true' and ../../../../../ni:name='_public_'";
                        default "false";
                        description
                          "Enable/disable remote lfa.";
                      }
    
                      leaf rlfa-max-cost {
                        when
                          "../rlfa-enable='true'";
                        type uint32 {
                          range "1..4294967295";
                        }
                        default "4294967295";
                        description
                          "Remote lfa tunnel ldp maximum-reachable-cost.";
                      }
    
                      leaf tilfa-enable {
                        type boolean;
                        must
                          "../tilfa-enable='false' or ../lfa-enable='true' and ../../../../../ni:name='_public_'";
                        default "false";
                        description
                          "Enable/disable TILFA.";
                      }
    
                      container tiebreaker {
                        when
                          "../lfa-enable='true'";
                        must
                          "node-protect!=lowest-cost";
                        must
                          "node-protect!=ldp-sync";
                        must
                          "ldp-sync!=lowest-cost";
                        must
                          "node-protect!=srlg-disjoint";
                        must
                          "lowest-cost!=srlg-disjoint";
                        must
                          "ldp-sync!=srlg-disjoint";
                        description
                          "Configure tiebreaker for multiple backups.";
                        leaf node-protect {
                          type uint8 {
                            range "1..255";
                          }
                          default "40";
                          description
                            "Set the value of node protect preference.";
                        }
    
                        leaf lowest-cost {
                          type uint8 {
                            range "1..255";
                          }
                          default "20";
                          description
                            "Set the value of lowcost preference.";
                        }
    
                        leaf ldp-sync {
                          type uint8 {
                            range "1..255";
                          }
                          default "10";
                          description
                            "Prefer backup nexthop with ldp sync.";
                        }
    
                        leaf srlg-disjoint {
                          type uint8 {
                            range "1..255";
                          }
                          default "5";
                          description
                            "Set the value of srlg-disjoint preference.";
                        }
                      }  // container tiebreaker
    
                      container route-policy {
                        when "../enable='true'";
                        description
                          "Configure FRR route policy.";
                        choice policy-type {
                          description
                            "Type of a filtering rule.";
                          case route-policy-name {
                            description
                              "Name of a routing policy.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Name of a routing policy.";
                            }
                          }  // case route-policy-name
    
                          case route-filter-name {
                            description
                              "Name of a routing filter.";
                            leaf route-filter-name {
                              type leafref {
                                path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                              }
                              description
                                "Name of a routing filter.";
                            }
                          }  // case route-filter-name
                        }  // choice policy-type
                      }  // container route-policy
    
                      container rlfa-tunnel {
                        when
                          "../enable='true' and ../../../../../ni:name='_public_'";
                        description
                          "Configure remote LFA ip prefix.";
                        choice policy-type {
                          description
                            "Name of a routing policy.";
                          case ip-prefix-name {
                            description
                              "Set a route policy name.";
                            leaf ip-prefix-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "To filter PQ node. Those nodes which don't pass filter can't be PQ node.";
                            }
                          }  // case ip-prefix-name
                        }  // choice policy-type
                      }  // container rlfa-tunnel
                    }  // container frr
    
                    container local-mt-filter {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "Configure OSPF local multicast topology filtering in routing updates.";
                      choice filter-policy {
                        description
                          "Type of a filtering rule.";
                        case acl-name-or-num {
                          description
                            "ACL name or ACL number. ACL name: specify the ACL name. ACL num: apply basic ACL.";
                          leaf acl-name-or-num {
                            type leafref {
                              path "/acl:acl/acl:groups/acl:group/acl:identity";
                            }
                            must
                              "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                            description
                              "ACL name or ACL number. ACL name: specify the ACL name. ACL num: apply basic ACL.";
                          }
                        }  // case acl-name-or-num
    
                        case ip-prefix {
                          description
                            "Ip prefix name.";
                          leaf ip-prefix {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                            }
                            description
                              "Ip prefix name.";
                          }
                        }  // case ip-prefix
    
                        case route-policy-name {
                          description
                            "Name of a routing policy.";
                          leaf route-policy-name {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Name of a routing policy.";
                          }
                        }  // case route-policy-name
    
                        case route-filter-name {
                          description
                            "Name of a routing filter.";
                          leaf route-filter-name {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Name of a routing filter.";
                          }
                        }  // case route-filter-name
                      }  // choice filter-policy
                    }  // container local-mt-filter
    
                    container peers {
                      description
                        "List of the IP address and DR priority of the neighbor router on the NBMA network.";
                      list peer {
                        key "ip-address";
                        description
                          "Configure the IP address and DR priority of the neighbor router on the NBMA network.";
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the neighbor router.";
                        }
    
                        leaf priority {
                          type uint8 {
                            range "0..255";
                          }
                          default "1";
                          description
                            "To set the IP address and DR priority of the neighbor router on the NBMA network.";
                        }
                      }  // list peer
                    }  // container peers
    
                    container filter-lsa-outs {
                      description
                        "List of LSA filter policy.";
                      list filter-lsa-out {
                        key "peer-ip-addr";
                        max-elements 512;
                        description
                          "Configure LSA filter policy.";
                        leaf peer-ip-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the P2MP neighbor.";
                        }
    
                        choice type {
                          mandatory true;
                          description
                            "Set filter lsa out type.";
                          case total {
                            description
                              "Filter total types of LSAs.";
                            leaf all-flag {
                              type empty;
                              description
                                "Filter all types of LSAs.";
                            }
                          }  // case total
    
                          case other {
                            description
                              "Filter other types of LSAs.";
                            leaf sum-flag {
                              type empty;
                              description
                                "Filter type 3 Summary LSAs.";
                            }
    
                            choice sum-filter {
                              description
                                "Type of a filtering rule.";
                              case sum-acl-name {
                                description
                                  "ACL Name or ACL Number. ACL Name: specify the ACL name. ACL Num: apply basic ACL.";
                                leaf sum-acl-name {
                                  when
                                    "../sum-flag";
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "ACL Name or ACL Number. ACL Name: specify the ACL name. ACL Num: apply basic ACL.";
                                }
                              }  // case sum-acl-name
                            }  // choice sum-filter
    
                            leaf ase-flag {
                              type empty;
                              description
                                "Filter type-5 ASE LSAs.";
                            }
    
                            choice ase-filter {
                              description
                                "Type of a filtering rule.";
                              case ase-acl-name {
                                description
                                  "ACL Name or ACL Number. ACL Name: specify the ACL name. ACL Num: apply basic ACL.";
                                leaf ase-acl-name {
                                  when
                                    "../ase-flag";
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "ACL Name or ACL Number. ACL Name: specify the ACL name. ACL Num: apply basic ACL.";
                                }
                              }  // case ase-acl-name
                            }  // choice ase-filter
    
                            leaf nssa-flag {
                              type empty;
                              description
                                "Filter type7 NSSA LSAs.";
                            }
    
                            choice nssa-filter {
                              description
                                "Type of a filtering rule.";
                              case nssa-acl-name {
                                description
                                  "ACL Name or ACL Number. ACL Name: specify the ACL name. ACL Num: apply basic ACL.";
                                leaf nssa-acl-name {
                                  when
                                    "../nssa-flag";
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "ACL Name or ACL Number. ACL Name: specify the ACL name. ACL Num: apply basic ACL.";
                                }
                              }  // case nssa-acl-name
                            }  // choice nssa-filter
                          }  // case other
                        }  // choice type
                      }  // list filter-lsa-out
                    }  // container filter-lsa-outs
    
                    choice graceful-restart {
                      description
                        "Information about OSPF GR.";
                      case gr-ietf {
                        description
                          "Information about OSPF IETF GR.";
                        container gr-ietf {
                          when
                            "../opaque='true'";
                          presence
                            "Enable OSPF IETF GR.";
                          description
                            "Configure OSPF IETF GR.";
                          choice helper-role-mode {
                            description
                              "Information about OSPF IETF GR helper role.";
                            case never {
                              description
                                "Forbid to support enable mode.";
                              leaf never {
                                type empty;
                                description
                                  "Forbid to support enable mode.";
                              }
                            }  // case never
    
                            case work-mode {
                              description
                                "Information about OSPF IETF GR.";
                              leaf planned-only {
                                type empty;
                                description
                                  "To support only planned GR on routers.";
                              }
    
                              leaf ignore-external-lsa {
                                type empty;
                                description
                                  "Ignore external lsa check (type5 and type7 LSAs).";
                              }
    
                              choice match-mode {
                                description
                                  "Name of a routing policy.";
                                case acl-name-or-num {
                                  description
                                    "Specify the basic ACL number or ACL name for filtering peer.";
                                  leaf acl-name-or-num {
                                    type leafref {
                                      path "/acl:acl/acl:groups/acl:group/acl:identity";
                                    }
                                    must
                                      "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                    description
                                      "Specify the basic ACL number or ACL name for filtering peer.";
                                  }
                                }  // case acl-name-or-num
    
                                case ip-prefix-name {
                                  description
                                    "Specify the IP prefix name for filtering peers.";
                                  leaf ip-prefix-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                    }
                                    description
                                      "Specify the IP prefix name for filtering peers.";
                                  }
                                }  // case ip-prefix-name
                              }  // choice match-mode
                            }  // case work-mode
                          }  // choice helper-role-mode
                        }  // container gr-ietf
                      }  // case gr-ietf
    
                      case gr-non-ietf {
                        description
                          "Information about OSPF NON IETF GR.";
                        container gr-non-ietf {
                          when
                            "../opaque='true'";
                          presence
                            "Enable OSPF NON IETF GR.";
                          description
                            "Configure OSPF NON IETF GR.";
                        }  // container gr-non-ietf
                      }  // case gr-non-ietf
                    }  // choice graceful-restart
    
                    container flood-control {
                      presence
                        "Enable flood-control";
                      description
                        "Configure OSPF flooding control.";
                      leaf number {
                        type uint32 {
                          range "1..1000";
                        }
                        default "50";
                        description
                          "Specify the update packet number to send.";
                      }
    
                      leaf interval {
                        type uint32 {
                          range "30..100000";
                        }
                        default "30";
                        description
                          "Specify the update packet timer interval to send.";
                      }
                    }  // container flood-control
    
                    container dn-bit {
                      when
                        "../../../../ni:name!='_public_'";
                      description
                        "Configure VPN optionA feature will help PEs in inter AS exchange routes through OSPF. VPN optionA provide two ways to suppress DN bit so that so that inter AS can exchange routes through OSPF. First way dose not set DN bit while import routes from BGP, second way dose not check DN bit while learning the routes from neighbor router. In both the scenario PE will be able to learn route and propagate the route in the new VPN cloud.";
                      leaf set-ase {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable setting of DN bit in all ASE LSA, applicable in private network.";
                      }
    
                      leaf set-nssa {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable setting of DN bit in all NSSA LSA, applicable in private network.";
                      }
    
                      leaf set-summary {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable setting of DN bit in all summary LSA, applicable in private network.";
                      }
    
                      leaf check-ase {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable checking of DN bit in all ASE LSA, applicable in private network.";
                      }
    
                      leaf check-nssa {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable checking of DN bit in all NSSA LSA, applicable in private network.";
                      }
    
                      leaf check-summary {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable checking of DN bit in all summary LSA, applicable in private network.";
                      }
    
                      container summary-router-ids {
                        when
                          "../check-summary='false'";
                        description
                          "List of router ID for which checking for DN bit summary LSA is disabled, applicable in private network.";
                        list summary-router-id {
                          key "router-id";
                          description
                            "Configure router ID for which checking for DN bit summary LSA is disabled, applicable in private network.";
                          leaf router-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "Router ID for which checking for DN bit summary LSA is disabled, applicable in private network.";
                          }
                        }  // list summary-router-id
                      }  // container summary-router-ids
                    }  // container dn-bit
    
                    container filter-import {
                      presence
                        "filter policy import";
                      description
                        "Configure the filter policy import command. You can set the rules for filtering intra area, inter area, and AS external routes of an OSPF process.";
                      choice policy-type {
                        mandatory true;
                        description
                          "Type of a filtering rule.";
                        case basic-acl {
                          description
                            "Apply basic ACL name or ACL number.";
                          leaf name-or-num {
                            type leafref {
                              path "/acl:acl/acl:groups/acl:group/acl:identity";
                            }
                            must
                              "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                            description
                              "Apply basic ACL name or ACL number.";
                          }
                        }  // case basic-acl
    
                        case ip-prefix {
                          description
                            "Set the name of an IP prefix list.";
                          leaf ip-prefix {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                            }
                            description
                              "Set the name of an IP prefix list.";
                          }
                        }  // case ip-prefix
    
                        case route-policy {
                          description
                            "Set a route policy name.";
                          leaf route-policy {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Set a route policy name.";
                          }
                        }  // case route-policy
    
                        case route-filter {
                          description
                            "Set a route filter name.";
                          leaf route-filter {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Set a route filter name.";
                          }
                        }  // case route-filter
                      }  // choice policy-type
    
                      leaf secondary {
                        type boolean;
                        must
                          "../secondary='false' or ../route-policy";
                        default "false";
                        description
                          "Enable/disable secondary flag.";
                      }
                    }  // container filter-import
    
                    container filter-exports {
                      description
                        "List of the filter policy export command. You can set the rules for filtering the routes imported through the import route (OSPF) command when the routes are advertised in type5 LSAs to the OSPF AS.";
                      list filter-export {
                        key "protocol protocol-id";
                        description
                          "Configure the filter policy export command. You can set the rules for filtering the routes imported through the import route (OSPF) command when the routes are advertised in type5 LSAs to the OSPF AS.";
                        leaf protocol {
                          type filter-rt-protocol;
                          description
                            "Protocol that advertises routes.";
                        }
    
                        leaf protocol-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "../protocol-id=1 or ../protocol='ospf' or ../protocol='isis' or ../protocol='rip'";
                          description
                            "Process ID when the advertised protocol is RIP, ISIS, or OSPF.";
                        }
    
                        choice policy-type {
                          mandatory true;
                          description
                            "Type of a filtering rule.";
                          case basic-acl {
                            description
                              "Apply basic ACL name or ACL number.";
                            leaf name-or-num {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              must
                                "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                              description
                                "Apply basic ACL name or ACL number.";
                            }
                          }  // case basic-acl
    
                          case ip-prefix {
                            description
                              "Set the name of an IP prefix list.";
                            leaf ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Set the name of an IP prefix list.";
                            }
                          }  // case ip-prefix
    
                          case route-policy {
                            description
                              "Set a route policy name.";
                            leaf route-policy {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Set a route policy name.";
                            }
                          }  // case route-policy
                        }  // choice policy-type
                      }  // list filter-export
                    }  // container filter-exports
    
                    container import-routes {
                      description
                        "List of import the routes learned from other routing protocols.";
                      list import-route {
                        key "protocol process-id";
                        description
                          "Configure import the routes learned from other routing protocols.";
                        leaf protocol {
                          type import-rt-protocol;
                          description
                            "Routing protocol whose routes are imported.";
                        }
    
                        leaf process-id {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          must
                            "(../process-id=0 and (../protocol='direct' or ../protocol='static' or ../protocol='bgp' or ../protocol='unr' or ../protocol='opr')) or (../process-id>0 and (../protocol='ospf' or ../protocol='isis' or ../protocol='rip'))";
                          description
                            "Process ID of the routing protocol whose routes are imported. It needs to be set only when the protocol is RIP, OSPF, or ISIS.";
                        }
    
                        leaf cost {
                          type uint32 {
                            range "0..16777214";
                          }
                          description
                            "Route cost.";
                        }
    
                        leaf tag {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Route tag of an external LSA.";
                        }
    
                        leaf type {
                          type external-route-type;
                          description
                            "Metric type of an external LSA.";
                        }
    
                        leaf permit-ibgp {
                          type boolean;
                          must
                            "../permit-ibgp='false' or ../protocol='bgp'";
                          default "false";
                          description
                            "Enable/disable to import IBGP routes.";
                        }
    
                        choice policy-type {
                          description
                            "Type of a filtering rule.";
                          case route-policy-name {
                            description
                              "Name of a routing policy.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Name of a routing policy.";
                            }
                          }  // case route-policy-name
                        }  // choice policy-type
                      }  // list import-route
                    }  // container import-routes
    
                    container silent-interfaces {
                      when
                        "../silent-all-interface='false'";
                      description
                        "List of interface. To prevent the OSPF routing information from being received by routers in a network segment and forbid the local router to receive the routing update information that is advertised by other routers in the network segment, you can use the silent interface command to suppress the interface to receive or send the OSPF packets.";
                      list silent-interface {
                        key "if-name";
                        description
                          "Configure interface. To prevent the OSPF routing information from being received by routers in a network segment and forbid the local router to receive the routing update information that is advertised by other routers in the network segment, you can use the silent interface command to suppress the interface to receive or send the OSPF packets.";
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
                      }  // list silent-interface
                    }  // container silent-interfaces
    
                    container undo-silent-interfaces {
                      when
                        "../silent-all-interface='true'";
                      description
                        "List of interface. Enables sending and receiving packet on this interface when true. This information is useful when sending and receiving packet is suppressed on all interface on process level and user want it to be enabled on certain interface.";
                      list undo-silent-interface {
                        key "if-name";
                        description
                          "Configure interface. Enables sending and receiving packet on this interface when true. This information is useful when sending and receiving packet is suppressed on all interface on process level and user want it to be enabled on certain interface.";
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
                      }  // list undo-silent-interface
                    }  // container undo-silent-interfaces
    
                    container cost-bindings {
                      description
                        "List of cost-binding. Indicate cost of routing from indicated router source ID binding interface.";
                      list cost-binding {
                        key "router-id if-name";
                        description
                          "Configure cost-binding. Indicate cost of routing from indicated router source ID binding interface.";
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Source router ID.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
                      }  // list cost-binding
                    }  // container cost-bindings
    
                    container areas {
                      description
                        "List of OSPF area.";
                      list area {
                        key "area-id";
                        description
                          "Configure OSPF area.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf area-type {
                          type area-type;
                          default "normal";
                          description
                            "Area type.";
                        }
    
                        leaf description {
                          type string {
                            length "1..80";
                            pattern '([^?]*)';
                          }
                          description
                            "Description of an OSPF area.";
                        }
    
                        container networks {
                          description
                            "List of the interface that runs OSPF and the area to which the interface belongs to.";
                          list network {
                            key "ip-address mask";
                            description
                              "Configure the interface that runs OSPF and the area to which the interface belongs to.";
                            leaf ip-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specifies the address of the network segment where the interface resides.";
                            }
    
                            leaf mask {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specifies the wildcard mask of IP address.";
                            }
    
                            leaf description {
                              type string {
                                length "1..80";
                                pattern
                                  '([^?]*)';
                              }
                              description
                                "Specifies the description of the specified OSPF network segment.";
                            }
                          }  // list network
                        }  // container networks
    
                        container stub {
                          when
                            "../area-type='stub'";
                          description
                            "Configure stub area.";
                          leaf backbone-peer-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ignore backbone peer for Stub area.";
                          }
    
                          leaf no-summary {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable forbid an ABR to Send Summary LSAs to the Stub Area.";
                          }
    
                          leaf default-cost {
                            type int32 {
                              range
                                "0..16777214";
                            }
                            default "1";
                            description
                              "Cost of the default Type3 routes that are sent by an OSPF process to a stub area or an NSSA area. The value is an integer ranging from 1 to 16777214. This parameter takes effect only when it is configured on the ABR connected to a stub area or an NSSA area. The default is 1.";
                          }
                        }  // container stub
    
                        container nssa {
                          when
                            "../area-type='nssa'";
                          description
                            "Configure nssa area.";
                          leaf no-summary {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable forbid an ABR to Send Summary LSAs to the NSSA Area.";
                          }
    
                          leaf translator-always {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the router to act as translator always for NSSA Area.";
                          }
    
                          leaf default-route-advertise {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable originate Type 7 default into NSSA area.";
                          }
    
                          leaf backbone-peer-ignore {
                            when
                              "../default-route-advertise='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ignore backbone peer for Nssa area.";
                          }
    
                          leaf no-import-route {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable redistribute type 7 LSA into this area.";
                          }
    
                          leaf set-n-bit {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable setting of 'N' bit in the DD packet.";
                          }
    
                          leaf suppress-fa {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the forwarding address as 0 for all translated type 5 LSAs.";
                          }
    
                          leaf zero-address-forwarding {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable allow zero forwarding address for redistributed type 7 LSA.";
                          }
    
                          leaf translator-interval {
                            type uint32 {
                              range "1..120";
                            }
                            default "40";
                            description
                              "Translator interval.";
                          }
    
                          leaf default-cost {
                            type int32 {
                              range
                                "0..16777214";
                            }
                            default "1";
                            description
                              "Cost of the default Type3 routes that are sent by an OSPF process to a stub area or an NSSA area. This parameter takes effect only when it is configured on the ABR connected to a stub area or an NSSA area.";
                          }
                        }  // container nssa
    
                        container ldp-sync {
                          description
                            "Configure timer ldp sync.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable LDP and OSPF synchronization on area.";
                          }
    
                          choice hold-cost-max {
                            default "infinite";
                            description
                              "Set timer ldp sync.";
                            case timer {
                              description
                                "Set timer ldp sync.";
                              leaf timer {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                units "s";
                                description
                                  "The interval for sending OSPF LSAs to advertise the maximum metric on the local device.";
                              }
                            }  // case timer
    
                            case infinite {
                              description
                                "Always advertise the maximum cost.";
                              leaf infinite {
                                type boolean;
                                must
                                  "../infinite='true'";
                                default "true";
                                description
                                  "Enable/disable always advertise the maximum cost.";
                              }
                            }  // case infinite
                          }  // choice hold-cost-max
                        }  // container ldp-sync
    
                        container mpls-te {
                          when
                            "../../../../../../ni:name!='__dcn_vpn__'";
                          description
                            "Configure OSPF processes enabled with the TE capability.";
                          leaf enable {
                            type boolean;
                            must
                              "../../../../opaque='true' or ../enable='false'";
                            default "false";
                            description
                              "Enable/disable TE capability of the OSPF process in the specified area.";
                          }
    
                          leaf standard-complying {
                            type boolean;
                            must
                              "../standard-complying='false' or ../enable='true'";
                            default "false";
                            description
                              "Enable/disable accept the LSAs in standard format only.";
                          }
                        }  // container mpls-te
    
                        container authentication {
                          must
                            "(key-id and auth-text-md5) or (not(key-id) and not(auth-text-md5))";
                          description
                            "Configure authentication. The encryption algorithm MD5 has a low security, which may bring security risks. Using more secure authentication is recommended.";
                          leaf mode {
                            type area-authen-mode;
                            default "none";
                            description
                              "Set authentication type.";
                          }
    
                          leaf auth-text-simple {
                            when
                              "../mode='simple'";
                            type pub-type:password;
                            description
                              "Simple authentication key. The password is a string ranging from 1 to 8 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                          }
    
                          leaf key-id {
                            when
                              "../mode='hmac-md5' or ../mode='hmac-sha256' or ../mode='md5'";
                            type uint32 {
                              range "1..255";
                            }
                            description
                              "Authentication identifier.";
                          }
    
                          leaf auth-text-md5 {
                            when
                              "../mode='hmac-md5' or ../mode='hmac-sha256' or ../mode='md5'";
                            type pub-type:password-extend;
                            description
                              "Encrypted authentication password.";
                          }
    
                          leaf key-chain-name {
                            ext:case-sensitivity "lower-only";
                            when
                              "../mode='keychain'";
                            type string {
                              length "1..47";
                              pattern '[^A-Z]+';
                            }
                            mandatory true;
                            description
                              "Keychain name.";
                          }
                        }  // container authentication
    
                        container abr-summary-prefixs {
                          description
                            "List of ABR route aggregation method.";
                          list abr-summary-prefix {
                            key "prefix network-mask";
                            description
                              "Configure ABR route aggregation method.";
                            leaf prefix {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specifies the IP address in dotted decimal notation.";
                            }
    
                            leaf network-mask {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specifies the mask of the IP address. The mask address is in dotted decimal notation.";
                            }
    
                            choice cost {
                              description
                                "Set the cost.";
                              case cost-value {
                                description
                                  "Specifies the cost of the aggregated route. By default, the maximal cost in that of all the routes which are aggregated serves as the cost of the aggregated route.";
                                leaf cost-value {
                                  type uint32 {
                                    range
                                      "0..16777214";
                                  }
                                  description
                                    "Specifies the cost of the aggregated route. By default, the maximal cost in that of all the routes which are aggregated serves as the cost of the aggregated route.";
                                }
                              }  // case cost-value
    
                              case cost-inherit-min {
                                description
                                  "Indicates if minimum cost should be inherited. By default, maximum cost is inherited.";
                                leaf cost-inherit-min {
                                  when
                                    "../../../../../../../../ni:name!='_public_'";
                                  type empty;
                                  description
                                    "Indicates if minimum cost should be inherited. By default, maximum cost is inherited.";
                                }
                              }  // case cost-inherit-min
                            }  // choice cost
    
                            leaf hold-max-cost {
                              type uint16 {
                                range "10..1800";
                              }
                              description
                                "Hold max cost duration.";
                            }
    
                            leaf advertise {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the aggregated route is advertised.";
                            }
    
                            leaf generate-null-zero {
                              when
                                "../advertise='true'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable generate black hole route.";
                            }
                          }  // list abr-summary-prefix
                        }  // container abr-summary-prefixs
    
                        container vlink-peers {
                          when
                            "../area-type='normal'";
                          description
                            "List of virtual link and its parameters.";
                          list vlink-peer {
                            key "router-id";
                            description
                              "Configure virtual link and its parameters.";
                            leaf router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Neighbor Router ID.";
                            }
    
                            leaf retransmit-interval {
                              type uint32 {
                                range "1..3600";
                              }
                              default "5";
                              description
                                "Interval for retransmitting LSAs.";
                            }
    
                            leaf smart-discover {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable smart discover feature.";
                            }
    
                            container timer {
                              must
                                "hello-interval<dead-interval";
                              description
                                "Configure timer.";
                              leaf hello-interval {
                                type uint32 {
                                  range
                                    "1..65535";
                                }
                                default "10";
                                description
                                  "Time between Hello packets.";
                              }
    
                              leaf dead-interval {
                                type uint32 {
                                  range
                                    "1..235926000";
                                }
                                default "40";
                                description
                                  "Interval after which a neighbor is declared dead.";
                              }
    
                              leaf trans-delay-interval {
                                type uint32 {
                                  range
                                    "1..3600";
                                }
                                default "1";
                                description
                                  "Delay for transmitting LSAs.";
                              }
                            }  // container timer
    
                            container authentication {
                              description
                                "Configure authentication. The encryption algorithm MD5 has a low security, which may bring security risks. Using more secure authentication is recommended.";
                              leaf mode {
                                type intf-authen-mode;
                                default "none";
                                description
                                  "Set authentication type: Simple authentication type, Md5/HMAC MD5/HMAC SHA256 authentication type.";
                              }
    
                              leaf auth-text-simple {
                                when
                                  "../mode='simple'";
                                type pub-type:password;
                                description
                                  "Simple authentication key. The password is a string ranging from 1 to 8 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                              }
    
                              leaf key-id {
                                when
                                  "../mode='hmac-sha256' or ../mode='md5' or ../mode='hmac-md5'";
                                type uint32 {
                                  range "1..255";
                                }
                                must
                                  "../key-id and ../auth-text-md5";
                                description
                                  "Authentication identifier.";
                              }
    
                              leaf auth-text-md5 {
                                when
                                  "../mode='hmac-sha256' or ../mode='md5' or ../mode='hmac-md5'";
                                type pub-type:password-extend {
                                  length
                                    "1..432";
                                }
                                must
                                  "../key-id and ../auth-text-md5";
                                description
                                  "MD5/HMAC MD5/HMAC SHA256 authentication password.";
                              }
    
                              leaf key-chain-name {
                                ext:case-sensitivity "lower-only";
                                when
                                  "../mode='keychain'";
                                type string {
                                  length "1..47";
                                  pattern
                                    '[^A-Z]+';
                                }
                                mandatory true;
                                description
                                  "Keychain name.";
                              }
                            }  // container authentication
    
                            container attribute {
                              config false;
                              description
                                "Statistics of vlink peer.";
                              leaf intf-state {
                                type intf-state;
                                description
                                  "OSPF virtual interface states.";
                              }
    
                              leaf intf-ip-addr {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Self or source IP address of the out going interface.";
                              }
    
                              leaf gr-state {
                                type nbr-gr-state;
                                description
                                  "Status of GR of an interface.";
                              }
    
                              leaf intf-cost {
                                type uint32;
                                description
                                  "Cost to reach the end point of this virtual link or cost to reach the virtual neighbor.";
                              }
    
                              leaf intf-type {
                                type network-type;
                                description
                                  "Interface type.";
                              }
    
                              leaf if-events {
                                type uint32;
                                description
                                  "Virtual interface events.";
                              }
    
                              leaf if-status {
                                type if-row-status;
                                description
                                  "Virtual interface status.";
                              }
    
                              leaf if-lsa-count {
                                type uint32;
                                description
                                  "Virtual interface LSA count.";
                              }
    
                              leaf if-lsa-checksum {
                                type uint32;
                                description
                                  "Virtual interface LSA checksum.";
                              }
                            }  // container attribute
                          }  // list vlink-peer
                        }  // container vlink-peers
    
                        container sham-links {
                          when
                            "../../../../../../ni:name!='_public_'";
                          description
                            "List of sham link and its parameters.";
                          list sham-link {
                            key "src-addr dest-addr";
                            description
                              "Configure sham link and its parameters.";
                            leaf src-addr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source address.";
                            }
    
                            leaf dest-addr {
                              type inet:ipv4-address-no-zone;
                              must
                                "../dest-addr!=../src-addr";
                              description
                                "Destination address.";
                            }
    
                            leaf cost {
                              type uint32 {
                                range "1..65535";
                              }
                              default "1";
                              description
                                "Cost.";
                            }
    
                            leaf retransmit-interval {
                              type uint32 {
                                range "1..3600";
                              }
                              default "5";
                              description
                                "Interval for retransmitting LSAs.";
                            }
    
                            leaf smart-discover {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable smart discover feature.";
                            }
    
                            container timer {
                              must
                                "hello-interval<dead-interval";
                              description
                                "Configure timer.";
                              leaf hello-interval {
                                type uint32 {
                                  range
                                    "1..65535";
                                }
                                default "10";
                                description
                                  "Time between Hello packets.";
                              }
    
                              leaf dead-interval {
                                type uint32 {
                                  range
                                    "1..235926000";
                                }
                                default "40";
                                description
                                  "Interval after which a neighbor is declared dead.";
                              }
    
                              leaf trans-delay-interval {
                                type uint32 {
                                  range
                                    "1..3600";
                                }
                                default "1";
                                description
                                  "Delay for transmitting LSAs.";
                              }
                            }  // container timer
    
                            container authentication {
                              description
                                "Configure authentication. The encryption algorithm MD5 has a low security, which may bring security risks. Using more secure authentication is recommended.";
                              leaf mode {
                                type intf-authen-mode;
                                default "none";
                                description
                                  "Set authentication type: Simple authentication type, Md5/HMAC MD5/HMAC SHA256 authentication type.";
                              }
    
                              leaf auth-text-simple {
                                when
                                  "../mode='simple'";
                                type pub-type:password;
                                description
                                  "Simple authentication key. The password is a string ranging from 1 to 8 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                              }
    
                              leaf key-id {
                                when
                                  "../mode='hmac-sha256' or ../mode='md5' or ../mode='hmac-md5'";
                                type uint32 {
                                  range "1..255";
                                }
                                must
                                  "../key-id and ../auth-text-md5";
                                description
                                  "Authentication identifier.";
                              }
    
                              leaf auth-text-md5 {
                                when
                                  "../mode='hmac-sha256' or ../mode='md5' or ../mode='hmac-md5'";
                                type pub-type:password-extend {
                                  length
                                    "1..432";
                                }
                                must
                                  "../key-id and ../auth-text-md5";
                                description
                                  "MD5/HMAC MD5/HMAC SHA256 authentication password.";
                              }
    
                              leaf key-chain-name {
                                ext:case-sensitivity "lower-only";
                                when
                                  "../mode='keychain'";
                                type string {
                                  length "1..47";
                                  pattern
                                    '[^A-Z]+';
                                }
                                mandatory true;
                                description
                                  "Keychain name.";
                              }
                            }  // container authentication
    
                            container attribute {
                              config false;
                              description
                                "Statistics of sham link.";
                              leaf state {
                                type intf-state;
                                description
                                  "OSPF sham interface states.";
                              }
    
                              leaf gr-state {
                                type nbr-gr-state;
                                description
                                  "Status of GR of the interface.";
                              }
    
                              leaf nbr-state {
                                type nbr-state;
                                description
                                  "OSPF neighbor states.";
                              }
    
                              leaf nbr-id {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Neighbor router ID.";
                              }
                            }  // container attribute
                          }  // list sham-link
                        }  // container sham-links
    
                        container filters {
                          description
                            "List of ABR to filter outgoing or incoming summary LSAs of the local area.";
                          list filter {
                            key "mode";
                            description
                              "Configure ABR to filter outgoing or incoming summary LSAs of the local area.";
                            leaf mode {
                              type area-filter-mode;
                              description
                                "Using the filter export command, you can configure an ABR to filter outgoing summary LSAs of the local area. Using the filter import command, you can configure an ABR to filter incoming summary LSAs of the local area.";
                            }
    
                            choice policy-type {
                              mandatory true;
                              description
                                "Type of a filtering rule.";
                              case basic-acl {
                                description
                                  "Apply basic ACL Name or ACL Number.";
                                leaf name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "Apply basic ACL Name or ACL Number.";
                                }
                              }  // case basic-acl
    
                              case ip-prefix {
                                description
                                  "Set the name of an IP prefix list.";
                                leaf ip-prefix {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Set the name of an IP prefix list.";
                                }
                              }  // case ip-prefix
    
                              case route-policy {
                                description
                                  "Set a route policy name.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Set a route policy name.";
                                }
                              }  // case route-policy
    
                              case route-filter {
                                description
                                  "Set a route filter name.";
                                leaf route-filter {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Set a route filter name.";
                                }
                              }  // case route-filter
                            }  // choice policy-type
    
                            leaf include-abr-summary {
                              when
                                "../mode='filter-import'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable include abr summary flag.";
                            }
                          }  // list filter
                        }  // container filters
    
                        container interfaces {
                          description
                            "List of the interface enabled with OSPF.";
                          list interface {
                            key "name";
                            description
                              "Configure the interface enabled with OSPF.";
                            leaf name {
                              type leafref {
                                path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                              }
                              must
                                "../../../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                              description
                                "Interface name. OSPF does not support the configuration of a NULL/LMP/MTUNNEL/RPR/STACKPORT/SIP/ATMBUNDLE/IMAGROUP/Remote-Ap/VBridge interface types.";
                            }
    
                            leaf network-type {
                              ext:dynamic-default;
                              type network-type;
                              description
                                "Network type of an OSPF interface. By default, the network type of an interface is determined by the physical interface.
    In the same network segment, if only two routers run OSPF, you can change the network type of an interface to P2P.";
                            }
    
                            leaf peer-ip-ignore {
                              type peer-ip-ignore-type;
                              must
                                "../peer-ip-ignore='enable' and ../network-type='p2p' or ../peer-ip-ignore='disable'";
                              default "disable";
                              description
                                "Ignores the subnet match check in multi access interface when network type P2P is configured along with this option.";
                            }
    
                            leaf transmit-delay {
                              type int32 {
                                range "1..500";
                              }
                              default "1";
                              description
                                "Delay for transmitting LSAs on an interface.";
                            }
    
                            leaf mtu-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable MTU filled in a DD packet when the packet is sent. The default MTU in the DD packet is 0. Using the command, you can manually configure the interface to fill in the MTU field (actual MTU of the interface) when the interface sends DD packets.
    After a virtual connection is established through the virtual template or tunnel, different vendors may use different MTUs as default settings. To ensure consistency, the MTU is set to 0 by default when the interface sends DD packets. Thus, the ospf mtu-enable command usually does not need to be configured.
    OSPF does not support the preceding configuration on a null interface.";
                            }
    
                            leaf dr-priority {
                              type int32 {
                                range "0..255";
                              }
                              default "1";
                              description
                                "Priority of the interface that participates in the DR and BDR election. The greater the value is, the higher the priority is. The router whose priority is 0 cannot be elected as a DR or a BDR.";
                            }
    
                            leaf cost {
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "To set the cost of an interface. The default value is 1. But the default of Loopback is 0.";
                            }
    
                            leaf smart-discover {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable smart discover on an interface. When the neighbor status of a router or a DR or BDR on the multi address network of the broadcast or NBMA type changes, the router can send hello packets to the neighbor actively rather than wait for the expiration of the hello timer.";
                            }
    
                            leaf p2mp-mask-ignore {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable to ignore the check of network masks on a P2MP network. On a P2MP network, when the lengths of device masks are inconsistent, the check of network masks in hello packets can be ignored through this command. In this case, the OSPF neighbor relationship can be normally established.";
                            }
    
                            leaf ldp-sync-block {
                              type boolean;
                              must
                                "../ldp-sync-block='false' or ../ldp-sync-enable='false'";
                              default "false";
                              description
                                "Enable/disable LDP sync on this interface.";
                            }
    
                            leaf ldp-sync-enable {
                              type boolean;
                              must
                                "../ldp-sync-enable='false' or ../ldp-sync-block='false'";
                              default "false";
                              description
                                "Enable/disable LDP and OSPF synchronization on an interface.";
                            }
    
                            leaf link-cost {
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "Link cost to be incremented when link quality is low. The default of Loopback is 0,others is 1.";
                            }
    
                            leaf suppress-reachability {
                              type suppr-reach;
                              default
                                "not-configured";
                              description
                                "Suppress its own prefixes and ignore the suppressed prefixes.";
                            }
    
                            leaf mpls-ldp-auto-flag {
                              type if-auto-cfg-state;
                              default "none";
                              description
                                "Block MPLS LDP auto configuration on the interface.";
                            }
    
                            leaf dcn-opq-blk-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable filter type-10 dcn opaque LSAs.";
                            }
    
                            leaf peer-hold-max-timer {
                              type uint32 {
                                range
                                  "100..1000000";
                              }
                              units "ms";
                              description
                                "Config peer hold max cost interval.";
                            }
    
                            leaf fallback-cost {
                              when
                                "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ifm:type='Eth-Trunk'";
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "Fallback cost.";
                            }
    
                            leaf fallback-bw {
                              when
                                "../fallback-cost";
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              units "Mbit/s";
                              mandatory true;
                              description
                                "Fallback bandwidth threshold.";
                            }
    
                            leaf source-sub-ip-address {
                              type inet:ipv4-address-no-zone;
                              must
                                "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ifm:type='Vlanif' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ifm:type='Vbdif'";
                              description
                                "Source address indicating a subordinate IP address.";
                            }
    
                            container frr {
                              description
                                "Configure FRR.";
                              leaf frr-disable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable not use this interface for FRR calculation.";
                              }
    
                              leaf rlfa-disable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable remote LFA of the Interface.";
                              }
    
                              container ti-lfa {
                                description
                                  "Configure topology independent loop free alternate (TILFA) computation using segment routing.";
                                leaf disable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable topology independent LFA on the interface except Loopback.";
                                }
                              }  // container ti-lfa
                            }  // container frr
    
                            container timer {
                              description
                                "Configure timer.";
                              leaf hello-interval {
                                ext:dynamic-default {
                                  ext:default-value "10" {
                                    when "../../network-type = 'p2p' or ../../network-type = 'broadcast'";
                                    description "The default value is 10 when network-type is p2p or broadcast.";
                                  }
                                  ext:default-value "30" {
                                    when "../../network-type = 'p2mp' or ../../network-type = 'nbma'";
                                    description "The default value is 30 when network-type is p2mp or nbma.";
                                  }
                                }
                                type int32 {
                                  range
                                    "1..65535";
                                }
                                description
                                  "Interval for sending hello packets on an interface.";
                              }
    
                              leaf hello-conser {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the compensation mechanism of controling the deadtimer to enable.";
                              }
    
                              leaf dead-interval {
                                ext:dynamic-default {
                                  ext:default-value "4*(../hello-interval)" {
                                    description "The default value of dead interval is 4 times that of hello interval.";
                                  }
                                }
                                type int32 {
                                  range
                                    "1..235926000";
                                }
                                must
                                  "../hello-interval<../dead-interval";
                                description
                                  "Dead interval of an OSPF neighbor.";
                              }
    
                              leaf wait-interval {
                                ext:dynamic-default {
                                  ext:default-value "../dead-interval" {
                                    description "The default value of wait interval is equal to dead interval.";
                                  }
                                }
                                type uint32 {
                                  range
                                    "1..235926000";
                                }
                                description
                                  "Wait time.";
                              }
    
                              leaf poll-interval {
                                type int32 {
                                  range
                                    "1..3600";
                                }
                                default "120";
                                description
                                  "Poll interval for sending hello packets. On the NBMA network, after the neighbor is invalid, the router sends hello packets periodically according to the interval set through the ospf timer poll command. The poll interval should be at least four times of the interval for sending hello packets.";
                              }
    
                              leaf retransmit-interval {
                                type int32 {
                                  range
                                    "1..3600";
                                }
                                default "5";
                                description
                                  "Interval for retransmitting LSAs on an interface.";
                              }
                            }  // container timer
    
                            container ldp-sync {
                              description
                                "Configure timer ldp sync.";
                              leaf hold-down-timer {
                                type uint16 {
                                  range
                                    "0..65535";
                                }
                                units "s";
                                default "10";
                                description
                                  "Hold down interval.";
                              }
    
                              choice hold-cost-max {
                                description
                                  "Set timer ldp sync.";
                                case timer {
                                  description
                                    "Set max cost interval.";
                                  leaf timer {
                                    type uint16 {
                                      range
                                        "0..65535";
                                    }
                                    units "s";
                                    description
                                      "Max cost interval range.";
                                  }
                                }  // case timer
    
                                case infinite {
                                  description
                                    "Always advertise the maximum cost.";
                                  leaf infinite {
                                    type empty;
                                    description
                                      "Always advertise the maximum cost.";
                                  }
                                }  // case infinite
                              }  // choice hold-cost-max
                            }  // container ldp-sync
    
                            container bfd {
                              description
                                "Configure BFD.";
                              leaf enable {
                                type boolean;
                                must
                                  "../enable='false' or ../block='false'";
                                default "false";
                                description
                                  "Enable/disable BFD.";
                              }
    
                              leaf block {
                                type boolean;
                                must
                                  "../block='false' or ../enable='false'";
                                default "false";
                                description
                                  "Enable/disable to prevent the dynamic establishment of a BFD session on an interface.";
                              }
    
                              leaf detect-multiplier {
                                type uint32 {
                                  range "3..50";
                                }
                                default "3";
                                description
                                  "Local detection multiplier.";
                              }
    
                              leaf min-tx {
                                type uint32 {
                                  range
                                    "3..20000";
                                }
                                units "ms";
                                description
                                  "Minimum interval for sending BFD packets to the peer end. The ranges and the default value is determined by the PAF.";
                              }
    
                              leaf min-rx {
                                type uint32 {
                                  range
                                    "3..20000";
                                }
                                units "ms";
                                description
                                  "Minimum interval for receiving BFD packets from the peer end. The ranges and the default value is determined by the PAF.";
                              }
    
                              leaf frr-binding {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable bind FRR with BFD.";
                              }
    
                              choice incr-cost {
                                description
                                  "Interface BFD sync cost.";
                                case incr-cost-block {
                                  description
                                    "Interface BFD sync cost block.";
                                  leaf incr-cost-block {
                                    type empty;
                                    description
                                      "Interface BFD sync cost block.";
                                  }
                                }  // case incr-cost-block
    
                                case incr-cost-value {
                                  description
                                    "Interface BFD sync cost.";
                                  leaf incr-cost-value {
                                    type uint32 {
                                      range
                                        "1..65535";
                                    }
                                    description
                                      "Interface BFD sync cost.";
                                  }
                                }  // case incr-cost-value
                              }  // choice incr-cost
    
                              leaf per-link-flag {
                                type boolean;
                                must
                                  "../one-arm-echo-flag=../per-link-flag and (../per-link-flag='false' or ../enable='true')";
                                default "false";
                                description
                                  "Enable/disable BFD session per link, support only VLANif interface.";
                              }
    
                              leaf one-arm-echo-flag {
                                type boolean;
                                must
                                  "../one-arm-echo-flag=../per-link-flag and (../one-arm-echo-flag='false' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../name]/ifm:type='Vlanif')";
                                default "false";
                                description
                                  "Enable/disable echo detection mode, support only VLANif interface.";
                              }
                            }  // container bfd
    
                            container authentication {
                              description
                                "Configure authentication. The encryption algorithm MD5 has a low security, which may bring security risks. Using more secure authentication is recommended.";
                              leaf mode {
                                type intf-authen-mode;
                                default "none";
                                description
                                  "Set Authentication type.";
                              }
    
                              leaf auth-text-simple {
                                when
                                  "../mode='simple'";
                                type pub-type:password;
                                description
                                  "Simple authentication key. The password is a string ranging from 1 to 8 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                              }
    
                              leaf key-id {
                                when
                                  "../mode='hmac-md5' or ../mode='hmac-sha256' or ../mode='md5'";
                                type uint32 {
                                  range "1..255";
                                }
                                must
                                  "../key-id and ../auth-text-md5";
                                description
                                  "Authentication identifier.";
                              }
    
                              leaf auth-text-md5 {
                                when
                                  "../mode='hmac-md5' or ../mode='hmac-sha256' or ../mode='md5'";
                                type pub-type:password-extend;
                                must
                                  "../key-id and ../auth-text-md5";
                                description
                                  "Encrypted authentication password.";
                              }
    
                              leaf key-chain-name {
                                ext:case-sensitivity "lower-only";
                                when
                                  "../mode='keychain'";
                                type string {
                                  length "1..47";
                                  pattern
                                    '[^A-Z]+';
                                }
                                mandatory true;
                                description
                                  "Keychain name.";
                              }
                            }  // container authentication
    
                            container filter-lsa-out {
                              description
                                "Configure filter lsa out.";
                              choice type {
                                description
                                  "Set filter lsa out type.";
                                case total {
                                  description
                                    "Filter total types of LSAs.";
                                  leaf all-flag {
                                    type empty;
                                    description
                                      "Filter all types of LSAs.";
                                  }
                                }  // case total
    
                                case other {
                                  description
                                    "Filter other types of LSAs.";
                                  leaf sum-flag {
                                    type empty;
                                    description
                                      "Filter type3 summary LSAs.";
                                  }
    
                                  choice sum-filter {
                                    description
                                      "Type of a filtering rule.";
                                    case acl {
                                      description
                                        "Basic ACL name or ACL number.";
                                      leaf sum-name {
                                        when
                                          "../sum-flag";
                                        type leafref {
                                          path "/acl:acl/acl:groups/acl:group/acl:identity";
                                        }
                                        must
                                          "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                        description
                                          "Basic ACL name or ACL number.";
                                      }
                                    }  // case acl
                                  }  // choice sum-filter
    
                                  leaf ase-flag {
                                    type empty;
                                    description
                                      "Filter type5 ASE LSAs.";
                                  }
    
                                  choice ase-filter {
                                    description
                                      "Type of a filtering rule.";
                                    case acl {
                                      description
                                        "Basic ACL name or ACL number.";
                                      leaf ase-name {
                                        when
                                          "../ase-flag";
                                        type leafref {
                                          path "/acl:acl/acl:groups/acl:group/acl:identity";
                                        }
                                        must
                                          "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                        description
                                          "Basic ACL name or ACL number.";
                                      }
                                    }  // case acl
                                  }  // choice ase-filter
    
                                  leaf nssa-flag {
                                    type empty;
                                    description
                                      "Filter type7 NSSA LSAs.";
                                  }
    
                                  choice nssa-filter {
                                    description
                                      "Type of a filtering rule.";
                                    case acl {
                                      description
                                        "Basic ACL name or ACL number.";
                                      leaf nssa-name {
                                        when
                                          "../nssa-flag";
                                        type leafref {
                                          path "/acl:acl/acl:groups/acl:group/acl:identity";
                                        }
                                        must
                                          "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                        description
                                          "Basic ACL name or ACL number.";
                                      }
                                    }  // case acl
                                  }  // choice nssa-filter
                                }  // case other
                              }  // choice type
                            }  // container filter-lsa-out
    
                            container suppress-flapping {
                              description
                                "Configure flapping suppression.";
                              container peer {
                                must
                                  "resume-interval>detect-interval";
                                description
                                  "Configure flapping suppression peer. Not support Loopback.";
                                leaf enable {
                                  type boolean;
                                  default "true";
                                  description
                                    "Enable/disable interface peer flapping suppress.";
                                }
    
                                leaf detect-interval {
                                  type uint32 {
                                    range
                                      "1..300";
                                  }
                                  default "60";
                                  description
                                    "Detecting interval.";
                                }
    
                                leaf threshold {
                                  type uint32 {
                                    range
                                      "1..1000";
                                  }
                                  default "10";
                                  description
                                    "Threshold.";
                                }
    
                                leaf resume-interval {
                                  type uint32 {
                                    range
                                      "2..1000";
                                  }
                                  default "120";
                                  description
                                    "Resume interval.";
                                }
    
                                leaf hold-down-interval {
                                  type uint32 {
                                    range
                                      "1..86400";
                                  }
                                  description
                                    "Hold down interval.";
                                }
    
                                leaf hold-max-cost {
                                  type boolean;
                                  default "true";
                                  description
                                    "Enable/disable hold max cost.";
                                }
                              }  // container peer
                            }  // container suppress-flapping
    
                            container flush-source-trace {
                              description
                                "Configure OSPF flush source trace function.";
                              leaf block {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable OSPF flush source trace.";
                              }
                            }  // container flush-source-trace
    
                            container mpls-te-peers {
                              description
                                "List of OSPF passive peer.";
                              list mpls-te-peer {
                                key "id router-id intf-ip";
                                description
                                  "Configure OSPF passive peer.";
                                leaf id {
                                  type uint32 {
                                    range
                                      "1..255";
                                  }
                                  description
                                    "Neighbor ID.";
                                }
    
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Configure OSPF passive peer router ID.";
                                }
    
                                leaf intf-ip {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Configure interface address of passive peer.";
                                }
    
                                container procs {
                                  description
                                    "List of OSPF passive peers area.";
                                  list proc {
                                    key "pid aid";
                                    max-elements
                                      1;
                                    description
                                      "Configure OSPF passive peers area.";
                                    leaf pid {
                                      type uint32 {
                                        range
                                          "1..4294967295";
                                      }
                                      description
                                        "Process ID.";
                                    }
    
                                    leaf aid {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Area ID.";
                                    }
    
                                    leaf cost {
                                      type uint32 {
                                        range
                                          "1..65535";
                                      }
                                      default
                                        "1";
                                      description
                                        "Configuration cost value.";
                                    }
                                  }  // list proc
                                }  // container procs
                              }  // list mpls-te-peer
                            }  // container mpls-te-peers
    
                            container multi-areas {
                              description
                                "List of the information about the multi-area interface enabled with OSPF.";
                              list multi-area {
                                key "area-id";
                                description
                                  "Configure the interface enabled with OSPF.";
                                leaf area-id {
                                  type leafref {
                                    path "/ni:network-instance/ni:instances/ni:instance/ospfv2:ospfv2/ospfv2:sites/ospfv2:site/ospfv2:areas/ospfv2:area/ospfv2:area-id";
                                  }
                                  must
                                    "../area-id!=../../../../../area-id";
                                  description
                                    "Multi area id.";
                                }
    
                                leaf transmit-delay {
                                  type int32 {
                                    range
                                      "1..500";
                                  }
                                  units "s";
                                  default "1";
                                  description
                                    "Delay for transmitting LSAs on an interface.";
                                }
    
                                leaf mtu-enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable MTU.Configure the interface to fill in the MTU field (actual MTU of the interface) when the interface sends DD packets.
    After a virtual connection is established through the virtual template or tunnel, different vendors may use different MTUs as default settings. To ensure consistency, the MTU is set to 0 by default when the interface sends DD packets. Thus, the ospf mtu-enable command usually does not need to be configured. OSPF does not support the preceding configuration on a null interface.";
                                }
    
                                leaf cost {
                                  type uint32 {
                                    range
                                      "1..65535";
                                  }
                                  description
                                    "To set the cost of an interface. The default value is 1. But the default of Loopback is 0.";
                                }
    
                                leaf smart-discover {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable smart discover on an interface. When the neighbor status of a router or a DR or BDR on the multi-address network of the broadcast or NBMA type changes, the router can send Hello packets to the neighbor actively rather than wait for the expiration of the Hello timer.";
                                }
    
                                leaf ldp-sync-block {
                                  type boolean;
                                  must
                                    "../ldp-sync-block='false' or ../ldp-sync-enable='false'";
                                  default
                                    "false";
                                  description
                                    "Enable/disable ldp sync on this interface.";
                                }
    
                                leaf ldp-sync-enable {
                                  type boolean;
                                  must
                                    "../ldp-sync-enable='false' or ../ldp-sync-block='false'";
                                  default
                                    "false";
                                  description
                                    "Enable/disable LDP and OSPF synchronization on an interface.";
                                }
    
                                leaf fallback-cost {
                                  when
                                    "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../name]/ifm:type='Eth-Trunk'";
                                  type uint16 {
                                    range
                                      "1..65535";
                                  }
                                  description
                                    "Fallback cost.";
                                }
    
                                leaf fallback-bw {
                                  when
                                    "../fallback-cost";
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  units "Mbit/s";
                                  mandatory
                                    true;
                                  description
                                    "Fallback bandwidth threshold.";
                                }
    
                                container frr {
                                  description
                                    "Configure frr.";
                                  leaf frr-disable {
                                    type boolean;
                                    default
                                      "false";
                                    description
                                      "Enable/disable use this interface for FRR calculation.";
                                  }
    
                                  leaf rlfa-disable {
                                    type boolean;
                                    default
                                      "false";
                                    description
                                      "Enable/disable remote LFA of the Interface.";
                                  }
    
                                  leaf ti-lfa-disable {
                                    type boolean;
                                    default
                                      "false";
                                    description
                                      "Enable/disable Topology Independent LFA on the interface except Loopback.";
                                  }
                                }  // container frr
    
                                container timer {
                                  description
                                    "Configure timer.";
                                  leaf hello-interval {
                                    ext:dynamic-default {
                                      ext:default-value "10" {
                                        when "../../../../network-type = 'p2p' or ../../../../network-type = 'broadcast'";
                                        description "The default value is 10 when network-type is p2p or broadcast.";
                                      }
                                      ext:default-value "30" {
                                        when "../../../../network-type = 'p2mp' or ../../../../network-type = 'nbma'";
                                        description "The default value is 30 when network-type is p2mp or nbma.";
                                      }
                                    }
                                    type int32 {
                                      range
                                        "1..65535";
                                    }
                                    units "s";
                                    description
                                      "Interval for sending Hello packets on an interface. The default value of p2p and broadcast is 10.The default of p2mp and NBMA is 30.";
                                  }
    
                                  leaf dead-interval {
                                    ext:dynamic-default {
                                      ext:default-value "4*(../hello-interval)" {
                                        description "The default value of dead interval is 4 times that of hello interval.";
                                      }
                                    }
                                    type int32 {
                                      range
                                        "1..235926000";
                                    }
                                    units "s";
                                    must
                                      "../hello-interval<../dead-interval";
                                    description
                                      "Dead interval of an OSPF neighbor. The default value of p2p and broadcast is 40.The default of p2mp and NBMA is 120.";
                                  }
    
                                  leaf retransmit-interval {
                                    type int32 {
                                      range
                                        "1..3600";
                                    }
                                    default "5";
                                    description
                                      "Interval for Retransmitting LSAs on an Interface.";
                                  }
                                }  // container timer
    
                                container ldp-sync {
                                  description
                                    "Configure timer ldp sync.";
                                  leaf hold-down-timer {
                                    type uint16 {
                                      range
                                        "0..65535";
                                    }
                                    units "s";
                                    default "10";
                                    description
                                      "Hold down interval range.";
                                  }
    
                                  choice hold-cost-max {
                                    description
                                      "Set timer ldp-sync.";
                                    case timer {
                                      description
                                        "Set max cost interval.";
                                      leaf timer {
                                        type uint16 {
                                          range
                                            "0..65535";
                                        }
                                        units
                                          "s";
                                        description
                                          "Max cost interval range.";
                                      }
                                    }  // case timer
    
                                    case infinite {
                                      description
                                        "Always advertise the maximum cost.";
                                      leaf infinite {
                                        type empty;
                                        description
                                          "Always advertise the maximum cost.";
                                      }
                                    }  // case infinite
                                  }  // choice hold-cost-max
                                }  // container ldp-sync
    
                                container bfd {
                                  description
                                    "Configure BFD.";
                                  leaf block {
                                    type boolean;
                                    default
                                      "false";
                                    description
                                      "Enable/disable prevent the dynamic establishment of a BFD session on an interface.";
                                  }
                                }  // container bfd
    
                                container authentication {
                                  must
                                    "(key-id and auth-text-md5) or (not(key-id) and not(auth-text-md5))";
                                  description
                                    "Configure authentication. The encryption algorithm MD5 has a low security, which may bring security risks. Using more secure authentication is recommended.";
                                  leaf mode {
                                    type intf-authen-mode;
                                    default
                                      "none";
                                    description
                                      "Set Authentication type.";
                                  }
    
                                  leaf auth-text-simple {
                                    when
                                      "../mode='simple'";
                                    type pub-type:password;
                                    description
                                      "Simple authentication key. The password is a string ranging from 1 to 8 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                                  }
    
                                  leaf key-id {
                                    when
                                      "../mode='hmac-md5' or ../mode='hmac-sha256' or ../mode='md5'";
                                    type uint32 {
                                      range
                                        "1..255";
                                    }
                                    description
                                      "Authentication identifier.";
                                  }
    
                                  leaf auth-text-md5 {
                                    when
                                      "../mode='hmac-md5' or ../mode='hmac-sha256' or ../mode='md5'";
                                    type pub-type:password-extend;
                                    description
                                      "MD5/HMAC-MD5/HMAC-SHA256 Authentication Password.";
                                  }
    
                                  leaf key-chain-name {
                                    ext:case-sensitivity "lower-only";
                                    when
                                      "../mode='keychain'";
                                    type string {
                                      length
                                        "1..47";
                                      pattern
                                        '[^A-Z]+';
                                    }
                                    mandatory
                                      true;
                                    description
                                      "Keychain Name.";
                                  }
                                }  // container authentication
    
                                container filter-lsa-out {
                                  presence
                                    "Enable multi area filter lsa out.";
                                  description
                                    "Configure filter-lsa-out.";
                                  choice type {
                                    mandatory
                                      true;
                                    description
                                      "Set filter-lsa-out type.";
                                    case total {
                                      description
                                        "Filter total types of LSAs.";
                                      leaf all-flag {
                                        type empty;
                                        description
                                          "Filter all types of LSAs.";
                                      }
                                    }  // case total
    
                                    case other {
                                      description
                                        "Filter other types of LSAs.";
                                      leaf sum-flag {
                                        type empty;
                                        description
                                          "Filter type-3 Summary LSAs.";
                                      }
    
                                      choice sum-filter {
                                        description
                                          "Type of a filtering rule.";
                                        case acl {
                                          description
                                            "ACL-Name or ACL-Number.";
                                          leaf sum-name {
                                            when
                                              "../sum-flag";
                                            type leafref {
                                              path "/acl:acl/acl:groups/acl:group/acl:identity";
                                            }
                                            description
                                              "ACL-Name or ACL-Number.";
                                          }
                                        }  // case acl
                                      }  // choice sum-filter
    
                                      leaf ase-flag {
                                        type empty;
                                        description
                                          "Filter type-5 ASE LSAs.";
                                      }
    
                                      choice ase-filter {
                                        description
                                          "Type of a filtering rule.";
                                        case acl {
                                          description
                                            "ACL-Name or ACL-Number.";
                                          leaf ase-name {
                                            when
                                              "../ase-flag";
                                            type leafref {
                                              path "/acl:acl/acl:groups/acl:group/acl:identity";
                                            }
                                            description
                                              "ACL-Name or ACL-Number.";
                                          }
                                        }  // case acl
                                      }  // choice ase-filter
    
                                      leaf nssa-flag {
                                        type empty;
                                        description
                                          "Filter type-7 NSSA LSAs.";
                                      }
    
                                      choice nssa-filter {
                                        description
                                          "Type of a filtering rule.";
                                        case acl {
                                          description
                                            "ACL-Name or ACL-Number.";
                                          leaf nssa-name {
                                            when
                                              "../nssa-flag";
                                            type leafref {
                                              path "/acl:acl/acl:groups/acl:group/acl:identity";
                                            }
                                            description
                                              "ACL-Name or ACL-Number.";
                                          }
                                        }  // case acl
                                      }  // choice nssa-filter
                                    }  // case other
                                  }  // choice type
                                }  // container filter-lsa-out
    
                                container suppress-flapping {
                                  description
                                    "Configure flapping suppression.";
                                  container peer {
                                    must
                                      "resume-interval>detect-interval";
                                    description
                                      "Configure flapping suppression peer. Not support Loopback.";
                                    leaf enable {
                                      type boolean;
                                      default
                                        "true";
                                      description
                                        "Enable/disable interface peer flapping suppress.";
                                    }
    
                                    leaf detect-interval {
                                      type uint32 {
                                        range
                                          "1..300";
                                      }
                                      default
                                        "60";
                                      description
                                        "Detecting-interval.";
                                    }
    
                                    leaf threshold {
                                      type uint32 {
                                        range
                                          "1..1000";
                                      }
                                      default
                                        "10";
                                      description
                                        "Threshold.";
                                    }
    
                                    leaf resume-interval {
                                      type uint32 {
                                        range
                                          "2..1000";
                                      }
                                      default
                                        "120";
                                      description
                                        "Resume-interval.";
                                    }
    
                                    leaf hold-down-interval {
                                      type uint32 {
                                        range
                                          "1..86400";
                                      }
                                      description
                                        "Hold-down-interval.";
                                    }
    
                                    leaf hold-max-cost {
                                      type boolean;
                                      default
                                        "true";
                                      description
                                        "Enable/disable hold max cost.";
                                    }
                                  }  // container peer
                                }  // container suppress-flapping
    
                                container attribute {
                                  config false;
                                  description
                                    "Statistics of multi-area interface.";
                                  leaf intf-state {
                                    type intf-state;
                                    description
                                      "Status of the interface.";
                                  }
    
                                  leaf mtu {
                                    type uint32;
                                    description
                                      "MTU of the interface.";
                                  }
    
                                  leaf intf-ip-addr {
                                    type inet:ipv4-address-no-zone;
                                    description
                                      "IP address of the interface.";
                                  }
    
                                  leaf gr-state {
                                    type nbr-gr-state;
                                    description
                                      "Status of GR of the interface.";
                                  }
    
                                  leaf intf-cost {
                                    type int32;
                                    description
                                      "Cost of the interface.";
                                  }
    
                                  leaf prev-intf-state {
                                    type intf-state;
                                    description
                                      "Previous status of the interface.";
                                  }
    
                                  leaf peer-flap-status {
                                    type peer-flapping-status;
                                    description
                                      "Peer flapping suppress status.";
                                  }
    
                                  leaf peer-flap-count {
                                    type uint32;
                                    description
                                      "Peer flapping suppress count.";
                                  }
    
                                  leaf peer-flap-threshold {
                                    type uint32;
                                    description
                                      "Peer flapping suppress threshold.";
                                  }
    
                                  leaf peer-flap-time {
                                    type yang:date-and-time;
                                    description
                                      "Peer suppress-flapping start time.";
                                  }
    
                                  leaf peer-flap-remain-timer {
                                    type uint32;
                                    description
                                      "Peer flapping suppress remain timer.";
                                  }
    
                                  leaf cur-intf-bw {
                                    type uint32;
                                    description
                                      "Current interface bandwidth.";
                                  }
                                }  // container attribute
    
                                container nbr-statistics {
                                  config false;
                                  description
                                    "List of OSPF multi-area peer.";
                                  list nbr-statistic {
                                    key "router-id ip";
                                    description
                                      "Statistics of OSPF multi-area peer.";
                                    leaf router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of a neighbor router.";
                                    }
    
                                    leaf ip {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Address of a neighbor interface.";
                                    }
    
                                    leaf intf-ip {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "IP address of an interface.";
                                    }
    
                                    leaf gr-state {
                                      type nbr-gr-state;
                                      description
                                        "GR state.";
                                    }
    
                                    leaf state {
                                      type nbr-state;
                                      description
                                        "Neighbor status.";
                                    }
    
                                    leaf mode {
                                      type nbr-mode;
                                      description
                                        "Mode of the DD. The available options are master and slave.";
                                    }
    
                                    leaf priority {
                                      type int32;
                                      description
                                        "Priority of a neighbor router.";
                                    }
    
                                    leaf dr {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Designated router.";
                                    }
    
                                    leaf bdr {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Backup designated router.";
                                    }
    
                                    leaf intf-mtu {
                                      type uint32;
                                      description
                                        "MTU of a neighbor.";
                                    }
    
                                    leaf dead-due-timer {
                                      type uint32;
                                      description
                                        "Dead due timer.";
                                    }
    
                                    leaf retran-intv {
                                      type uint32;
                                      description
                                        "Neighbor retranIntv.";
                                    }
    
                                    leaf up-time {
                                      type string {
                                        length
                                          "1..16";
                                      }
                                      description
                                        "Time when a neighbor goes up.";
                                    }
    
                                    leaf up-time-stamp {
                                      type yang:date-and-time;
                                      description
                                        "Neighbor up time stamp.";
                                    }
    
                                    leaf auth-sequence {
                                      type uint32;
                                      description
                                        "Neighbor authentication sequence number.";
                                    }
    
                                    leaf adj-sid {
                                      type uint32;
                                      description
                                        "Adjacency SID.";
                                    }
    
                                    leaf adj-weight {
                                      type uint32;
                                      description
                                        "Adjacency weight.";
                                    }
    
                                    leaf adj-flags {
                                      type string {
                                        length
                                          "1..20";
                                      }
                                      description
                                        "Adjacency flags.";
                                    }
                                  }  // list nbr-statistic
                                }  // container nbr-statistics
    
                                container request-queues {
                                  config false;
                                  description
                                    "List of the OSPF request message.";
                                  list request-queue {
                                    key "nbr-router-id nbr-ip-addr lsa-type link-state-id adv-router-id";
                                    description
                                      "Statistics of the OSPF request message.";
                                    leaf nbr-router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of a neighbor router.";
                                    }
    
                                    leaf nbr-ip-addr {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "IP address of the neighbor interface.";
                                    }
    
                                    leaf lsa-type {
                                      type lsa-type;
                                      description
                                        "LSA type.";
                                    }
    
                                    leaf link-state-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of the link state.";
                                    }
    
                                    leaf adv-router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Advertisement router ID.";
                                    }
    
                                    leaf router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of the local router.";
                                    }
    
                                    leaf intf-ip-addr {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Interface IP address.";
                                    }
    
                                    leaf lsa-sequence {
                                      type pub-type:hex-binary;
                                      description
                                        "LSA sequence number.";
                                    }
    
                                    leaf lsa-age {
                                      type uint32;
                                      description
                                        "LSA aging time.";
                                    }
                                  }  // list request-queue
                                }  // container request-queues
    
                                container retrans-queues {
                                  config false;
                                  description
                                    "List of the OSPF retrans message.";
                                  list retrans-queue {
                                    key "nbr-router-id nbr-ip-addr lsa-type link-state-id adv-router-id";
                                    description
                                      "Statistics of the OSPF retrans message.";
                                    leaf nbr-router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of a neighbor router.";
                                    }
    
                                    leaf nbr-ip-addr {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "IP address of the neighbor interface.";
                                    }
    
                                    leaf lsa-type {
                                      type lsa-type;
                                      description
                                        "LSA type.";
                                    }
    
                                    leaf link-state-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of the link state.";
                                    }
    
                                    leaf adv-router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Advertisement router ID.";
                                    }
    
                                    leaf intf-ip-addr {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Interface IP address.";
                                    }
    
                                    leaf router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of the local router.";
                                    }
    
                                    leaf lsa-sequence {
                                      type pub-type:hex-binary;
                                      description
                                        "LSA sequence number.";
                                    }
    
                                    leaf lsa-age {
                                      type uint32;
                                      description
                                        "LSA aging time.";
                                    }
                                  }  // list retrans-queue
                                }  // container retrans-queues
    
                                container ldp-sync-statistic {
                                  config false;
                                  description
                                    "Statistics of the status of LDP and OSPF synchronization.";
                                  leaf max-cost-interval {
                                    type uint16;
                                    description
                                      "The interval when OSPF advertises the maximum metric in LSAs sent by the local device.";
                                  }
    
                                  leaf max-cost-infinite {
                                    type boolean;
                                    description
                                      "Always advertise the maximum cost.";
                                  }
    
                                  leaf ldp-state {
                                    type ldp-state;
                                    description
                                      "The status of an LDP session.";
                                  }
    
                                  leaf sync-state {
                                    type ospf-sync-state;
                                    description
                                      "The status of LDP and OSPF synchronization.";
                                  }
                                }  // container ldp-sync-statistic
    
                                container bfd-statistics {
                                  config false;
                                  description
                                    "List of the neighbors enabled with BFD.";
                                  list bfd-statistic {
                                    key "nbr-router-id local-ip remote-ip";
                                    description
                                      "Statistics of the neighbors enabled with BFD.";
                                    leaf nbr-router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of a neighbor router.";
                                    }
    
                                    leaf local-ip {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Local IP address.";
                                    }
    
                                    leaf remote-ip {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "Remote IP address.";
                                    }
    
                                    leaf state {
                                      type bfd-state;
                                      description
                                        "BFD status.";
                                    }
    
                                    leaf diagnostic-info {
                                      type bfd-diag-info-type;
                                      description
                                        "Diagnostic information.";
                                    }
    
                                    leaf local-router-id {
                                      type inet:ipv4-address-no-zone;
                                      description
                                        "ID of the local router.";
                                    }
    
                                    leaf rx-interval {
                                      type uint32;
                                      description
                                        "Min rx interval.";
                                    }
    
                                    leaf tx-interval {
                                      type uint32;
                                      description
                                        "Min tx interval.";
                                    }
    
                                    leaf multiplier {
                                      type uint32;
                                      description
                                        "Detect multiplier.";
                                    }
    
                                    leaf local-dis {
                                      type uint32;
                                      description
                                        "Local discriminator.";
                                    }
                                  }  // list bfd-statistic
                                }  // container bfd-statistics
    
                                container error-data {
                                  config false;
                                  description
                                    "Statistics of error data.";
                                  leaf router-id {
                                    type inet:ipv4-address-no-zone;
                                    description
                                      "Router ID.";
                                  }
    
                                  leaf same-ip-pkt-cnt {
                                    type uint32;
                                    description
                                      "SameIp packet count.";
                                  }
    
                                  leaf bad-pkt-cnt {
                                    type uint32;
                                    description
                                      "Bad packet.";
                                  }
    
                                  leaf bad-ver-cnt {
                                    type uint32;
                                    description
                                      "Bad version.";
                                  }
    
                                  leaf bad-chksum-pkt-cnt {
                                    type uint32;
                                    description
                                      "Bad checksum.";
                                  }
    
                                  leaf bad-area-pkt-cnt {
                                    type uint32;
                                    description
                                      "Bad area ID.";
                                  }
    
                                  leaf pkt-rcv-unnumber {
                                    type uint32;
                                    description
                                      "Drop on unnumbered interface.";
                                  }
    
                                  leaf bad-virt-link-cnt {
                                    type uint32;
                                    description
                                      "Bad virtual link.";
                                  }
    
                                  leaf auth-type-fail-cnt {
                                    type uint32;
                                    description
                                      "Bad authentication type.";
                                  }
    
                                  leaf auth-key-fail-cnt {
                                    type uint32;
                                    description
                                      "Bad authentication key.";
                                  }
    
                                  leaf short-pkt-cnt {
                                    type uint32;
                                    description
                                      "Packet too small.";
                                  }
    
                                  leaf long-pkt-cnt {
                                    type uint32;
                                    description
                                      "Packet size > IP length.";
                                  }
    
                                  leaf tx-err-cnt {
                                    type uint32;
                                    description
                                      "Transmit error.";
                                  }
    
                                  leaf if-down-cnt {
                                    type uint32;
                                    description
                                      "Interface down.";
                                  }
    
                                  leaf no-nbr {
                                    type uint32;
                                    description
                                      "Unknown neighbor.";
                                  }
    
                                  leaf mis-netmask-cnt {
                                    type uint32;
                                    description
                                      "Netmask mismatch.";
                                  }
    
                                  leaf mis-hello-intl-cnt {
                                    type uint32;
                                    description
                                      "Hello timer mismatch.";
                                  }
    
                                  leaf mis-dead-intl-cnt {
                                    type uint32;
                                    description
                                      "Dead timer mismatch.";
                                  }
    
                                  leaf mis-ext-cnt {
                                    type uint32;
                                    description
                                      "Extern option mismatch.";
                                  }
    
                                  leaf router-id-confusion {
                                    type uint32;
                                    description
                                      "DD router ID confusion.";
                                  }
    
                                  leaf vlink-nbr-mis-cnt {
                                    type uint32;
                                    description
                                      "Virtual neighbor unknown.";
                                  }
    
                                  leaf nbma-nbr-err-cnt {
                                    type uint32;
                                    description
                                      "NBMA neighbor unknown.";
                                  }
    
                                  leaf inval-src-hello-cnt {
                                    type uint32;
                                    description
                                      "Invalid source.";
                                  }
    
                                  leaf dd-nbr-low-cnt {
                                    type uint32;
                                    description
                                      "Neighbour state low for DD.";
                                  }
    
                                  leaf dd-rtrid-cnt {
                                    type uint32;
                                    description
                                      "DD router ID confusion.";
                                  }
    
                                  leaf dd-opt-mismatch-cnt {
                                    type uint32;
                                    description
                                      "Extern option mismatch.";
                                  }
    
                                  leaf dd-unknwn-lsa-cnt {
                                    type uint32;
                                    description
                                      "DD packet unknown LSA type.";
                                  }
    
                                  leaf dd-mtu-mismatch-cnt {
                                    type uint32;
                                    description
                                      "MTU option mismatch.";
                                  }
    
                                  leaf ack-nbr-low-cnt {
                                    type uint32;
                                    description
                                      "Neighbour state low for LS acknowledgement.";
                                  }
    
                                  leaf ack-bad-cnt {
                                    type uint32;
                                    description
                                      "Bad ack.";
                                  }
    
                                  leaf ack-duplicate-cnt {
                                    type uint32;
                                    description
                                      "Duplicate ack.";
                                  }
    
                                  leaf ack-unknwn-lsa-cnt {
                                    type uint32;
                                    description
                                      "LSAck packet unknown LSA type.";
                                  }
    
                                  leaf req-nbr-low-cnt {
                                    type uint32;
                                    description
                                      "Neighbour state low for LS request.";
                                  }
    
                                  leaf req-empty-cnt {
                                    type uint32;
                                    description
                                      "Empty request.";
                                  }
    
                                  leaf req-bad-cnt {
                                    type uint32;
                                    description
                                      "Bad request.";
                                  }
    
                                  leaf upd-nbr-low-cnt {
                                    type uint32;
                                    description
                                      "Neighbour state low for LS update.";
                                  }
    
                                  leaf upd-self-newr-cnt {
                                    type uint32;
                                    description
                                      "Newer self generate LSA.";
                                  }
    
                                  leaf upd-min-lsarr-cnt {
                                    type uint32;
                                    description
                                      "Received LSA within LSA arrival interval.";
                                  }
    
                                  leaf upd-ls-chksum-cnt {
                                    type uint32;
                                    description
                                      "LSA checksum bad.";
                                  }
    
                                  leaf upd-les-recent-cnt {
                                    type uint32;
                                    description
                                      "Received less recent LSA.";
                                  }
    
                                  leaf upd-unknw-lsa-cnt {
                                    type uint32;
                                    description
                                      "LSUpdate packet unknown LSA type.";
                                  }
    
                                  leaf opq9-flood-cnt {
                                    type uint32;
                                    description
                                      "Opq9 of flooding scope.";
                                  }
    
                                  leaf opq10-flood-cnt {
                                    type uint32;
                                    description
                                      "Opq10 of flooding scope.";
                                  }
    
                                  leaf opq11-flood-cnt {
                                    type uint32;
                                    description
                                      "Opq11 of flooding scope.";
                                  }
    
                                  leaf rxmt-dd-err-cnt {
                                    type uint32;
                                    description
                                      "Number for DD packet.";
                                  }
    
                                  leaf rxmt-req-err-cnt {
                                    type uint32;
                                    description
                                      "Number for request packet.";
                                  }
    
                                  leaf rxmt-upd-err-cnt {
                                    type uint32;
                                    description
                                      "Number for update packet.";
                                  }
    
                                  leaf gr-invalid-lsa-cnt {
                                    type uint32;
                                    description
                                      "Number of invalid LSAs.";
                                  }
    
                                  leaf gr-invalid-pol-cnt {
                                    type uint32;
                                    description
                                      "Number of policy failed LSAs.";
                                  }
    
                                  leaf gr-invalid-prd-cnt {
                                    type uint32;
                                    description
                                      "Number of wrong period LSAs.";
                                  }
    
                                  leaf tunnel-cost-cnt {
                                    type uint32;
                                    description
                                      "Tunnel cost mistake.";
                                  }
    
                                  leaf peer-net-type-cnt {
                                    type uint32;
                                    description
                                      "The network type of the neighbor interface is not consistent.";
                                  }
    
                                  leaf hello-dr-mis-cnt {
                                    type uint32;
                                    description
                                      "The DR or BDR in receiving hello packet is not same with the DR or BDR.";
                                  }
    
                                  leaf gen-ttl-err-cnt {
                                    type uint32;
                                    description
                                      "The TTL of the packet is error.";
                                  }
    
                                  leaf over-max-buffer-length-cnt {
                                    type uint32;
                                    description
                                      "Number of packet that length is more than max buffer length.";
                                  }
    
                                  leaf bad-net-segment-packet-cnt {
                                    type uint32;
                                    description
                                      "Number of bad network segment packet.";
                                  }
    
                                  leaf bad-routerid-packet-cnt {
                                    type uint32;
                                    description
                                      "Number of non-hello packet that router ID is different.";
                                  }
    
                                  leaf destination-ip-error-packet-cnt {
                                    type uint32;
                                    description
                                      "Number of bad destIpAddress packet.";
                                  }
    
                                  leaf passive-intf-packet-cnt {
                                    type uint32;
                                    description
                                      "Number of packet that received from silent Interface.";
                                  }
    
                                  leaf hello-nbr-reach-limit-cnt {
                                    type uint32;
                                    description
                                      "Number of hello packet that discard because the number of neighbour reached the limit.";
                                  }
    
                                  leaf hello-hold-down-cnt {
                                    type uint32;
                                    description
                                      "Number of hello packet that discard because the neighbour is in hold-down state.";
                                  }
    
                                  leaf hello-memory-overload-cnt {
                                    type uint32;
                                    description
                                      "Number of hello packet that discard because memory is overload.";
                                  }
    
                                  leaf hello-cpu-overload-cnt {
                                    type uint32;
                                    description
                                      "Number of hello packet that discard because cpu is overload.";
                                  }
    
                                  leaf dd-nbr-reach-limit-cnt {
                                    type uint32;
                                    description
                                      "Number of dd packet that discard because the number of neighbour reached the limit.";
                                  }
    
                                  leaf dd-cpu-overload-cnt {
                                    type uint32;
                                    description
                                      "Number of dd packet that discard because cpu is overload.";
                                  }
    
                                  leaf ri-lsa-tlv-error-cnt {
                                    type uint32;
                                    description
                                      "Router information lsa TLV error.";
                                  }
    
                                  leaf ri-lsa-sub-tlv-error-cnt {
                                    type uint32;
                                    description
                                      "Router information lsa sub TLV error.";
                                  }
    
                                  leaf ext-prefix-lsa-tlv-error-cnt {
                                    type uint32;
                                    description
                                      "Extend prefix lsa TLV error.";
                                  }
    
                                  leaf ext-prefix-lsa-sub-tlv-error-cnt {
                                    type uint32;
                                    description
                                      "Extend prefix lsa sub TLV error.";
                                  }
    
                                  leaf ext-link-lsa-tlv-error-cnt {
                                    type uint32;
                                    description
                                      "Extend link lsa TLV error.";
                                  }
    
                                  leaf ext-link-lsa-sub-tlv-error-cnt {
                                    type uint32;
                                    description
                                      "Extend link lsa sub TLV error.";
                                  }
    
                                  leaf bad-sr-algo-cnt {
                                    type uint32;
                                    description
                                      "Bad SR-Algorithm TLV.";
                                  }
    
                                  leaf bad-sid-range-cnt {
                                    type uint32;
                                    description
                                      "Bad SID/Label Range TLV.";
                                  }
    
                                  leaf bad-sid-cnt {
                                    type uint32;
                                    description
                                      "Bad SID/Label Sub TLV.";
                                  }
    
                                  leaf bad-adj-sid-cnt {
                                    type uint32;
                                    description
                                      "Bad Adj-SID Sub TLV.";
                                  }
    
                                  leaf bad-prefix-sid-cnt {
                                    type uint32;
                                    description
                                      "Bad Prefix-SID Sub TLV.";
                                  }
    
                                  leaf bad-ext-prefix-range-cnt {
                                    type uint32;
                                    description
                                      "Bad Extended Prefix Range TLV.";
                                  }
    
                                  leaf bad-lan-adj-sid-cnt {
                                    type uint32;
                                    description
                                      "Bad LAN Adj-SID Sub TLV.";
                                  }
    
                                  leaf bad-ext-prefix-cnt {
                                    type uint32;
                                    description
                                      "Bad Extended Prefix TLV.";
                                  }
    
                                  leaf bad-ext-link-cnt {
                                    type uint32;
                                    description
                                      "Bad Extended Link TLV.";
                                  }
                                }  // container error-data
                              }  // list multi-area
                            }  // container multi-areas
    
                            container srlgs {
                              description
                                "List of share risk link group.";
                              list srlg {
                                key "group-id";
                                description
                                  "Configure share risk link group.";
                                leaf group-id {
                                  type uint32 {
                                    range
                                      "0..4294967295";
                                  }
                                  description
                                    "Set the srlg group ID.";
                                }
                              }  // list srlg
                            }  // container srlgs
    
                            container disp-data {
                              config false;
                              description
                                "Statistics of OSPF interface.";
                              leaf suppress-reach-block {
                                type boolean;
                                description
                                  "Reachability suppression is disabled.";
                              }
    
                              leaf silent-enable {
                                type boolean;
                                description
                                  "To suppress an interface from sending or receiving OSPF packets.";
                              }
    
                              leaf dr {
                                type inet:ipv4-address-no-zone;
                                description
                                  "DR of the network where an interface resides.";
                              }
    
                              leaf bdr {
                                type inet:ipv4-address-no-zone;
                                description
                                  "BDR of the network where an interface resides.";
                              }
    
                              leaf state {
                                type intf-state;
                                description
                                  "Status of an interface, which is determined according to the OSPF interface state machines.";
                              }
    
                              leaf mtu {
                                type uint32;
                                description
                                  "MTU of an interface.";
                              }
    
                              leaf ip {
                                type inet:ipv4-address-no-zone;
                                description
                                  "IP address of an interface.";
                              }
    
                              leaf cost {
                                type int32;
                                description
                                  "Cost of an interface.";
                              }
    
                              leaf gr-state {
                                type gr-state;
                                description
                                  "Status of GR of an interface. The available options are as follows:
    Normal: The interface is in normal state.
    Restarter: The interface is in GR state.
    Helper: The interface is in helper state.";
                              }
    
                              leaf previous-state {
                                type intf-state;
                                description
                                  "Previous status of the interface.";
                              }
    
                              leaf opaque-id {
                                type uint32;
                                description
                                  "Oapque ID of interface.";
                              }
    
                              leaf mpls-te-link {
                                type boolean;
                                description
                                  "MPLS TE link status enabled.";
                              }
    
                              leaf peer-flap-status {
                                type peer-flapping-status;
                                description
                                  "Peer flapping suppress status.";
                              }
    
                              leaf peer-flap-count {
                                type uint32;
                                description
                                  "Peer flapping suppress count.";
                              }
    
                              leaf peer-flap-threshold {
                                type uint32 {
                                  range
                                    "1..1000";
                                }
                                description
                                  "Peer flapping suppress threshold.";
                              }
    
                              leaf peer-flap-time {
                                type yang:date-and-time;
                                description
                                  "Peer suppress-flapping start time.";
                              }
    
                              leaf peer-flap-remain-timer {
                                type uint32 {
                                  range
                                    "0..1000";
                                }
                                units "s";
                                description
                                  "Peer flapping suppress remain timer.";
                              }
    
                              leaf bandwidth {
                                type uint32;
                                description
                                  "Current interface bandwidth.";
                              }
                            }  // container disp-data
    
                            container request-queues {
                              config false;
                              description
                                "List of the OSPF request message.";
                              list request-queue {
                                key "nbr-router-id nbr-ip-addr lsa-type link-state-id adv-router-id";
                                description
                                  "Statistics of the OSPF request message.";
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf nbr-ip-addr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "IP address of the neighbor interface.";
                                }
    
                                leaf lsa-type {
                                  type lsa-type;
                                  description
                                    "LSA type.";
                                }
    
                                leaf link-state-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the link state.";
                                }
    
                                leaf adv-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Advertisement router ID.";
                                }
    
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the local router.";
                                }
    
                                leaf intf-ip-addr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Interface IP address.";
                                }
    
                                leaf lsa-sequence {
                                  type pub-type:hex-binary;
                                  description
                                    "LSA sequence number.";
                                }
    
                                leaf lsa-age {
                                  type uint32;
                                  description
                                    "LSA aging time.";
                                }
                              }  // list request-queue
                            }  // container request-queues
    
                            container retrans-queues {
                              config false;
                              description
                                "List of the OSPF retrans message.";
                              list retrans-queue {
                                key "nbr-router-id nbr-ip-addr lsa-type link-state-id adv-router-id";
                                description
                                  "Statistics of the OSPF retrans message.";
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf nbr-ip-addr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "IP address of the neighbor interface.";
                                }
    
                                leaf lsa-type {
                                  type lsa-type;
                                  description
                                    "LSA type.";
                                }
    
                                leaf link-state-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the link state.";
                                }
    
                                leaf adv-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Advertisement router ID.";
                                }
    
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the local router.";
                                }
    
                                leaf intf-ip-addr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Interface IP address.";
                                }
    
                                leaf lsa-sequence {
                                  type pub-type:hex-binary;
                                  description
                                    "LSA sequence number.";
                                }
    
                                leaf lsa-age {
                                  type uint32;
                                  description
                                    "LSA aging time.";
                                }
                              }  // list retrans-queue
                            }  // container retrans-queues
    
                            container ldp-sync-statistic {
                              config false;
                              description
                                "Statistics of the status of LDP and OSPF synchronization.";
                              leaf max-cost-interval {
                                type uint16;
                                description
                                  "The interval when OSPF advertises the maximum metric in LSAs sent by the local device.";
                              }
    
                              leaf max-cost-infinite {
                                type boolean;
                                description
                                  "Always advertise the maximum cost.";
                              }
    
                              leaf ldp-state {
                                type ldp-state;
                                description
                                  "The status of an LDP session.";
                              }
    
                              leaf sync-state {
                                type ospf-sync-state;
                                description
                                  "The status of LDP and OSPF synchronization.";
                              }
                            }  // container ldp-sync-statistic
    
                            container nbr-statistics {
                              config false;
                              description
                                "List of OSPF peer.";
                              list nbr-statistic {
                                key "router-id ip";
                                description
                                  "Statistics of OSPF peer.";
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf ip {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Address of a neighbor interface.";
                                }
    
                                leaf intf-ip {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "IP address of an interface.";
                                }
    
                                leaf gr-state {
                                  type nbr-gr-state;
                                  description
                                    "GR state.";
                                }
    
                                leaf state {
                                  type nbr-state;
                                  description
                                    "Neighbor status.";
                                }
    
                                leaf mode {
                                  type nbr-mode;
                                  description
                                    "Mode of the DD. The available options are master and slave.";
                                }
    
                                leaf priority {
                                  type int32;
                                  description
                                    "Priority of a neighbor router.";
                                }
    
                                leaf dr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Designated router.";
                                }
    
                                leaf bdr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Backup designated router.";
                                }
    
                                leaf intf-mtu {
                                  type uint32;
                                  description
                                    "MTU of a neighbor.";
                                }
    
                                leaf dead-due-timer {
                                  type uint32;
                                  description
                                    "Dead due timer.";
                                }
    
                                leaf retran-intv {
                                  type uint32;
                                  description
                                    "Neighbor retranIntv.";
                                }
    
                                leaf up-time {
                                  type string {
                                    length
                                      "1..16";
                                  }
                                  description
                                    "Time when a neighbor goes up.";
                                }
    
                                leaf up-time-stamp {
                                  type yang:date-and-time;
                                  description
                                    "Neighbor up time stamp.";
                                }
    
                                leaf auth-sequence {
                                  type uint32;
                                  description
                                    "Neighbor authentication sequence number.";
                                }
    
                                leaf adj-sid {
                                  type uint32;
                                  description
                                    "Adjacency SID.";
                                }
    
                                leaf adj-weight {
                                  type uint32;
                                  description
                                    "Adjacency weight.";
                                }
    
                                leaf adj-flags {
                                  type string {
                                    length
                                      "1..20";
                                  }
                                  description
                                    "Adjacency flags.";
                                }
                              }  // list nbr-statistic
                            }  // container nbr-statistics
    
                            container bfd-statistics {
                              config false;
                              description
                                "List of the neighbors enabled with BFD.";
                              list bfd-statistic {
                                key "nbr-router-id local-ip remote-ip";
                                description
                                  "Statistics of the neighbors enabled with BFD.";
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf local-ip {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Local IP address.";
                                }
    
                                leaf remote-ip {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Remote IP address.";
                                }
    
                                leaf state {
                                  type bfd-state;
                                  description
                                    "BFD status.";
                                }
    
                                leaf diagnostic-info {
                                  type bfd-diag-info-type;
                                  description
                                    "Diagnostic information.";
                                }
    
                                leaf local-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the local router.";
                                }
    
                                leaf rx-interval {
                                  type uint32;
                                  description
                                    "Min rx interval.";
                                }
    
                                leaf tx-interval {
                                  type uint32;
                                  description
                                    "Min tx interval.";
                                }
    
                                leaf multiplier {
                                  type uint32;
                                  description
                                    "Detect multiplier.";
                                }
    
                                leaf local-dis {
                                  type uint32;
                                  description
                                    "Local discriminator.";
                                }
                              }  // list bfd-statistic
                            }  // container bfd-statistics
    
                            container error-data {
                              config false;
                              description
                                "Statistics of error data.";
                              leaf router-id {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Router ID.";
                              }
    
                              leaf same-ip-pkt-cnt {
                                type uint32;
                                description
                                  "SameIp packet count.";
                              }
    
                              leaf bad-pkt-cnt {
                                type uint32;
                                description
                                  "Bad packet.";
                              }
    
                              leaf bad-ver-cnt {
                                type uint32;
                                description
                                  "Bad version.";
                              }
    
                              leaf bad-chksum-pkt-cnt {
                                type uint32;
                                description
                                  "Bad checksum.";
                              }
    
                              leaf bad-area-pkt-cnt {
                                type uint32;
                                description
                                  "Bad area ID.";
                              }
    
                              leaf pkt-rcv-unnumber {
                                type uint32;
                                description
                                  "Drop on unnumbered interface.";
                              }
    
                              leaf bad-virt-link-cnt {
                                type uint32;
                                description
                                  "Bad virtual link.";
                              }
    
                              leaf auth-type-fail-cnt {
                                type uint32;
                                description
                                  "Bad authentication type.";
                              }
    
                              leaf auth-key-fail-cnt {
                                type uint32;
                                description
                                  "Bad authentication key.";
                              }
    
                              leaf short-pkt-cnt {
                                type uint32;
                                description
                                  "Packet too small.";
                              }
    
                              leaf long-pkt-cnt {
                                type uint32;
                                description
                                  "Packet size > IP length.";
                              }
    
                              leaf tx-err-cnt {
                                type uint32;
                                description
                                  "Transmit error.";
                              }
    
                              leaf if-down-cnt {
                                type uint32;
                                description
                                  "Interface down.";
                              }
    
                              leaf no-nbr {
                                type uint32;
                                description
                                  "Unknown neighbor.";
                              }
    
                              leaf mis-netmask-cnt {
                                type uint32;
                                description
                                  "Netmask mismatch.";
                              }
    
                              leaf mis-hello-intl-cnt {
                                type uint32;
                                description
                                  "Hello timer mismatch.";
                              }
    
                              leaf mis-dead-intl-cnt {
                                type uint32;
                                description
                                  "Dead timer mismatch.";
                              }
    
                              leaf mis-ext-cnt {
                                type uint32;
                                description
                                  "Extern option mismatch.";
                              }
    
                              leaf router-id-confusion {
                                type uint32;
                                description
                                  "DD router ID confusion.";
                              }
    
                              leaf vlink-nbr-mis-cnt {
                                type uint32;
                                description
                                  "Virtual neighbor unknown.";
                              }
    
                              leaf nbma-nbr-err-cnt {
                                type uint32;
                                description
                                  "NBMA neighbor unknown.";
                              }
    
                              leaf inval-src-hello-cnt {
                                type uint32;
                                description
                                  "Invalid source.";
                              }
    
                              leaf dd-nbr-low-cnt {
                                type uint32;
                                description
                                  "Neighbour state low for DD.";
                              }
    
                              leaf dd-rtrid-cnt {
                                type uint32;
                                description
                                  "DD router ID confusion.";
                              }
    
                              leaf dd-opt-mismatch-cnt {
                                type uint32;
                                description
                                  "Extern option mismatch.";
                              }
    
                              leaf dd-unknwn-lsa-cnt {
                                type uint32;
                                description
                                  "DD packet unknown LSA type.";
                              }
    
                              leaf dd-mtu-mismatch-cnt {
                                type uint32;
                                description
                                  "MTU option mismatch.";
                              }
    
                              leaf ack-nbr-low-cnt {
                                type uint32;
                                description
                                  "Neighbour state low for LS acknowledgement.";
                              }
    
                              leaf ack-bad-cnt {
                                type uint32;
                                description
                                  "Bad ack.";
                              }
    
                              leaf ack-duplicate-cnt {
                                type uint32;
                                description
                                  "Duplicate ack.";
                              }
    
                              leaf ack-unknwn-lsa-cnt {
                                type uint32;
                                description
                                  "LSAck packet unknown LSA type.";
                              }
    
                              leaf req-nbr-low-cnt {
                                type uint32;
                                description
                                  "Neighbour state low for LS request.";
                              }
    
                              leaf req-empty-cnt {
                                type uint32;
                                description
                                  "Empty request.";
                              }
    
                              leaf req-bad-cnt {
                                type uint32;
                                description
                                  "Bad request.";
                              }
    
                              leaf upd-nbr-low-cnt {
                                type uint32;
                                description
                                  "Neighbour state low for LS update.";
                              }
    
                              leaf upd-self-newr-cnt {
                                type uint32;
                                description
                                  "Newer self generate LSA.";
                              }
    
                              leaf upd-min-lsarr-cnt {
                                type uint32;
                                description
                                  "Received LSA within LSA arrival interval.";
                              }
    
                              leaf upd-ls-chksum-cnt {
                                type uint32;
                                description
                                  "LSA checksum bad.";
                              }
    
                              leaf upd-les-recent-cnt {
                                type uint32;
                                description
                                  "Received less recent LSA.";
                              }
    
                              leaf upd-unknw-lsa-cnt {
                                type uint32;
                                description
                                  "LSUpdate packet unknown LSA type.";
                              }
    
                              leaf opq9-flood-cnt {
                                type uint32;
                                description
                                  "Opq9 of flooding scope.";
                              }
    
                              leaf opq10-flood-cnt {
                                type uint32;
                                description
                                  "Opq10 of flooding scope.";
                              }
    
                              leaf opq11-flood-cnt {
                                type uint32;
                                description
                                  "Opq11 of flooding scope.";
                              }
    
                              leaf rxmt-dd-err-cnt {
                                type uint32;
                                description
                                  "Number for DD packet.";
                              }
    
                              leaf rxmt-req-err-cnt {
                                type uint32;
                                description
                                  "Number for request packet.";
                              }
    
                              leaf rxmt-upd-err-cnt {
                                type uint32;
                                description
                                  "Number for update packet.";
                              }
    
                              leaf gr-invalid-lsa-cnt {
                                type uint32;
                                description
                                  "Number of invalid LSAs.";
                              }
    
                              leaf gr-invalid-pol-cnt {
                                type uint32;
                                description
                                  "Number of policy failed LSAs.";
                              }
    
                              leaf gr-invalid-prd-cnt {
                                type uint32;
                                description
                                  "Number of wrong period LSAs.";
                              }
    
                              leaf tunnel-cost-cnt {
                                type uint32;
                                description
                                  "Tunnel cost mistake.";
                              }
    
                              leaf peer-net-type-cnt {
                                type uint32;
                                description
                                  "The network type of the neighbor interface is not consistent.";
                              }
    
                              leaf hello-dr-mis-cnt {
                                type uint32;
                                description
                                  "The DR or BDR in receiving hello packet is not same with the DR or BDR.";
                              }
    
                              leaf gen-ttl-err-cnt {
                                type uint32;
                                description
                                  "The TTL of the packet is error.";
                              }
    
                              leaf over-max-buffer-length-cnt {
                                type uint32;
                                description
                                  "Number of packet that length is more than max buffer length.";
                              }
    
                              leaf bad-net-segment-packet-cnt {
                                type uint32;
                                description
                                  "Number of bad network segment packet.";
                              }
    
                              leaf bad-routerid-packet-cnt {
                                type uint32;
                                description
                                  "Number of non-hello packet that router ID is different.";
                              }
    
                              leaf destination-ip-error-packet-cnt {
                                type uint32;
                                description
                                  "Number of bad destIpAddress packet.";
                              }
    
                              leaf passive-intf-packet-cnt {
                                type uint32;
                                description
                                  "Number of packet that received from silent Interface.";
                              }
    
                              leaf hello-nbr-reach-limit-cnt {
                                type uint32;
                                description
                                  "Number of hello packet that discard because the number of neighbour reached the limit.";
                              }
    
                              leaf hello-hold-down-cnt {
                                type uint32;
                                description
                                  "Number of hello packet that discard because the neighbour is in hold-down state.";
                              }
    
                              leaf hello-memory-overload-cnt {
                                type uint32;
                                description
                                  "Number of hello packet that discard because memory is overload.";
                              }
    
                              leaf hello-cpu-overload-cnt {
                                type uint32;
                                description
                                  "Number of hello packet that discard because CPU is overload.";
                              }
    
                              leaf dd-nbr-reach-limit-cnt {
                                type uint32;
                                description
                                  "Number of dd packet that discard because the number of neighbour reached the limit.";
                              }
    
                              leaf dd-cpu-overload-cnt {
                                type uint32;
                                description
                                  "Number of dd packet that discard because CPU is overload.";
                              }
    
                              leaf dd-mem-overload-cnt {
                                type uint32;
                                description
                                  "Number of dd packet that discard because memory is overload.";
                              }
    
                              leaf ri-lsa-tlv-error-cnt {
                                type uint32;
                                description
                                  "Router information lsa TLV error.";
                              }
    
                              leaf ri-lsa-sub-tlv-error-cnt {
                                type uint32;
                                description
                                  "Router information lsa sub TLV error.";
                              }
    
                              leaf ext-prefix-lsa-tlv-error-cnt {
                                type uint32;
                                description
                                  "Extend prefix lsa TLV error.";
                              }
    
                              leaf ext-prefix-lsa-sub-tlv-error-cnt {
                                type uint32;
                                description
                                  "Extend prefix lsa sub TLV error.";
                              }
    
                              leaf ext-link-lsa-tlv-error-cnt {
                                type uint32;
                                description
                                  "Extend link lsa TLV error.";
                              }
    
                              leaf ext-link-lsa-sub-tlv-error-cnt {
                                type uint32;
                                description
                                  "Extend link lsa sub TLV error.";
                              }
    
                              leaf bad-sr-algo-cnt {
                                type uint32;
                                description
                                  "Bad SR-Algorithm TLV.";
                              }
    
                              leaf bad-sid-range-cnt {
                                type uint32;
                                description
                                  "Bad SID/Label Range TLV.";
                              }
    
                              leaf bad-sid-cnt {
                                type uint32;
                                description
                                  "Bad SID/Label Sub TLV.";
                              }
    
                              leaf bad-adj-sid-cnt {
                                type uint32;
                                description
                                  "Bad Adj-SID Sub TLV.";
                              }
    
                              leaf bad-prefix-sid-cnt {
                                type uint32;
                                description
                                  "Bad Prefix-SID Sub TLV.";
                              }
    
                              leaf bad-ext-prefix-range-cnt {
                                type uint32;
                                description
                                  "Bad Extended Prefix Range TLV.";
                              }
    
                              leaf bad-lan-adj-sid-cnt {
                                type uint32;
                                description
                                  "Bad LAN Adj-SID Sub TLV.";
                              }
    
                              leaf bad-ext-prefix-cnt {
                                type uint32;
                                description
                                  "Bad Extended Prefix TLV.";
                              }
    
                              leaf bad-ext-link-cnt {
                                type uint32;
                                description
                                  "Bad Extended Link TLV.";
                              }
                            }  // container error-data
                          }  // list interface
                        }  // container interfaces
    
                        container disp-data {
                          config false;
                          description
                            "Statistics of OSPF area.";
                          leaf spf-schedule-times {
                            type uint32;
                            description
                              "Times of calculating SPF.";
                          }
    
                          leaf interface-count {
                            type uint32;
                            description
                              "Number of interfaces.";
                          }
    
                          leaf exchange-and-loading-nbr {
                            type uint32;
                            description
                              "Number of neighbors in exchange/loading state.";
                          }
    
                          leaf router-id-conflict {
                            type router-id-conflict-state;
                            description
                              "Router ID conflict state.";
                          }
    
                          leaf import-limit-status {
                            type import-limit-status;
                            description
                              "Limit status of imported routes.";
                          }
    
                          leaf self-nssa-lsa-count {
                            type uint32;
                            description
                              "Number of NSSA LSAs that are generated locally.";
                          }
    
                          leaf nssa-trans-state {
                            type nssa-trans-state;
                            description
                              "NSSA translator state.";
                          }
    
                          leaf nssa-trans-role {
                            type nssa-trans-role;
                            description
                              "NSSA translator role.";
                          }
    
                          leaf nssa-trans-stab-intv {
                            type boolean;
                            description
                              "Continuing NSSA translation duties during stability interval.";
                          }
                        }  // container disp-data
                      }  // list area
                    }  // container areas
    
                    container disp-data {
                      config false;
                      description
                        "Statistics of OSPF site.";
                      leaf effective-router-id {
                        type inet:ipv4-address-no-zone;
                        description
                          "Effective router ID.";
                      }
    
                      leaf border-router {
                        type border-router;
                        description
                          "Router type.";
                      }
    
                      leaf ietf-mode {
                        type ietf-mode;
                        description
                          "Global DS TE mode.";
                      }
    
                      leaf spf-count {
                        type uint32;
                        description
                          "SPF computation count.";
                      }
    
                      leaf area-count {
                        type uint32;
                        description
                          "Number of areas.";
                      }
    
                      leaf nssa-count {
                        type uint32;
                        description
                          "Number of NSSA areas.";
                      }
    
                      leaf exchange-and-loading-nbr {
                        type uint32;
                        description
                          "Neighbor in exchange/loading state.";
                      }
    
                      leaf lsdb-overflow-status {
                        type lsdb-overflow-status;
                        description
                          "LSDB overflow status.";
                      }
    
                      leaf non-default-ase-lsa-count {
                        type uint32;
                        description
                          "Number of non default AS external LSAs.";
                      }
    
                      leaf lsdb-overflow-remain {
                        type uint32;
                        description
                          "Remaining time of the overflow state.";
                      }
    
                      leaf import-limit-status {
                        type import-limit-status;
                        description
                          "Limit status of imported external routes.";
                      }
    
                      leaf self-ase-lsa-count {
                        type uint32;
                        description
                          "Number of AS external LSAs that are generated locally.";
                      }
                    }  // container disp-data
    
                    container dynamic-hostnames {
                      config false;
                      description
                        "List of dynamic hostname.";
                      list dynamic-hostname {
                        key "scope area-id router-id";
                        description
                          "Statistics of dynamic hostname.";
                        leaf scope {
                          type hostname-scope;
                          description
                            "Scope of the hostname.";
                        }
    
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Area ID to which hostname belongs.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router ID to which hostname belongs.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..256";
                          }
                          description
                            "Hostname associated with the router ID.";
                        }
                      }  // list dynamic-hostname
                    }  // container dynamic-hostnames
    
                    container bfd-stat-datas {
                      config false;
                      description
                        "List of BFD status data.";
                      list bfd-stat-data {
                        key "area-id nbr-router-id if-name";
                        description
                          "Statistics of BFD status data.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf nbr-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor router ID.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf state {
                          type bfd-state;
                          description
                            "BFD status.";
                        }
    
                        leaf rx-interval {
                          type uint32;
                          description
                            "Min rx interval.";
                        }
    
                        leaf tx-interval {
                          type uint32;
                          description
                            "Min tx interval.";
                        }
    
                        leaf multiplier {
                          type uint32;
                          description
                            "Detect multiplier.";
                        }
    
                        leaf local-dis {
                          type uint32;
                          description
                            "Local discriminator.";
                        }
    
                        leaf local-ip-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP local address.";
                        }
    
                        leaf remote-ip-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP remote address.";
                        }
    
                        leaf diagnostic-info {
                          type bfd-diag-info-type;
                          description
                            "Diagnostic information.";
                        }
                      }  // list bfd-stat-data
                    }  // container bfd-stat-datas
    
                    container slink-nbr-statistics {
                      config false;
                      description
                        "List of slink nbr statistics info.";
                      list slink-nbr-statistic {
                        key "area-id src-addr dest-addr nbr-id";
                        description
                          "Statistics of slink nbr info.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf src-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "Scource address.";
                        }
    
                        leaf dest-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "Destination address.";
                        }
    
                        leaf nbr-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor router ID.";
                        }
    
                        leaf nbr-state {
                          type vlink-nbr-state;
                          description
                            "Neighbor state.";
                        }
    
                        leaf state {
                          type vlink-if-state;
                          description "State.";
                        }
    
                        leaf gr-status {
                          type nbr-gr-state;
                          description
                            "GR status.";
                        }
    
                        leaf hello-intv {
                          type int32;
                          description
                            "Hello interval.";
                        }
    
                        leaf dead-intv {
                          type int32;
                          description
                            "Dead interval.";
                        }
    
                        leaf trans-delay-intv {
                          type int32;
                          description
                            "Trans delay interval.";
                        }
    
                        leaf retrans-intv {
                          type int32;
                          description
                            "Retrans interval.";
                        }
    
                        leaf cost {
                          type uint32;
                          description "Cost.";
                        }
    
                        leaf smart-discover {
                          type boolean;
                          description
                            "Smart discover.";
                        }
                      }  // list slink-nbr-statistic
                    }  // container slink-nbr-statistics
    
                    container traffic-adj-stats {
                      config false;
                      description
                        "List of traffic adjust info.";
                      list traffic-adj-stat {
                        key "area-id router-id ip-addr if-name";
                        description
                          "Statistics of traffic adjust info.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router ID.";
                        }
    
                        leaf ip-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP Address.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf if-cost {
                          type uint32;
                          description
                            "Interface cost.";
                        }
    
                        leaf if-tnl-dest {
                          type inet:ipv4-address-no-zone;
                          description
                            "Interface tunnel destination.";
                        }
    
                        leaf if-tnl-type {
                          type if-tnl-type;
                          description
                            "Interface tunnel type.";
                        }
    
                        leaf if-tnl-nbr-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Interface tunnel neighbor ID.";
                        }
    
                        leaf if-metric {
                          type int32;
                          description
                            "Interface metric.";
                        }
    
                        leaf if-metric-type {
                          type metric-type;
                          description
                            "Interface metric type.";
                        }
    
                        leaf hold-time {
                          type uint32;
                          description
                            "Interface hold time.";
                        }
                      }  // list traffic-adj-stat
                    }  // container traffic-adj-stats
    
                    container migp-routings {
                      config false;
                      description
                        "List of the OSPF MIGP routing table.";
                      list migp-routing {
                        key "dest-ip mask-length";
                        description
                          "Statistics of the OSPF MIGP routing table.";
                        leaf dest-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Destination IP address.";
                        }
    
                        leaf mask-length {
                          type uint32 {
                            range "0..32";
                          }
                          description
                            "Mask length.";
                        }
    
                        leaf cost {
                          type uint32;
                          description
                            "Cost to the destination address.";
                        }
    
                        leaf prefix-priority {
                          type pre-priority;
                          description
                            "Prefix priority.";
                        }
    
                        leaf path-type {
                          type path-type;
                          description
                            "Route type.";
                        }
    
                        container nexthop-datas {
                          description
                            "List of nexthop data.";
                          list nexthop-data {
                            key "ip-addr adv-router-id area-id";
                            description
                              "Statistics of nexthop data.";
                            leaf ip-addr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Nexthop IP address.";
                            }
    
                            leaf adv-router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Next hop advertising router ID.";
                            }
    
                            leaf area-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Next hop area ID.";
                            }
    
                            leaf flags-disp {
                              type string {
                                length "1..8";
                              }
                              description
                                "Next hop flags.";
                            }
    
                            leaf tag {
                              type uint32;
                              description
                                "Next hop tag.";
                            }
    
                            leaf if-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Next hop outgoing interface name.";
                            }
                          }  // list nexthop-data
                        }  // container nexthop-datas
                      }  // list migp-routing
                    }  // container migp-routings
    
                    container abr-asbr-statistics {
                      config false;
                      description
                        "List of the OSPF ABR and ASBR.";
                      list abr-asbr-statistic {
                        key "if-index nexthop-ip area-id destination-id";
                        description
                          "Statistics of the OSPF ABR and ASBR.";
                        leaf if-index {
                          type uint32;
                          description
                            "Abr or asbr interface index.";
                        }
    
                        leaf nexthop-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Next hop IP address for sending packets to an ABR or ASBR.";
                        }
    
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Abr or asbr area ID.";
                        }
    
                        leaf destination-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "ID of an ABR or ASBR.";
                        }
    
                        leaf if-name {
                          type string {
                            length "0..64";
                          }
                          description
                            "Abr or asbr interface name.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "ID of the local router.";
                        }
    
                        leaf path-type {
                          type path-type;
                          description
                            "Inter area or intra area router.";
                        }
    
                        leaf cost {
                          type uint32;
                          description
                            "Cost from a router to an ABR or ASBR.";
                        }
    
                        leaf router-type {
                          type router-type;
                          description
                            "Abr or asbr router type.";
                        }
                      }  // list abr-asbr-statistic
                    }  // container abr-asbr-statistics
    
                    container nexthop-paras {
                      config false;
                      description
                        "List of the next hop of an OSPF process.";
                      list nexthop-para {
                        key "addr rt-source-type if-addr if-name";
                        description
                          "Statistics of the next hop of an OSPF process.";
                        leaf addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "Details about the next hop.";
                        }
    
                        leaf rt-source-type {
                          type route-source-type;
                          description
                            "Type of route origination.";
                        }
    
                        leaf if-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "Interface address.";
                        }
    
                        leaf if-name {
                          type string {
                            length "0..64";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf referece-count {
                          type uint32;
                          description
                            "Number of OSPF routes using the next hop.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "ID of the local router.";
                        }
                      }  // list nexthop-para
                    }  // container nexthop-paras
    
                    container lsdb-statistics {
                      config false;
                      description
                        "List of OSPF LSDBs.";
                      list lsdb-statistic {
                        key "area-id lsa-type link-state-id adv-router-id";
                        description
                          "Statistics of OSPF LSDBs.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf lsa-type {
                          type lsa-type;
                          description
                            "The value can be router, network, sum net, sum asbr, NSSA, external, opq link, opq area, or opq AS.";
                        }
    
                        leaf link-state-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Link state ID in the LSA header.";
                        }
    
                        leaf adv-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router that advertises or generates LSAs.";
                        }
    
                        leaf lsa-age {
                          type int32;
                          description
                            "LSA aging time.";
                        }
    
                        leaf lsa-sequence-num {
                          type string {
                            length "1..12";
                          }
                          description
                            "LSA sequence number (from the LSA header).";
                        }
    
                        leaf check-sum {
                          type string {
                            length "1..10";
                          }
                          description
                            "Checksum.";
                        }
    
                        leaf lsa-length {
                          type uint32;
                          description
                            "LSA length.";
                        }
    
                        leaf options {
                          type lsdb-option;
                          description
                            "LSA option.";
                        }
    
                        leaf option-flag {
                          type lsdb-option-flag;
                          description
                            "LSA option flag. The available options are V, B, and E.";
                        }
    
                        leaf link-count {
                          type uint32;
                          description
                            "Number of links.";
                        }
    
                        leaf network-mask {
                          type inet:ipv4-address-no-zone;
                          description
                            "Network mask of the network LSA.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..255";
                          }
                          description
                            "Host name.";
                        }
    
                        container lsabodys {
                          description
                            "List of lsabody.";
                          list lsabody {
                            key "link-id link-data link-type attach-router forward-ip";
                            description
                              "Statistics of lsabody.";
                            leaf link-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Link ID of the router LSA.";
                            }
    
                            leaf link-data {
                              type inet:ipv4-address-no-zone;
                              description
                                "Link data about the router LSA.";
                            }
    
                            leaf link-type {
                              type lsdb-link-type;
                              description
                                "Link type of the router LSA. The available options are Point-to-Point, TransNet, StubNet, and Virtual.";
                            }
    
                            leaf attach-router {
                              type inet:ipv4-address-no-zone;
                              description
                                "Router connected to the network.";
                            }
    
                            leaf forward-ip {
                              type inet:ipv4-address-no-zone;
                              description
                                "Forwarding IP address.";
                            }
    
                            leaf tos-id {
                              type uint8;
                              description
                                "ToS ID.";
                            }
    
                            leaf tos-metric {
                              type uint32;
                              description
                                "ToS metric.";
                            }
    
                            leaf route-tag {
                              type uint32;
                              description
                                "Route tag, which is used to prevent route Loopback and applicable to Type5 or Type7 LSAs, of 32 bytes.";
                            }
    
                            leaf opaque-type {
                              type uint32;
                              description
                                "Opaque type.";
                            }
    
                            leaf opaque-id {
                              type uint32;
                              description
                                "Opaque LSA ID. Opaque type + Opaque ID = Link state ID in the LSA header.";
                            }
    
                            leaf ext-metric-type {
                              type uint8;
                              description
                                "E type of ASE/NSSA LSAs.";
                            }
    
                            container remote-intf-addr {
                              description
                                "Statistics of Remote IPv4 Address Sub-TLV information.";
                              leaf remote-address {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Remote IPv4 address.";
                              }
                            }  // container remote-intf-addr
    
                            container local-remote-intf-id {
                              description
                                "Statistics of Local Remote Interface ID Sub-TLV information.";
                              leaf local-intf-id {
                                type uint32;
                                description
                                  "Local interface ID.";
                              }
    
                              leaf remote-intf-id {
                                type uint32;
                                description
                                  "Remote interface ID.";
                              }
                            }  // container local-remote-intf-id
                          }  // list lsabody
                        }  // container lsabodys
    
                        container rilsa {
                          description
                            "Statistics of LSA TLV information.";
                          leaf host-name {
                            type string {
                              length "1..255";
                            }
                            description
                              "Host name TLV.";
                          }
    
                          leaf algorithm {
                            type string {
                              length "1..255";
                            }
                            description
                              "SR algorithm.";
                          }
                        }  // container rilsa
    
                        container prefix-lsas {
                          description
                            "List of prefix LSA.";
                          list prefix-lsa {
                            key "prefix";
                            description
                              "Statistics of prefix LSA.";
                            leaf prefix {
                              type inet:ipv4-address-no-zone;
                              description
                                "Prefix of the router LSA.";
                            }
    
                            leaf route-type {
                              type lsdb-route-type;
                              description
                                "Route type.";
                            }
    
                            leaf af {
                              type string {
                                length "1..256";
                              }
                              description
                                "Address family.";
                            }
    
                            leaf flags {
                              type string {
                                length "1..21";
                              }
                              description
                                "TLV flags.";
                            }
    
                            container redistribute-list {
                              description
                                "Statistics of redistribute-list information.";
                              leaf sub-tlv-flags {
                                type string {
                                  length "1..22";
                                }
                                description
                                  "Redistribute list sub TLV flags.";
                              }
    
                              leaf router-ids {
                                type string {
                                  length "1..40";
                                }
                                description
                                  "Redistribute list sub TLV router ID and process ID.";
                              }
                            }  // container redistribute-list
    
                            container prefix-sids {
                              description
                                "List of prefix SID information.";
                              list prefix-sid {
                                key "index";
                                description
                                  "Statistics of prefix SID.";
                                leaf index {
                                  type uint32;
                                  description
                                    "Index of prefix SID sub TLV.";
                                }
    
                                leaf sub-tlv-flags {
                                  type string {
                                    length
                                      "1..21";
                                  }
                                  description
                                    "Flags of prefix SID sub TLV.";
                                }
    
                                leaf mt-id {
                                  type uint8;
                                  description
                                    "MT ID of prefix SID sub TLV.";
                                }
    
                                leaf algorithm {
                                  type algorithm-type;
                                  description
                                    "Algorithm of prefix SID sub TLV.";
                                }
                              }  // list prefix-sid
                            }  // container prefix-sids
                          }  // list prefix-lsa
                        }  // container prefix-lsas
    
                        container link-lsas {
                          description
                            "List of link LSA.";
                          list link-lsa {
                            key "link-id link-type";
                            description
                              "Statistics of link LSA.";
                            leaf link-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Link ID of the router LSA.";
                            }
    
                            leaf link-type {
                              type link-type;
                              description
                                "Link type of the router LSA.";
                            }
    
                            leaf link-data {
                              type inet:ipv4-address-no-zone;
                              description
                                "Link data of the router LSA.";
                            }
    
                            container adj-sids {
                              description
                                "List of adjacency SID information.";
                              list adj-sid {
                                key "label";
                                description
                                  "Statistics of adjacency SID.";
                                leaf label {
                                  type uint32;
                                  description
                                    "Label of adjacency SID sub TLV.";
                                }
    
                                leaf sub-tlv-flags {
                                  type string {
                                    length
                                      "1..21";
                                  }
                                  description
                                    "Flags of adjacency SID sub TLV.";
                                }
    
                                leaf mt-id {
                                  type uint8;
                                  description
                                    "MT ID of adjacency SID sub TLV.";
                                }
    
                                leaf weight {
                                  type uint8;
                                  description
                                    "Weight of adjacency SID sub TLV.";
                                }
                              }  // list adj-sid
                            }  // container adj-sids
    
                            container lan-adj-sids {
                              description
                                "List of lan adjacency SID information.";
                              list lan-adj-sid {
                                key "neighbor-id";
                                description
                                  "Statistics of lan adjacency SID.";
                                leaf neighbor-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Neighbor ID of lan adjacency SID sub TLV.";
                                }
    
                                leaf sub-tlv-flags {
                                  type string {
                                    length
                                      "1..256";
                                  }
                                  description
                                    "Flags of lan adjacency SID of sub TLV.";
                                }
    
                                leaf mt-id {
                                  type uint8;
                                  description
                                    "MT ID of lan adjacency SID sub TLV.";
                                }
    
                                leaf weight {
                                  type uint8;
                                  description
                                    "Weight of lan adjacency SID sub TLV.";
                                }
    
                                leaf label {
                                  type uint32;
                                  description
                                    "Label of lan adjacency SID sub TLV.";
                                }
                              }  // list lan-adj-sid
                            }  // container lan-adj-sids
                          }  // list link-lsa
                        }  // container link-lsas
                      }  // list lsdb-statistic
                    }  // container lsdb-statistics
    
                    container lsdb-briefs {
                      config false;
                      description
                        "List of LSDB statistics.";
                      list lsdb-brief {
                        key "area-id";
                        description
                          "Statistics of LSDB statistics.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "ID of the local router.";
                        }
    
                        leaf stub {
                          type uint32;
                          description
                            "Number of stubs.";
                        }
    
                        leaf router {
                          type uint32;
                          description
                            "Number of router LSAs.";
                        }
    
                        leaf network {
                          type uint32;
                          description
                            "Number of network LSAs.";
                        }
    
                        leaf summary-net {
                          type uint32;
                          description
                            "Number of summary net LSAs.";
                        }
    
                        leaf asbr {
                          type uint32;
                          description
                            "Number of ASBR LSAs.";
                        }
    
                        leaf type7 {
                          type uint32;
                          description
                            "Number of Type7 LSAs.";
                        }
    
                        leaf opaque9 {
                          type uint32;
                          description
                            "Number of Type9 opaque LSAs.";
                        }
    
                        leaf opaque10 {
                          type uint32;
                          description
                            "Number of Type10 opaque LSAs.";
                        }
    
                        leaf sub-total {
                          type uint32;
                          description
                            "Sub type sum.";
                        }
                      }  // list lsdb-brief
                    }  // container lsdb-briefs
    
                    container last-down-nbrs {
                      config false;
                      description
                        "List of the OSPF neighbor that goes down for the last time.";
                      list last-down-nbr {
                        key "list-index area-id ip-addr router-id if-name";
                        description
                          "Statistics of the OSPF neighbor that goes down for the last time.";
                        leaf list-index {
                          type uint32;
                          description
                            "The serial number of the node for the particular last down neighbor.";
                        }
    
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Area to which the neighbor belongs.";
                        }
    
                        leaf ip-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "Address of the neighbor interface.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router ID of the neighbor.";
                        }
    
                        leaf if-name {
                          type string {
                            length "0..64";
                          }
                          description
                            "Interface that connects to the neighbor.";
                        }
    
                        leaf immediate-reason {
                          type nbr-down-imm-reason;
                          description
                            "Direct reason that the neighbor goes down.";
                        }
    
                        leaf primary-reason {
                          type nbr-down-prim-reason;
                          description
                            "Primary reason that the neighbor goes down.";
                        }
    
                        leaf time {
                          type yang:date-and-time;
                          description
                            "Time when the neighbor goes down.";
                        }
    
                        leaf local-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "ID of the local router.";
                        }
    
                        leaf type {
                          type nbr-type;
                          description
                            "Last down neighbor type.";
                        }
                      }  // list last-down-nbr
                    }  // container last-down-nbrs
    
                    container disp-graceful-restart {
                      config false;
                      description
                        "Statistics of graceful restart information.";
                      leaf capability {
                        type helper-capabality;
                        description
                          "Graceful restart capability.";
                      }
    
                      leaf help-role {
                        type helper-support;
                        description
                          "Helper policy support.";
                      }
    
                      leaf current-state {
                        type gr-state;
                        description
                          "Current GR status.";
                      }
    
                      leaf on-helper {
                        type on-helper;
                        description
                          "Cause for exiting GR by the helper.";
                      }
    
                      leaf nbr-num {
                        type uint32;
                        description
                          "Re starting neighbor count.";
                      }
    
                      container gr-neighbor-infos {
                        description
                          "List of gr neighbor info.";
                        list gr-neighbor-info {
                          key "area-id intf-ip-addr nbr-router-id nbr-ip-addr";
                          description
                            "Statistics of gr neighbor info.";
                          leaf area-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "Area ID.";
                          }
    
                          leaf intf-ip-addr {
                            type inet:ipv4-address-no-zone;
                            description
                              "Interface IP address.";
                          }
    
                          leaf nbr-router-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "Neighbor router ID.";
                          }
    
                          leaf nbr-ip-addr {
                            type inet:ipv4-address-no-zone;
                            description
                              "Neighbor IP address.";
                          }
    
                          leaf if-name {
                            type string {
                              length "1..64";
                            }
                            description
                              "Neighbor interface name.";
                          }
    
                          leaf gr-nbr-state {
                            type gr-nbr-state;
                            description
                              "Neighbor GR state.";
                          }
    
                          leaf gr-helper-period {
                            type uint32;
                            description
                              "GR helper period.";
                          }
    
                          leaf gr-helper-age {
                            type uint32;
                            description
                              "GR helper age.";
                          }
    
                          leaf last-exit-reason {
                            type last-exit-reason;
                            description
                              "Last exit reason.";
                          }
                        }  // list gr-neighbor-info
                      }  // container gr-neighbor-infos
    
                      container gr-vlink-neighbor-infos {
                        description
                          "List of gr vlink neighbor info.";
                        list gr-vlink-neighbor-info {
                          key "area-id nbr-router-id";
                          description
                            "Statistics of gr vlink neighbor info.";
                          leaf area-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "Area ID.";
                          }
    
                          leaf nbr-router-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "Neighbor router ID.";
                          }
    
                          leaf intf-ip-addr {
                            type inet:ipv4-address-no-zone;
                            description
                              "Interface IP address.";
                          }
    
                          leaf if-name {
                            type string {
                              length "1..64";
                            }
                            description
                              "Neighbor interface name.";
                          }
    
                          leaf nbr-ip-addr {
                            type inet:ipv4-address-no-zone;
                            description
                              "Neighbor interface IP address.";
                          }
    
                          leaf gr-nbr-state {
                            type gr-nbr-state;
                            description
                              "Neighbor GR state.";
                          }
    
                          leaf vlink-if-state {
                            type vlink-if-state;
                            description
                              "Vlink interface state.";
                          }
    
                          leaf vlink-nbr-state {
                            type vlink-nbr-state;
                            description
                              "Vlink neighbor state.";
                          }
    
                          leaf last-exit-reason {
                            type last-exit-reason;
                            description
                              "Last exit reason.";
                          }
                        }  // list gr-vlink-neighbor-info
                      }  // container gr-vlink-neighbor-infos
                    }  // container disp-graceful-restart
    
                    container error-process-data {
                      config false;
                      description
                        "Statistics of error data.";
                      leaf router-id {
                        type inet:ipv4-address-no-zone;
                        description "Router ID.";
                      }
    
                      leaf same-ip-pkt-cnt {
                        type uint32;
                        description
                          "Same IP packet count.";
                      }
    
                      leaf bad-pkt-cnt {
                        type uint32;
                        description
                          "Bad packet.";
                      }
    
                      leaf bad-ver-cnt {
                        type uint32;
                        description
                          "Bad version.";
                      }
    
                      leaf bad-chk-sum-pkt-cnt {
                        type uint32;
                        description
                          "Bad checksum.";
                      }
    
                      leaf bad-area-pkt-cnt {
                        type uint32;
                        description
                          "Bad area ID.";
                      }
    
                      leaf pkt-rcv-unnumber {
                        type uint32;
                        description
                          "Drop on unnumbered interface.";
                      }
    
                      leaf bad-virt-link-cnt {
                        type uint32;
                        description
                          "Bad virtual link.";
                      }
    
                      leaf auth-type-fail-cnt {
                        type uint32;
                        description
                          "Bad authentication type.";
                      }
    
                      leaf auth-key-fail-cnt {
                        type uint32;
                        description
                          "Bad authentication key.";
                      }
    
                      leaf short-pkt-cnt {
                        type uint32;
                        description
                          "Packet too small.";
                      }
    
                      leaf long-pkt-cnt {
                        type uint32;
                        description
                          "Packet size > IP length.";
                      }
    
                      leaf tx-err-cnt {
                        type uint32;
                        description
                          "Transmit error.";
                      }
    
                      leaf if-down-cnt {
                        type uint32;
                        description
                          "Interface down.";
                      }
    
                      leaf no-nbr {
                        type uint32;
                        description
                          "Unknown neighbor.";
                      }
    
                      leaf mis-netmask-cnt {
                        type uint32;
                        description
                          "Netmask mismatch.";
                      }
    
                      leaf mis-hello-intl-cnt {
                        type uint32;
                        description
                          "Hello timer mismatch.";
                      }
    
                      leaf mis-dead-intl-cnt {
                        type uint32;
                        description
                          "Dead timer mismatch.";
                      }
    
                      leaf mis-ext-rou-cap-cnt {
                        type uint32;
                        description
                          "Extern option mismatch.";
                      }
    
                      leaf router-id-confusion {
                        type uint32;
                        description
                          "DD router ID confusion.";
                      }
    
                      leaf vlink-nbr-mis-cnt {
                        type uint32;
                        description
                          "Virtual neighbor unknown.";
                      }
    
                      leaf nbma-nbr-err-cnt {
                        type uint32;
                        description
                          "NBMA neighbor unknown.";
                      }
    
                      leaf inval-src-helo-cnt {
                        type uint32;
                        description
                          "Invalid source.";
                      }
    
                      leaf dd-nbr-low-cnt {
                        type uint32;
                        description
                          "Neighbour state low for DD.";
                      }
    
                      leaf dd-router-id-cnt {
                        type uint32;
                        description
                          "DD router ID confusion.";
                      }
    
                      leaf dd-opt-mismatch-cnt {
                        type uint32;
                        description
                          "Extern option mismatch.";
                      }
    
                      leaf dd-unknwn-lsa-cnt {
                        type uint32;
                        description
                          "DD packet unknown LSA type.";
                      }
    
                      leaf dd-mtu-mismatch-cnt {
                        type uint32;
                        description
                          "MTU option mismatch.";
                      }
    
                      leaf ack-nbr-low-cnt {
                        type uint32;
                        description
                          "Neighbour state low for LS acknowledgement.";
                      }
    
                      leaf ack-bad-cnt {
                        type uint32;
                        description "Bad ack.";
                      }
    
                      leaf ack-duplicate-cnt {
                        type uint32;
                        description
                          "Duplicate ack.";
                      }
    
                      leaf ack-unknown-lsa-cnt {
                        type uint32;
                        description
                          "LSAck packet unknown LSA type.";
                      }
    
                      leaf req-nbr-low-cnt {
                        type uint32;
                        description
                          "Neighbour state low for LS request.";
                      }
    
                      leaf req-empty-cnt {
                        type uint32;
                        description
                          "Empty request.";
                      }
    
                      leaf req-bad-cnt {
                        type uint32;
                        description
                          "Bad request.";
                      }
    
                      leaf upd-nbr-low-cnt {
                        type uint32;
                        description
                          "Neighbour state low for LS update.";
                      }
    
                      leaf upd-self-newr-cnt {
                        type uint32;
                        description
                          "Newer self generate LSA.";
                      }
    
                      leaf upd-min-lsa-lsarr-cnt {
                        type uint32;
                        description
                          "Received LSA within LSA arrival interval.";
                      }
    
                      leaf upd-ls-checksum-cnt {
                        type uint32;
                        description
                          "LSA checksum bad.";
                      }
    
                      leaf upd-les-recent-cnt {
                        type uint32;
                        description
                          "Received less recent LSA.";
                      }
    
                      leaf upd-unknow-lsa-cnt {
                        type uint32;
                        description
                          "LSUpdate packet unknown LSA type.";
                      }
    
                      leaf opq9-flood-cnt {
                        type uint32;
                        description
                          "Opq9 of flooding scope.";
                      }
    
                      leaf opq10-flood-cnt {
                        type uint32;
                        description
                          "Opq10 of flooding scope.";
                      }
    
                      leaf opq11-flood-cnt {
                        type uint32;
                        description
                          "Opq11 of flooding scope.";
                      }
    
                      leaf unknown-tlv {
                        type uint32;
                        description
                          "Unknown TLV type.";
                      }
    
                      leaf rxmt-dd-err-cnt {
                        type uint32;
                        description
                          "Number for DD packet.";
                      }
    
                      leaf rxmt-req-err-cnt {
                        type uint32;
                        description
                          "Number for request packet.";
                      }
    
                      leaf rxmt-upd-err-cnt {
                        type uint32;
                        description
                          "Number for update packet.";
                      }
    
                      leaf gr-invalid-lsa-cnt {
                        type uint32;
                        description
                          "Number of invalid LSAs.";
                      }
    
                      leaf gr-invalid-pol-cnt {
                        type uint32;
                        description
                          "Number of policy failed LSAs.";
                      }
    
                      leaf gr-invalid-prd-cnt {
                        type uint32;
                        description
                          "Number of wrong period LSAs.";
                      }
    
                      leaf tunnel-cost-cnt {
                        type uint32;
                        description
                          "Tunnel cost mistake.";
                      }
    
                      leaf peer-net-type-cnt {
                        type uint32;
                        description
                          "The network type of the neighbor interface is not consistent.";
                      }
    
                      leaf hello-dr-mis-cnt {
                        type uint32;
                        description
                          "The DR or BDR in receiving hello packet is not same with the DR or BDR.";
                      }
    
                      leaf gen-ttl-err-cnt {
                        type uint32;
                        description
                          "The TTL of the packet is error.";
                      }
    
                      leaf over-max-buffer-length-cnt {
                        type uint32;
                        description
                          "Number of packet that length is more than max buffer length.";
                      }
    
                      leaf bad-net-segment-packet-cnt {
                        type uint32;
                        description
                          "Number of bad network segment packet.";
                      }
    
                      leaf bad-routerid-packet-cnt {
                        type uint32;
                        description
                          "Number of non-hello packet that router ID is different.";
                      }
    
                      leaf destination-ip-error-packet-cnt {
                        type uint32;
                        description
                          "Number of bad destIpAddress packet.";
                      }
    
                      leaf passive-intf-packet-cnt {
                        type uint32;
                        description
                          "Number of packet that received from silent Interface.";
                      }
    
                      leaf hello-nbr-reach-limit-cnt {
                        type uint32;
                        description
                          "Number of hello packet that discard because the number of neighbour reached the limit.";
                      }
    
                      leaf hello-hold-down-cnt {
                        type uint32;
                        description
                          "Number of hello packet that discard because the neighbour is in hold-down state.";
                      }
    
                      leaf hello-memory-overload-cnt {
                        type uint32;
                        description
                          "Number of hello packet that discard because memory is overload.";
                      }
    
                      leaf hello-cpu-overload-cnt {
                        type uint32;
                        description
                          "Number of hello packet that discard because CPU is overload.";
                      }
    
                      leaf dd-nbr-reach-limit-cnt {
                        type uint32;
                        description
                          "Number of dd packet that discard because the number of neighbour reached the limit.";
                      }
    
                      leaf dd-cpu-overload-cnt {
                        type uint32;
                        description
                          "Number of dd packet that discard because CPU is overload.";
                      }
    
                      leaf dd-mem-overload-cnt {
                        type uint32;
                        description
                          "Number of dd packet that discard because memory is overload.";
                      }
    
                      leaf ri-lsa-tlv-error-cnt {
                        type uint32;
                        description
                          "Router information lsa TLV error.";
                      }
    
                      leaf ri-lsa-sub-tlv-error-cnt {
                        type uint32;
                        description
                          "Router information lsa sub TLV error.";
                      }
    
                      leaf ext-prefix-lsa-tlv-error-cnt {
                        type uint32;
                        description
                          "Extend prefix lsa TLV error.";
                      }
    
                      leaf ext-prefix-lsa-sub-tlv-error-cnt {
                        type uint32;
                        description
                          "Extend prefix lsa sub TLV error.";
                      }
    
                      leaf ext-link-lsa-tlv-error-cnt {
                        type uint32;
                        description
                          "Extend link lsa TLV error.";
                      }
    
                      leaf ext-link-lsa-sub-tlv-error-cnt {
                        type uint32;
                        description
                          "Extend link lsa sub TLV error.";
                      }
    
                      leaf bad-sr-algo-cnt {
                        type uint32;
                        description
                          "Bad SR-Algorithm TLV.";
                      }
    
                      leaf bad-sid-range-cnt {
                        type uint32;
                        description
                          "Bad SID/Label Range TLV.";
                      }
    
                      leaf bad-sid-cnt {
                        type uint32;
                        description
                          "Bad SID/Label Sub TLV.";
                      }
    
                      leaf bad-adj-sid-cnt {
                        type uint32;
                        description
                          "Bad Adj-SID Sub TLV.";
                      }
    
                      leaf bad-prefix-sid-cnt {
                        type uint32;
                        description
                          "Bad Prefix-SID Sub TLV.";
                      }
    
                      leaf bad-ext-prefix-range-cnt {
                        type uint32;
                        description
                          "Bad Extended Prefix Range TLV.";
                      }
    
                      leaf bad-lan-adj-sid-cnt {
                        type uint32;
                        description
                          "Bad LAN Adj-SID Sub TLV.";
                      }
    
                      leaf bad-ext-prefix-cnt {
                        type uint32;
                        description
                          "Bad Extended Prefix TLV.";
                      }
    
                      leaf bad-ext-link-cnt {
                        type uint32;
                        description
                          "Bad Extended Link TLV.";
                      }
                    }  // container error-process-data
    
                    container as-lsdb-brief {
                      config false;
                      description
                        "Statistics of AS LSDB statistics.";
                      leaf router-id {
                        type inet:ipv4-address-no-zone;
                        description
                          "ID of the local router.";
                      }
    
                      leaf opaque11 {
                        type uint32;
                        description
                          "Number of Type11 opaque LSAs.";
                      }
    
                      leaf ase {
                        type uint32;
                        description
                          "Number of ASE LSAs.";
                      }
    
                      leaf sub-total {
                        type uint32;
                        description
                          "Sub type sum.";
                      }
                    }  // container as-lsdb-brief
    
                    container neighbors {
                      config false;
                      description
                        "List of neighbor.";
                      list neighbor {
                        key "area-id if-name router-id ip-addr";
                        description
                          "Statistics of neighbor.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor area ID.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Neighbor interface name.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor router ID.";
                        }
    
                        leaf ip-addr {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor IP address.";
                        }
    
                        leaf multi-area-flag {
                          type boolean;
                          description
                            "The symoble of multi area.";
                        }
    
                        leaf state {
                          type nbr-state;
                          description
                            "Neighbor state.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..255";
                          }
                          description
                            "Neighbor host name.";
                        }
    
                        container datas {
                          description
                            "List of neighbor data.";
                          list data {
                            key "if-ip";
                            description
                              "Statistics of neighbor data.";
                            leaf if-ip {
                              type inet:ipv4-address-no-zone;
                              description
                                "Neighbor interface IP address.";
                            }
    
                            leaf gr-state {
                              type nbr-gr-state;
                              description
                                "Neighbor GR state.";
                            }
    
                            leaf mode {
                              type nbr-mode;
                              description
                                "Neighbor mode.";
                            }
    
                            leaf priority {
                              type int32;
                              description
                                "Neighbor priority.";
                            }
    
                            leaf dr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Neighbor DR.";
                            }
    
                            leaf bdr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Neighbor BDR.";
                            }
    
                            leaf if-mtu {
                              type uint32;
                              description
                                "Neighbor interface MTU.";
                            }
    
                            leaf dead-due-timer {
                              type uint32;
                              description
                                "Neighbor dead due timer.";
                            }
    
                            leaf retran-interval {
                              type uint32;
                              description
                                "Neighbor retransmit interval.";
                            }
    
                            leaf up-time {
                              type string {
                                length "1..16";
                              }
                              description
                                "Neighbor up time.";
                            }
    
                            leaf up-time-stamp {
                              type yang:date-and-time;
                              description
                                "Neighbor up time stamp.";
                            }
    
                            leaf auth-sequence {
                              type uint32;
                              description
                                "Neighbor authentication sequence number.";
                            }
                          }  // list data
                        }  // container datas
                      }  // list neighbor
                    }  // container neighbors
    
                    container routings {
                      config false;
                      description
                        "List of the OSPF routing table.";
                      list routing {
                        key "dest-ip mask-length path-type";
                        description
                          "Statistics of the OSPF routing table.";
                        leaf dest-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Destination IP address.";
                        }
    
                        leaf mask-length {
                          type uint32 {
                            range "0..32";
                          }
                          description
                            "Mask length.";
                        }
    
                        leaf path-type {
                          type path-type;
                          description
                            "Route type.";
                        }
    
                        leaf cost {
                          type uint32;
                          description
                            "Cost to the destination address.";
                        }
    
                        leaf prefix-priority {
                          type pre-priority;
                          description
                            "Prefix priority.";
                        }
    
                        container nexthop-datas {
                          description
                            "List of nexthop data.";
                          list nexthop-data {
                            key "ip-addr adv-router-id area-id";
                            description
                              "Statistics of nexthop data.";
                            leaf ip-addr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Nexthop IP address.";
                            }
    
                            leaf adv-router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Next hop advertising router ID.";
                            }
    
                            leaf area-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Next hop area ID.";
                            }
    
                            leaf if-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Next hop outgoing interface name.";
                            }
    
                            leaf flags-disp {
                              type string {
                                length "1..8";
                              }
                              description
                                "Next hop flags.";
                            }
    
                            leaf tag {
                              type uint32;
                              description
                                "Next hop tag.";
                            }
    
                            leaf bak-if-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Backup outgoing interface name.";
                            }
    
                            leaf bak-next-ip {
                              type inet:ipv4-address-no-zone;
                              description
                                "Backup nexthop IP address.";
                            }
    
                            leaf backup-type {
                              type backup-type;
                              description
                                "Type of backup.";
                            }
    
                            leaf tunnel-dest {
                              type inet:ipv4-address-no-zone;
                              description
                                "Tunnel destination.";
                            }
    
                            leaf tunnel-type {
                              type tunnel-type;
                              description
                                "Type of tunnel.";
                            }
                          }  // list nexthop-data
                        }  // container nexthop-datas
                      }  // list routing
                    }  // container routings
    
                    container vlink-nbr-statistics {
                      config false;
                      description
                        "List of virtual link information.";
                      list vlink-nbr-statistic {
                        key "area-id router-id";
                        description
                          "Statistics of virtual link information.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "The transit area identifier.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "A 32-bit integer uniquely identifying the neighboring router in the autonomous system.";
                        }
    
                        leaf if-ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Self/Source IP address of the out going interface.";
                        }
    
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "The IP address this virtual neighbor is using.";
                        }
    
                        leaf state {
                          type nbr-state;
                          description
                            "The state of the virtual neighbor relationship.";
                        }
    
                        leaf interface-state {
                          type intf-state;
                          description
                            "OSPF virtual interface states.";
                        }
    
                        leaf type {
                          type network-type;
                          description
                            "Interface type.";
                        }
    
                        leaf gr-state {
                          type nbr-gr-state;
                          description
                            "Status of GR of an interface.";
                        }
    
                        leaf hello-interval {
                          type uint32;
                          units "s";
                          description
                            "Time between hello packets.";
                        }
    
                        leaf dead-interval {
                          type uint32;
                          units "s";
                          description
                            "Interval after which a neighbor is declared dead.";
                        }
    
                        leaf trans-delay-interval {
                          type uint32;
                          units "s";
                          description
                            "Delay for transmitting LSAs.";
                        }
    
                        leaf retransmit-interval {
                          type uint32;
                          units "s";
                          description
                            "Interval for retransmitting LSAs.";
                        }
    
                        leaf cost {
                          type uint32;
                          description
                            "Cost to reach the end point of this virtual link or cost to reach the virtual neighbor.";
                        }
    
                        leaf smart-discover {
                          type boolean;
                          description
                            "Indicates whether smart discover feature is enabled or not.";
                        }
    
                        leaf options {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor options.";
                        }
    
                        leaf events {
                          type uint32;
                          description
                            "Neighbor events.";
                        }
    
                        leaf ls-rxq-len {
                          type uint32;
                          description
                            "Neighbor retransmission queue length.";
                        }
    
                        leaf hello-suppress {
                          type boolean;
                          description
                            "Indicates whether Hellos are being suppressed to the neighbor.";
                        }
    
                        leaf gr-helper-age {
                          type uint32;
                          description
                            "Neighbor helper age.";
                        }
    
                        leaf helper-ext-reason {
                          type helper-extreason;
                          description
                            "Neighbor helper exit reason.";
                        }
    
                        leaf gr-helper-status {
                          type nbr-gr-helper-status;
                          description
                            "Neighbor helper status.";
                        }
                      }  // list vlink-nbr-statistic
                    }  // container vlink-nbr-statistics
    
                    container mpls-te-statistics {
                      config false;
                      description
                        "List of the MPLS TE statistics.";
                      list mpls-te-statistic {
                        key "area-id opaque-id adv-router-id link-state-id";
                        description
                          "Statistics of the MPLS TE.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf opaque-id {
                          type uint32;
                          description
                            "Opaque ID.";
                        }
    
                        leaf adv-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Advertisement router ID.";
                        }
    
                        leaf link-state-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Link state ID.";
                        }
    
                        leaf lsa-length {
                          type uint32;
                          description
                            "Lsa length.";
                        }
    
                        leaf lsa-options {
                          type uint32;
                          description
                            "Lsa options.";
                        }
    
                        leaf time-stamp {
                          type yang:date-and-time;
                          description
                            "Prefix address.";
                        }
    
                        container router-tlv-datas {
                          description
                            "List of the router TLV datas.";
                          list router-tlv-data {
                            key "te-router-id";
                            description
                              "Statistics of the router TLV data.";
                            leaf te-router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "MPLS TE router ID.";
                            }
                          }  // list router-tlv-data
                        }  // container router-tlv-datas
    
                        container link-tlv-datas {
                          description
                            "List of the link TLV datas.";
                          list link-tlv-data {
                            key "link-id";
                            description
                              "Statistics of the link TLV data.";
                            leaf link-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Link ID.";
                            }
    
                            leaf link-type {
                              type te-link-type;
                              description
                                "Link type.";
                            }
    
                            leaf remote-ip {
                              type inet:ipv4-address-no-zone;
                              description
                                "Remote IP address.";
                            }
    
                            leaf te-metric {
                              type uint32;
                              description
                                "Te metric.";
                            }
    
                            leaf ospf-metric {
                              type uint32;
                              description
                                "OSPF metric.";
                            }
    
                            leaf max-link-bw {
                              type uint64;
                              description
                                "Maximum link bandwidth.";
                            }
    
                            leaf max-reserved-bw {
                              type uint64;
                              description
                                "Maximum reserved bandwidth.";
                            }
    
                            leaf admin-group {
                              type pub-type:hex-binary;
                              description
                                "Admin group.";
                            }
    
                            leaf bc0 {
                              type uint64;
                              description
                                "Bandwidth constraints 0.";
                            }
    
                            leaf bc1 {
                              type uint64;
                              description
                                "Bandwidth constraints 1.";
                            }
    
                            leaf bc2 {
                              type uint64;
                              description
                                "Bandwidth constraints 2.";
                            }
    
                            leaf bc3 {
                              type uint64;
                              description
                                "Bandwidth constraints 3.";
                            }
    
                            leaf bc4 {
                              type uint64;
                              description
                                "Bandwidth constraints 4.";
                            }
    
                            leaf bc5 {
                              type uint64;
                              description
                                "Bandwidth constraints 5.";
                            }
    
                            leaf bc6 {
                              type uint64;
                              description
                                "Bandwidth constraints 6.";
                            }
    
                            leaf bc7 {
                              type uint64;
                              description
                                "Bandwidth constraints 7.";
                            }
    
                            leaf un-reserved-bw0 {
                              type uint64;
                              description
                                "Unreserved bandwidth 0.";
                            }
    
                            leaf un-reserved-bw1 {
                              type uint64;
                              description
                                "Unreserved bandwidth 1.";
                            }
    
                            leaf un-reserved-bw2 {
                              type uint64;
                              description
                                "Unreserved bandwidth 2.";
                            }
    
                            leaf un-reserved-bw3 {
                              type uint64;
                              description
                                "Unreserved bandwidth 3.";
                            }
    
                            leaf un-reserved-bw4 {
                              type uint64;
                              description
                                "Unreserved bandwidth 4.";
                            }
    
                            leaf un-reserved-bw5 {
                              type uint64;
                              description
                                "Unreserved bandwidth 5.";
                            }
    
                            leaf un-reserved-bw6 {
                              type uint64;
                              description
                                "Unreserved bandwidth 6.";
                            }
    
                            leaf un-reserved-bw7 {
                              type uint64;
                              description
                                "Unreserved bandwidth 7.";
                            }
    
                            container local-ips {
                              description
                                "List of the local IP address.";
                              list local-ip {
                                key "local-ip";
                                description
                                  "Statistics of the local IP address.";
                                leaf local-ip {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Local IP address.";
                                }
                              }  // list local-ip
                            }  // container local-ips
    
                            container srlgs {
                              description
                                "List of the shared risk link group (SRLG).";
                              list srlg {
                                key "srlg";
                                description
                                  "Statistics of the shared risk link group (SRLG).";
                                leaf srlg {
                                  type uint32;
                                  description
                                    "Shared risk link group (SRLG).";
                                }
                              }  // list srlg
                            }  // container srlgs
                          }  // list link-tlv-data
                        }  // container link-tlv-datas
                      }  // list mpls-te-statistic
                    }  // container mpls-te-statistics
                  }  // list site
                }  // container sites
              }  // container ospfv2
    
              container mpls {
                when
                  "/mpls:mpls/mpls:common/mpls:global/mpls:mpls-enable='true'";
                description "Configure MPLS.";
                container common {
                  description
                    "Configure common MPLS.";
                  container mpls-interfaces {
                    description
                      "List of interfaces on which MPLS is enabled.";
                    list mpls-interface {
                      key "name";
                      description
                        "Configure MPLS on an interface. Query, modify, create, or delete the MPLS capability on an interface.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        must
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name=../../../../../ni:name";
                        description
                          "Specifies an l3vpn vrf name.";
                      }
    
                      leaf mtu-value {
                        type uint32 {
                          range "0..64000";
                        }
                        units "s";
                        description
                          "MTU of an MPLS interface. Note: An MTU is the maximum size of a packet that can be sent without being fragmented. The value range of MTU is controlled by the PAF.";
                      }
    
                      leaf ldp-enable {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Enables LDP on interfaces.";
                      }
    
                      leaf te-enable {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "MPLS TE capability on an interface.";
                      }
    
                      leaf rsvp-te-enable {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "MPLS RSVP TE capability on an interface.";
                      }
    
                      container statistics {
                        config false;
                        description
                          "Statistics of MPLS interface informations.";
                        leaf fragmented-packet-count {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "This object counts the number of outgoing MPLS packets that required fragmentation before transmission on this interface. This object MUST count on a per-interface basis regardless of which label space the interface participates in. When the dual-stack statistics collection is enabled, value 0 is returned, indicating that no packet is fragmented on the interface. If the dual-stack statistics collection is disabled, the default value 0 is returned, which is meaningless.";
                        }
                      }  // container statistics
                    }  // list mpls-interface
                  }  // container mpls-interfaces
                }  // container common
    
                container te {
                  when
                    "/mpls:mpls/mpls-te:te/mpls-te:enable='true'";
                  description
                    "Configure MPLS TE parameters.";
                  container rsvp-interfaces {
                    when
                      "/mpls:mpls/mpls-te:te/mpls-te:rsvp/mpls-te:enable='true'";
                    description
                      "List of RSVP interface configuration.";
                    list rsvp-interface {
                      must
                        "../../../../te:te/te-interface:interfaces/te-interface:interface[te-interface:name=current()/name]/te-interface:mpls-te-enable='true'";
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name='_public_'";
                      key "name";
                      description
                        "Configure RSVP interface.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Interface name. The name is case-insensitive.";
                      }
    
                      leaf hello-enable {
                        when
                          "/mpls:mpls/mpls-te:te/mpls-te:rsvp/mpls-te:global/mpls-te:hello-enable='true'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable Hello function.";
                      }
    
                      leaf graceful-shutdown-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable graceful shutdown for interface.";
                      }
    
                      leaf srefresh-compatible-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable summary refresh feature for interface.";
                      }
    
                      leaf auto-frr-mode {
                        type frr-mode-type;
                        config false;
                        description
                          "Auto FRR protection modes.";
                      }
    
                      leaf distribute-inst-name {
                        ext:operation-exclude "update|delete";
                        type leafref {
                          path "/mpls:mpls/mpls-te:te/mpls-te:rsvp/mpls-te:distribute-instances/mpls-te:distribute-instance/mpls-te:instance-name";
                        }
                        default "RSVP0";
                        description
                          "Name of RSVP distributed instance.";
                      }
    
                      container authentication {
                        description
                          "Configure neighbor of RSVP TE authentication.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the state of RSVP TE interface authentication.";
                        }
    
                        leaf type {
                          when
                            "../enable='true'";
                          type rsvp-authentication-type;
                          mandatory true;
                          description
                            "Authentication type on an RSVP-TE interface.";
                        }
    
                        leaf keychain-name {
                          ext:case-sensitivity "lower-only";
                          when
                            "../enable='true' and ../type='keychain'";
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          mandatory true;
                          description
                            "Keychain name. The name is case insensitive.";
                        }
    
                        leaf md5-key {
                          when
                            "../enable='true' and ../type!='keychain'";
                          type pub-type:password-extend {
                            pattern '[^ ]+';
                          }
                          mandatory true;
                          description
                            "Authentication key of an RSVP TE interface. When the key is configured, the RSVP packets that the interface sends out carry the authentication information that are calculated based on the authentication key by using the MD5 algorithm. The packets the interface receives are also verified based on the authentication key. The two ends of a TE link must be configured with the same authentication key, otherwise, RSVP packets cannot pass through the link. The password is a string ranging from 1 to 255 characters for a simple text password and 20 to 432 characters for a ciphertext password.";
                        }
    
                        leaf life-time {
                          when
                            "../enable='true'";
                          type pub-type:time-tick {
                            range "1..86399";
                          }
                          units "s";
                          default "1800";
                          description
                            "Authentication lifetime. During authentication lifetime, RSVP authentication lifetime will be reset after a RSVP packet is received. If no RSVP packet is received when the authentication lifetime times out, the RSVP neighbor will delete the authentication relationship to prevent persistent authentication.";
                        }
    
                        leaf handshake-enable {
                          when
                            "../enable='true'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the handshake authentication. When RSVP packet authentication is out of order, a handshake will be initiated and authentication will be re-negotiated.";
                        }
    
                        leaf window-size {
                          when
                            "../enable='true' and ../handshake-enable='true'";
                          type uint32 {
                            range "1..64";
                          }
                          default "1";
                          description
                            "Size of an authentication window that is set to prevent information loss caused by packet disorder. If the packet sequence number exceeds the window size, the packet is considered to be out of order.";
                        }
                      }  // container authentication
    
                      container statistics {
                        config false;
                        description
                          "RSVP Interface statistics.";
                        leaf psb-count {
                          type uint32;
                          description
                            "Number of path state blocks.";
                        }
    
                        leaf rsb-count {
                          type uint32;
                          description
                            "Number of reservation state blocks.";
                        }
    
                        leaf psb-cleanup-timeout-count {
                          type uint32;
                          description
                            "Number of times for cleaning up the PSB that times out.";
                        }
    
                        leaf rsb-cleanup-timeout-count {
                          type uint32;
                          description
                            "Number of times for cleaning up the RSB that times out.";
                        }
    
                        leaf send-packet-count {
                          type uint32;
                          description
                            "Number of sent RSVP signaling packets.";
                        }
    
                        leaf receive-packet-count {
                          type uint32;
                          description
                            "Number of received RSVP signaling packets.";
                        }
    
                        leaf send-path-count {
                          type uint32;
                          description
                            "Number of sent Path packets. The Path packets are sent from the upstream node to the downstream node.";
                        }
    
                        leaf receive-path-count {
                          type uint32;
                          description
                            "Number of received Path packets. The Path packets are sent from the upstream node to the downstream node.";
                        }
    
                        leaf send-refresh-path-count {
                          type uint32;
                          description
                            "Number of sent refresh Path packets. The Path packets are sent from the upstream node to the downstream node.";
                        }
    
                        leaf receive-refresh-path-count {
                          type uint32;
                          description
                            "Number of received refresh Path packets. The Path packets are sent from the upstream node to the downstream node.";
                        }
    
                        leaf send-resv-count {
                          type uint32;
                          description
                            "Number of sent Resv packets.";
                        }
    
                        leaf receive-resv-count {
                          type uint32;
                          description
                            "Number of received Resv packets.";
                        }
    
                        leaf send-refresh-resv-count {
                          type uint32;
                          description
                            "Number of sent refresh Resv packets.";
                        }
    
                        leaf receive-refresh-resv-count {
                          type uint32;
                          description
                            "Number of received refresh Resv packets.";
                        }
    
                        leaf send-resv-conf-count {
                          type uint32;
                          description
                            "Number of sent ResvConf packets.";
                        }
    
                        leaf receive-resv-conf-count {
                          type uint32;
                          description
                            "Number of received ResvConf packets.";
                        }
    
                        leaf send-hello-count {
                          type uint32;
                          description
                            "Number of sent Hello packets.";
                        }
    
                        leaf receive-hello-count {
                          type uint32;
                          description
                            "Number of received Hello packets.";
                        }
    
                        leaf send-ack-count {
                          type uint32;
                          description
                            "Number of sent Ack packets.";
                        }
    
                        leaf receive-ack-count {
                          type uint32;
                          description
                            "Number of received Ack packets.";
                        }
    
                        leaf send-path-error-count {
                          type uint32;
                          description
                            "Number of sent PathErr packets.";
                        }
    
                        leaf receive-path-error-count {
                          type uint32;
                          description
                            "Number of received PathErr packets.";
                        }
    
                        leaf send-resv-error-count {
                          type uint32;
                          description
                            "Number of sent ResvErr packets.";
                        }
    
                        leaf receive-resv-error-count {
                          type uint32;
                          description
                            "Number of received ResvErr packets.";
                        }
    
                        leaf send-path-tear-count {
                          type uint32;
                          description
                            "Number of sent PathTear packets.";
                        }
    
                        leaf receive-path-tear-count {
                          type uint32;
                          description
                            "Number of received PathTear packets.";
                        }
    
                        leaf send-resv-tear-count {
                          type uint32;
                          description
                            "Number of sent ResvTear packets.";
                        }
    
                        leaf receive-resv-tear-count {
                          type uint32;
                          description
                            "Number of received ResvTear packets.";
                        }
    
                        leaf send-srefresh-count {
                          type uint32;
                          description
                            "Number of sent Srefresh packets.";
                        }
    
                        leaf receive-srefresh-count {
                          type uint32;
                          description
                            "Number of received Srefresh packets.";
                        }
    
                        leaf send-ack-msg-count {
                          type uint32;
                          description
                            "Number of sent Msg_ID_ACK packets.";
                        }
    
                        leaf receive-ack-msg-count {
                          type uint32;
                          description
                            "Number of received Msg_ID_ACK packets.";
                        }
    
                        leaf send-challenge-msg-count {
                          type uint32;
                          description
                            "Number of sent Challenge packets.";
                        }
    
                        leaf receive-challenge-msg-count {
                          type uint32;
                          description
                            "Number of received Challenge packets.";
                        }
    
                        leaf send-response-msg-count {
                          type uint32;
                          description
                            "Number of sent response packets.";
                        }
    
                        leaf receive-response-msg-count {
                          type uint32;
                          description
                            "Number of received response packets.";
                        }
    
                        leaf send-error-msg-count {
                          type uint32;
                          description
                            "Number of sent Msg_ID_NACK packets.";
                        }
    
                        leaf receive-error-msg-count {
                          type uint32;
                          description
                            "Number of received Msg_ID_NACK packets.";
                        }
    
                        leaf send-recovery-path-msg-count {
                          type uint32;
                          description
                            "Number of sent Path packets. The Path packets are sent from the downstream node to the upstream node.";
                        }
    
                        leaf receive-recovery-path-msg-count {
                          type uint32;
                          description
                            "Number of received Path packets. The Path packets are sent from the downstream node to the upstream node.";
                        }
    
                        leaf send-gr-path-msg-count {
                          type uint32;
                          description
                            "Number of sent GRPath packets.";
                        }
    
                        leaf receive-gr-path-msg-count {
                          type uint32;
                          description
                            "Number of received GRPath packets.";
                        }
    
                        leaf send-notify-msg-count {
                          type uint32;
                          description
                            "Number of send notify packets.";
                        }
    
                        leaf receive-notify-msg-count {
                          type uint32;
                          description
                            "Number of receive notify packets.";
                        }
    
                        leaf resource-fault-count {
                          type uint32;
                          description
                            "Number of resource request fault packets.";
                        }
    
                        leaf neighbor-count {
                          type uint32;
                          description
                            "Number of RSVP neighbor.";
                        }
    
                        leaf bfd-session-count {
                          type uint32;
                          description
                            "Number of BFD session.";
                        }
    
                        leaf retransmit-packet-count {
                          type uint32;
                          description
                            "Number of resend RSVP packets.";
                        }
    
                        leaf response-packet-count {
                          type uint32;
                          description
                            "Number of ack packets for resend.";
                        }
    
                        leaf retransmit-path-count {
                          type uint32;
                          description
                            "Number of resend Path packets.";
                        }
    
                        leaf response-path-count {
                          type uint32;
                          description
                            "Number of ack packets for Path resend.";
                        }
    
                        leaf retransmit-resv-count {
                          type uint32;
                          description
                            "Number of resend Resv packets.";
                        }
    
                        leaf response-resv-count {
                          type uint32;
                          description
                            "Number of ack packets for Resv resend.";
                        }
    
                        leaf retransmit-resv-conf-count {
                          type uint32;
                          description
                            "Number of resend ResvConf packets.";
                        }
    
                        leaf response-resv-conf-count {
                          type uint32;
                          description
                            "Number of ack packets for ResvConf resend.";
                        }
    
                        leaf retransmit-path-error-count {
                          type uint32;
                          description
                            "Number of resend PathErr packets.";
                        }
    
                        leaf response-path-error-count {
                          type uint32;
                          description
                            "Number of ack packets for PathErr resend.";
                        }
    
                        leaf retransmit-resv-error-count {
                          type uint32;
                          description
                            "Number of resend ResvErr packets.";
                        }
    
                        leaf response-resv-error-count {
                          type uint32;
                          description
                            "Number of ack packets for ResvErr resend.";
                        }
    
                        leaf retransmit-path-tear-count {
                          type uint32;
                          description
                            "Number of resend PathTear packets.";
                        }
    
                        leaf response-path-tear-count {
                          type uint32;
                          description
                            "Number of ack packets for PathTear resend.";
                        }
    
                        leaf retransmit-resv-tear-count {
                          type uint32;
                          description
                            "Number of resend ResvTear packets.";
                        }
    
                        leaf response-resv-tear-count {
                          type uint32;
                          description
                            "Number of ack packets for ResvTear resend.";
                        }
    
                        leaf retransmit-srefresh-count {
                          type uint32;
                          description
                            "Number of resend srefresh packets.";
                        }
    
                        leaf response-srefresh-count {
                          type uint32;
                          description
                            "Number of ack packets for srefresh resend.";
                        }
    
                        leaf retransmit-recovery-path-msg-count {
                          type uint32;
                          description
                            "Number of resend recovery path packets.";
                        }
    
                        leaf response-recovery-path-msg-count {
                          type uint32;
                          description
                            "Number of ack packets for recovery path resend.";
                        }
    
                        leaf retransmit-gr-path-msg-count {
                          type uint32;
                          description
                            "Number of resend GRPath packets.";
                        }
    
                        leaf response-gr-path-msg-count {
                          type uint32;
                          description
                            "Number of ack packets for GRPath resend.";
                        }
    
                        leaf retransmit-notify-msg-count {
                          type uint32;
                          description
                            "Number of resend Notify packets.";
                        }
    
                        leaf response-notify-msg-count {
                          type uint32;
                          description
                            "Number of ack packets for Notify resend.";
                        }
                      }  // container statistics
                    }  // list rsvp-interface
                  }  // container rsvp-interfaces
                }  // container te
    
                container ldp {
                  when
                    "/mpls:mpls/mpls-ldp:ldp/mpls-ldp:enable='true'";
                  description
                    "Configure LDP and query information.";
                  container instance {
                    ext:generated-by "system" {
                      when "/mpls:mpls/mpls-ldp:ldp/mpls-ldp:enable='true'";
                      ext:filter "../../../ni:name = '_public_'";
                      description "The public instances is generated automatically when LDP is enabled.";
                    }
                    when
                      "../../../ni:name='_public_' or (../../../ni:name!='_public_' and ../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast'])";
                    presence
                      "When enable mpls ldp vpn-instance";
                    description
                      "Configure an LDP VPN instance by using query, modify, create, or delete.";
                    leaf lsr-id {
                      type inet:ipv4-address-no-zone;
                      description
                        "LSR ID of an instance.";
                    }
    
                    leaf igp-sync-delay-time {
                      type uint32 {
                        range "0..65535";
                      }
                      units "s";
                      default "10";
                      description
                        "Specifies the interval at which an interface waits to establish an LSP after an LDP session is set up.";
                    }
    
                    leaf graceful-delete-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable of graceful delete.";
                    }
    
                    leaf graceful-delete-time {
                      when
                        "../graceful-delete-enable='true'";
                      type uint32 {
                        range "1..65535";
                      }
                      units "s";
                      default "5";
                      description
                        "Delay time for removing a upstream label after the LDP session between the NE and the upstream node goes down.";
                    }
    
                    leaf no-mapping-enable {
                      when
                        "../../../../ni:name='_public_'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the sending of mappings to a remote neighbor.";
                    }
    
                    leaf auto-dod-request-enable {
                      when
                        "../../../../ni:name='_public_'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable Auto Dod Request.";
                    }
    
                    leaf split-horizon {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the sending of IPv4 label mapping messages to downstream LDP peers.";
                    }
    
                    leaf send-all-loopback {
                      when
                        "../../../../ni:name='_public_'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable to advertise routes to all local loopback addresses to LDP peers.";
                    }
    
                    leaf longest-match {
                      when
                        "../../../../ni:name='_public_'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable Longest Match.";
                    }
    
                    leaf loop-detect {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable loop detect on an LSR.";
                    }
    
                    leaf label-ctrl-mode {
                      type ldp-label-ctrl-mode-type;
                      default "ordered";
                      description
                        "Specifies label distribution control mode to be Independent or Ordered.";
                    }
    
                    leaf auto-remote-keep-alive-hold {
                      when
                        "../../../../ni:name='_public_'";
                      type uint16 {
                        range "30..65535";
                      }
                      units "s";
                      default "45";
                      description
                        "Specifies the value of the keepalive packet holding timer for auto remote peer.";
                    }
    
                    leaf traffic-statistic-mode {
                      when
                        "../../../../ni:name='_public_' and /mpls:mpls/mpls:common/mpls:global/mpls:traffic-statistic-enable='true'";
                      type ldp-traffic-statistic-type;
                      default "none";
                      description
                        "LDP traffic statistic mode.";
                    }
    
                    leaf traffic-statistic-ip-prefix-name {
                      when
                        "../traffic-statistic-mode='host-ip-prefix'";
                      type leafref {
                        path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                      }
                      mandatory true;
                      description
                        "Specifies or clear the IP prefix triggering mode, LDP is triggered to establish or to clear LSPs by IP address prefixes.";
                    }
    
                    container authentication {
                      presence
                        "Specifies authentication is enabled";
                      description
                        "Enable/disable global LDP authentication.";
                      leaf auth-mode {
                        ext:operation-exclude "update";
                        type ldp-auth-type-all;
                        mandatory true;
                        description
                          "Global LDP authentication type. If you want to clear the authentication, you can delete the presence container 'authentication'.";
                      }
    
                      leaf md5-type {
                        when
                          "../auth-mode = 'md5'";
                        type ldp-auth-type-all-group;
                        mandatory true;
                        description
                          "Global LDP md5 authentication type.";
                      }
    
                      leaf md5-password {
                        when
                          "../md5-type='md5-ciper' or ../md5-type='md5-plain'";
                        type pub-type:password-extend {
                          length "1..432";
                        }
                        mandatory true;
                        description
                          "Global LDP MD5 Password. The password is a string ranging from 1 to 255 characters for a simple password and 20 to 432 characters for a ciphertext password.
    If you want to clear the authentication, you can delete the presence container 'authentication'.";
                      }
    
                      leaf keychain-name {
                        ext:case-sensitivity "lower-only";
                        when
                          "../auth-mode = 'keychain'";
                        type string {
                          length "1..47";
                          pattern '[^A-Z]+';
                        }
                        mandatory true;
                        description
                          "Global LDP keychain name. The name is case-insensitive. If you want to clear the authentication, you can delete the presence container 'authentication'.";
                      }
                    }  // container authentication
    
                    container interfaces {
                      description
                        "List of LDP interfaces.";
                      list interface {
                        key "name";
                        description
                          "Configure LDP interfaces. Query, modify, create, or delete LDP interfaces.";
                        leaf name {
                          type leafref {
                            path "../../../../../mpls:common/mpls:mpls-interfaces/mpls:mpls-interface/mpls:name";
                          }
                          description
                            "Interface name. The name is case-insensitive.";
                        }
    
                        leaf hello-send-time {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Specifies the value of the Hello packet sending timer.";
                        }
    
                        leaf hello-hold-time {
                          type uint16 {
                            range "3..65535";
                          }
                          units "s";
                          default "15";
                          description
                            "Specifies the interval value of the Hello hold timer.";
                        }
    
                        leaf keep-alive-send-time {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Specifies the value of the keepalive packet sending timer.";
                        }
    
                        leaf keep-alive-hold-time {
                          type uint16 {
                            range "30..65535";
                          }
                          units "s";
                          default "45";
                          description
                            "Specifies the value of the keepalive packet holding timer.";
                        }
    
                        leaf igp-sync-delay-time {
                          type uint32 {
                            range "0..65535";
                          }
                          units "s";
                          description
                            "Specifies an interval at which an interface waits to establish an LSP after an LDP session is set up.";
                        }
    
                        leaf mldp-p2mp-disable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable mldp p2mp for interface.";
                        }
    
                        leaf transport-address {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Configures an interface address to be used as the transport address.";
                        }
    
                        leaf local-lsr-id-address {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Configures an interface address to be used as local lsr-id address.";
                        }
    
                        leaf label-advertise-mode {
                          type ldp-label-distribute-mode-cfg;
                          default "DU";
                          description
                            "Specifies the label distribute mode.";
                        }
    
                        container status {
                          config false;
                          description
                            "Operational data of LDP interface status data set.";
                          leaf if-state {
                            type ldp-state;
                            config false;
                            description
                              "Interface status.";
                          }
    
                          leaf label-distribution-mode {
                            type ldp-label-distribute-mode;
                            config false;
                            description
                              "Specifies a label distribution mode used by an interface.";
                          }
    
                          leaf negotiated-hello-hold-time {
                            type uint16 {
                              range "0..65535";
                            }
                            units "s";
                            config false;
                            description
                              "Specifies a negotiated value of the hello hold timer used by an interface.";
                          }
    
                          leaf effective-mtu {
                            type uint32 {
                              range "0..65535";
                            }
                            units "Byte";
                            config false;
                            description
                              "Specifies a valid MTU configured on an interface.";
                          }
    
                          leaf auto-trigger-type {
                            type ldp-if-auto-config-type;
                            config false;
                            description
                              "Specifies auto config flag of LDP interface by IGP. For example, ISIS, OSPF, ISIS&OSPF trigger config.";
                          }
                        }  // container status
                      }  // list interface
                    }  // container interfaces
    
                    container remote-peers {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "List of remote LDP neighbor.";
                      list remote-peer {
                        key "name";
                        description
                          "Configure remote LDP peers. Query, modify, create, or delete remote LDP peers.";
                        leaf name {
                          type string {
                            length "1..32";
                          }
                          description
                            "Specifies the name of a remote neighbor.";
                        }
    
                        leaf remote-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Specifies the IPv4 address of a remote neighbor.";
                        }
    
                        leaf description {
                          type string {
                            length "1..242";
                          }
                          description
                            "Specifies the description of a remote neighbor.";
                        }
    
                        leaf no-mapping {
                          when "../remote-ip";
                          type ldp-peer-no-mapping-type;
                          default "default";
                          description
                            "Prohibits the sending of mappings to a remote neighbor.";
                        }
    
                        leaf auto-dod-request-mode {
                          type auto-dod-request-type;
                          default "default";
                          description
                            "Auto Dod Request Mode.";
                        }
    
                        leaf hello-send-time {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Specifies the value of the Hello packet sending timer.";
                        }
    
                        leaf hello-hold-time {
                          type uint16 {
                            range "3..65535";
                          }
                          units "s";
                          default "45";
                          description
                            "Specifies the value of the Hello packet holding timer.";
                        }
    
                        leaf keep-alive-send-time {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Specifies the value of the Keepalive packet sending timer.";
                        }
    
                        leaf keep-alive-hold-time {
                          type uint16 {
                            range "30..65535";
                          }
                          units "s";
                          default "45";
                          description
                            "Specifies the value of the Keepalive holding timer.";
                        }
    
                        leaf igp-sync-delay-time {
                          type uint32 {
                            range "0..65535";
                          }
                          units "s";
                          description
                            "Specifies an interval at which an interface waits to establish an LSP after an LDP session is set up.";
                        }
    
                        leaf local-lsr-id-address {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Configures an interface address to be used as local lsr-id address. The name is case-insensitive.";
                        }
    
                        leaf label-advertise-mode {
                          type ldp-label-distribute-mode-cfg;
                          default "DU";
                          description
                            "Specifies the label distribution mode used by a remote neighbor.";
                        }
    
                        container status {
                          config false;
                          description
                            "Operational state of the remote neighbor.";
                          leaf remote-neighbor-state {
                            type ldp-state;
                            config false;
                            description
                              "Specifies the value status of a remote neighbor.";
                          }
    
                          leaf negotiated-hello-hold-time {
                            type uint16 {
                              range "3..65535";
                            }
                            units "s";
                            config false;
                            description
                              "Specifies the length of a negotiated Hello holding time on an interface.";
                          }
    
                          leaf manual-configuration-effect {
                            type boolean;
                            config false;
                            description
                              "Whether manual configuration is effective.";
                          }
    
                          container auto-create-type {
                            config false;
                            description
                              "Operational state of the type of automatically create remote LDP peers.";
                            leaf l2vpn {
                              type remote-peer-auto-config-l2;
                              config false;
                              description
                                "Remote peer that is automatically created using an L2VPN.";
                            }
    
                            leaf session-protection {
                              type remote-peer-auto-config-session-protection;
                              config false;
                              description
                                "Remote peer that is automatically created using session protection.";
                            }
    
                            leaf rlfa {
                              type remote-peer-auto-config-rlfa;
                              config false;
                              description
                                "Remote peer that is automatically created using RLFA.";
                            }
    
                            leaf auto-accept-function {
                              type remote-peer-auto-config-accept-function;
                              config false;
                              description
                                "Remote peer that is automatically created using the automatic accept function.";
                            }
                          }  // container auto-create-type
                        }  // container status
                      }  // list remote-peer
                    }  // container remote-peers
    
                    container auth-peers {
                      description
                        "List of LDP peers.";
                      list auth-peer {
                        must
                          "not(authen-enable='true' and authen-exclude='true') and ((../../split-horizon='true' and not(authen-enable='false' and authen-exclude='false')) or ../../split-horizon='false')";
                        key "id";
                        description
                          "Configure LDP peer policy status information on an LDP interface.";
                        leaf id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Specifies an LDP peer ID.";
                        }
    
                        leaf authen-exclude {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable LDP authentication exclude flag.";
                        }
    
                        leaf authen-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable LDP authentication mode.";
                        }
    
                        leaf authen-mode {
                          ext:operation-exclude "update";
                          when
                            "../authen-enable='true'";
                          type ldp-peer-auth-mode;
                          mandatory true;
                          description
                            "LDP peer authentication mode. You can configure the authentication mode to 'md5' for cipher or plain MD5 password, meanwhile you can configure the authentication mode to 'keychain' for keychain name.";
                        }
    
                        leaf md5-type {
                          when
                            "../authen-mode='md5'";
                          type ldp-auth-type;
                          mandatory true;
                          description
                            "LDP peer MD5 authentication type.";
                        }
    
                        leaf md5-password {
                          when
                            "../md5-type='md5-ciper' or ../md5-type='md5-plain'";
                          type pub-type:password-extend;
                          mandatory true;
                          description
                            "LDP peer MD5 Password. If cipher MD5 authentication type is used, the password is a string ranging from 1 to 255 characters for a simple password and 20 to 432 characters for a ciphertext password. If plain MD5 authentication type is used, the password is a string ranging from 1 to 255 characters.";
                        }
    
                        leaf keychain-name {
                          ext:case-sensitivity "lower-only";
                          when
                            "../authen-mode='keychain'";
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          mandatory true;
                          description
                            "LDP peer keychain name. The name is case-insensitive.";
                        }
    
                        leaf tcp-ao-name {
                          when
                            "../authen-mode='tcp-ao'";
                          type leafref {
                            path "/socket:socket/socket:tcp-aos/socket:tcp-ao/socket:name";
                          }
                          mandatory true;
                          description
                            "LDP peer tcp-ao name.";
                        }
    
                        leaf out-bound {
                          when
                            "../../../split-horizon='false'";
                          type boolean;
                          must
                            "((current()='false' and (../authen-enable='true' or ../authen-exclude='true')) or current()='true')";
                          default "false";
                          description
                            "Enable/disable the sending of IPv4 label mapping messages to downstream LDP peers.";
                        }
                      }  // list auth-peer
                    }  // container auth-peers
    
                    container auth-peer-groups {
                      description
                        "List of LDP authentication groups.";
                      list auth-peer-group {
                        key "preference";
                        max-elements 1;
                        description
                          "Apply query, modify, create, or delete the authentication function to a single local LDP peer and a label mapping control policy.";
                        leaf preference {
                          type uint32 {
                            range "1";
                          }
                          description
                            "Authentication group priority currently only support 1.";
                        }
    
                        leaf name {
                          type leafref {
                            path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                          }
                          mandatory true;
                          description
                            "Authentication group name.";
                        }
    
                        leaf authen-mode {
                          ext:operation-exclude "update";
                          type ldp-peer-auth-mode;
                          mandatory true;
                          description
                            "LDP peer group authentication mode.";
                        }
    
                        leaf md5-type {
                          when
                            "../authen-mode='md5'";
                          type ldp-auth-type;
                          mandatory true;
                          description
                            "LDP peer group MD5 authentication type.";
                        }
    
                        leaf md5-password {
                          when
                            "../md5-type='md5-ciper' or ../md5-type='md5-plain'";
                          type pub-type:password-extend;
                          mandatory true;
                          description
                            "LDP peer group MD5 Password. If cipher MD5 authentication type is used, the password is a string ranging from 1 to 255 characters for a simple password and 20 to 432 characters for a ciphertext password. If plain MD5 authentication type is used, the password is a string ranging from 1 to 255 characters.";
                        }
    
                        leaf keychain-name {
                          ext:case-sensitivity "lower-only";
                          when
                            "../authen-mode='keychain'";
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          mandatory true;
                          description
                            "Authentication group keychain name. The name is case-insensitive.";
                        }
                      }  // list auth-peer-group
                    }  // container auth-peer-groups
    
                    container gtsms {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "List of GTSM security attributes.";
                      list gtsm {
                        key "peer-transport-address";
                        description
                          "Configure GTSM attributes that reach by query, modify, create, or delete.";
                        leaf peer-transport-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Specifies a GTSM transport address.";
                        }
    
                        leaf hops {
                          type uint16 {
                            range "1..255";
                          }
                          mandatory true;
                          description
                            "Specifies the maximum number of GTSM hops.";
                        }
                      }  // list gtsm
                    }  // container gtsms
    
                    container session-protection {
                      when
                        "../../../../ni:name='_public_'";
                      presence
                        "When enable session protect";
                      description
                        "Enable/disable LDP session protection.";
                      leaf mode {
                        type session-protection-mode;
                        default "all";
                        description
                          "The flag of enabling session protect.";
                      }
    
                      leaf ip-prefix-name {
                        when
                          "../mode='peer-group'";
                        type leafref {
                          path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                        }
                        mandatory true;
                        description
                          "Specifies an ip-prefix name to establish an IP prefix or to clear an IP prefix.";
                      }
    
                      leaf duration-type {
                        type protection-duration-type;
                        default "fixed-duration";
                        description
                          "Session protection duration type.";
                      }
    
                      leaf duration {
                        when
                          "../duration-type='fixed-duration'";
                        type uint32 {
                          range "30..2147483";
                        }
                        units "s";
                        default "86400";
                        description "Duration.";
                      }
                    }  // container session-protection
    
                    container accept-target-hello {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "Configure the function of automatically receiving remote Hello messages and automatically creating remote peers based on the received Hello messages.";
                      leaf mode {
                        type accept-target-hello-type;
                        must
                          "(current()='peer-group' and ../ip-prefix-name) or (current()!='peer-group' and not(../ip-prefix-name))";
                        default "none";
                        description
                          "Mode of receiving remote Hello messages.";
                      }
    
                      leaf ip-prefix-name {
                        type leafref {
                          path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                        }
                        must
                          "../mode='peer-group'";
                        description
                          "IP prefix name to establish an IP prefix or to clear an IP prefix.";
                      }
                    }  // container accept-target-hello
    
                    container topology-instances {
                      description
                        "List of LDP Topo instances.";
                      list topology-instance {
                        ext:generated-by "system" {
                          when "/mpls:mpls/mpls-ldp:ldp/mpls-ldp:enable='true'";
                          ext:filter "topology-id = 0";
                          description "The instances whose topology-id is '0' are generated automatically when LDP is enabled.";
                        }
                        key "topology-id ip-family";
                        max-elements 1;
                        description
                          "Configure and query LSP policies mapped to the topology instances, which realizes by query and modify LDP topology instance information.";
                        leaf topology-id {
                          type uint16 {
                            range "0";
                          }
                          description
                            "Currently Topo Instance ID only support 0.";
                        }
    
                        leaf ip-family {
                          type uint32 {
                            range "0";
                          }
                          description
                            "Currently Address family of an LDP topology instance only support 0.";
                        }
    
                        leaf topology-name {
                          type string {
                            length "1..31";
                          }
                          default "TOPO_0";
                          config false;
                          description
                            "Name of an LDP Tope instance. The name is case-insensitive.";
                        }
    
                        leaf lsp-transit-policy-name {
                          when
                            "../../../../../../ni:name='_public_'";
                          type leafref {
                            path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                          }
                          description
                            "Specifies the IP prefix policy name. After this policy is configured, an IP prefix list can be used to filter received LDP routes. Only the routes that match the specified prefix list can be used to establish LDP LSPs on which the local node is the transit node.";
                        }
    
                        leaf auto-frr-lsp-trigger-mode {
                          type auto-frr-ldp-trigger-type;
                          default "host";
                          description
                            "Specifies a triggering mode for establishing LSPs by LDP in FRR.";
                        }
    
                        leaf auto-frr-lsp-ip-prefix-name {
                          when
                            "../auto-frr-lsp-trigger-mode='ip-prefix'";
                          type leafref {
                            path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                          }
                          mandatory true;
                          description
                            "Name of an IP prefix list used to establish Auto FRR LSPs or to clear Auto FRR LSPs.";
                        }
    
                        container lsp-trigger-policy {
                          description
                            "Configure lsp trigger policy.";
                          leaf mode {
                            type lsp-trigger-type;
                            description
                              "Specifies a triggering mode for establishing LSPs by LDP.";
                          }
    
                          leaf ip-prefix-name {
                            when
                              "../mode='ip-prefix'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                            }
                            mandatory true;
                            description
                              "Specifies or clear the IP prefix triggering mode, LDP is triggered to establish or to clear LSPs by IP address prefixes.";
                          }
                        }  // container lsp-trigger-policy
    
                        container entropy-label-negotiate-primary-only {
                          when
                            "../../../../../../ni:name='_public_'";
                          presence
                            "When LDP is enabled to negotiate the entropy label capability only based on the primary LSP";
                          description
                            "Enable/disable the function for LDP to negotiate the entropy label capability only based on the primary LSP.";
                          leaf mode {
                            type entropy-label-negotiate-mode;
                            default "all";
                            description
                              "Effective policy mode.";
                          }
    
                          leaf ip-prefix-name {
                            when
                              "../mode='ip-prefix'";
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                            }
                            mandatory true;
                            description
                              "Name of the effective address prefix list when the policy mode is ip-prefix.";
                          }
                        }  // container entropy-label-negotiate-primary-only
    
                        container outbound {
                          when
                            "../../../../../../ni:name='_public_'";
                          description
                            "Configure Outbound Policy.";
                          container fec-peer-all {
                            description
                              "Configure global outbound FEC policy. LSPs can be established only for FECs allowed by the policy.";
                            leaf fec-policy-mode {
                              type fec-ip-prefix-type;
                              description
                                "Config outbound policy of FEC by prefix mode when needed to assign the except FEC LSP.";
                            }
    
                            leaf fec-ip-prefix-name {
                              when
                                "../fec-policy-mode='ip-prefix'";
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              mandatory true;
                              description
                                "Name of an IP prefix list used to establish an outbound FEC policy or to clear an outbound FEC policy.";
                            }
                          }  // container fec-peer-all
    
                          container bgp-peer-all {
                            description
                              "Configure global outbound BGP policy. LSPs can be established only for BGP labeled routes allowed by the policy.";
                            leaf bgp-policy-mode {
                              type bgp-ip-prefix-type;
                              description
                                "Config outbound policy of BGP by prefix mode when needed to assign the except FEC LSP.";
                            }
    
                            leaf bgp-ip-prefix-name {
                              when
                                "../bgp-policy-mode='ip-prefix'";
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              mandatory true;
                              description
                                "Config or clear outbound policy of BGP by prefix name when needed to assign or clear the except FEC LSP.";
                            }
                          }  // container bgp-peer-all
    
                          container fec-peer-groups {
                            when
                              "not (../fec-peer-all/fec-policy-mode)";
                            description
                              "List of FEC peer groups. Configure a FEC outbound policy if a device does not need to establish a specified FEC LSP based on a specified peer group.";
                            list fec-peer-group {
                              key "peer-group-name";
                              description
                                "Configure or clear a FEC outbound policy if a device does not need to establish or clear a specified FEC LSP based on a specified peer group.";
                              leaf peer-group-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Name of a peer group used in an outbound policy.";
                              }
    
                              leaf fec-policy-mode {
                                type fec-ip-prefix-group-type;
                                mandatory true;
                                description
                                  "FEC Prefix Mode Global outbound FEC policy.";
                              }
    
                              leaf fec-ip-prefix-name {
                                when
                                  "../fec-policy-mode='ip-prefix'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Name of a FEC prefix used in a FEC outbound policy if a device does not need to establish or clear a specified FEC LSP based on a specified peer group.";
                              }
                            }  // list fec-peer-group
                          }  // container fec-peer-groups
    
                          container bgp-peer-groups {
                            when
                              "not (../bgp-peer-all/bgp-policy-mode)";
                            description
                              "List of BGP peer groups. Configure or clear a BGP outbound policy for a peer group if a device does not need to establish or clear a specified FEC LSP based on a specified peer group.";
                            list bgp-peer-group {
                              key "peer-group-name";
                              description
                                "Configure or clear a BGP outbound policy for a peer group if a device does not need to establish or clear a specified FEC LSP based on a specified peer group.";
                              leaf peer-group-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Name of a peer group used in an outbound policy.";
                              }
    
                              leaf bgp-policy-mode {
                                type bgp-ip-prefix-group-type;
                                mandatory true;
                                description
                                  "Mode of a BGP prefix used in a BGP outbound policy.";
                              }
    
                              leaf bgp-ip-prefix-name {
                                when
                                  "../bgp-policy-mode='ip-prefix'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Name of a BGP prefix used in a BGP outbound policy if a device does not need to establish or clear a specified FEC LSP based on a specified peer group.";
                              }
                            }  // list bgp-peer-group
                          }  // container bgp-peer-groups
    
                          container fec-peers {
                            when
                              "not (../fec-peer-all/fec-policy-mode)";
                            description
                              "List of FEC peers. Outbound FEC policy of a specified LDP peer. LSPs can be established only for FECs allowed by the policy.";
                            list fec-peer {
                              key "peer-id";
                              description
                                "Configure or clear outbound policy when needed to assign or clear the except LSP.";
                              leaf peer-id {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Specifies an LDP peer ID.";
                              }
    
                              leaf fec-policy-mode {
                                type fec-ip-prefix-group-type;
                                mandatory true;
                                description
                                  "FEC Prefix Mode Global outbound FEC policy.";
                              }
    
                              leaf fec-ip-prefix-name {
                                when
                                  "../fec-policy-mode='ip-prefix'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Config outbound policy of FEC by prefix name when needed to assign or clear the except FEC LSP.";
                              }
                            }  // list fec-peer
                          }  // container fec-peers
    
                          container bgp-peers {
                            when
                              "not (../bgp-peer-all/bgp-policy-mode)";
                            description
                              "List of BGP peers. Config outbound policy when needed to assign the except LSP.";
                            list bgp-peer {
                              key "peer-id";
                              description
                                "Configure outbound policy when needed to assign the except LSP.";
                              leaf peer-id {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Specifies an LDP peer ID.";
                              }
    
                              leaf bgp-policy-mode {
                                type bgp-ip-prefix-group-type;
                                mandatory true;
                                description
                                  "Config outbound policy of FEC by prefix mode when needed to assign the except FEC LSP.";
                              }
    
                              leaf bgp-ip-prefix-name {
                                when
                                  "../bgp-policy-mode='ip-prefix'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Config or clear outbound policy of FEC by prefix name when needed to assign or clear the except FEC LSP.";
                              }
                            }  // list bgp-peer
                          }  // container bgp-peers
                        }  // container outbound
    
                        container inbound {
                          when
                            "../../../../../../ni:name='_public_'";
                          description
                            "Configure Inbound Policy.";
                          container fec-peer-all {
                            description
                              "Configure inbound policy when needed to assign the except LSP.";
                            leaf fec-policy-mode {
                              type fec-ip-prefix-type;
                              description
                                "Configure inbound policy of FEC by prefix mode when needed to assign the except FEC LSP.";
                            }
    
                            leaf fec-ip-prefix-name {
                              when
                                "../fec-policy-mode='ip-prefix'";
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              mandatory true;
                              description
                                "Config or clear inbound policy of FEC by prefix name when needed to assign or clear the except FEC LSP.";
                            }
                          }  // container fec-peer-all
    
                          container fec-peer-groups {
                            when
                              "not (../fec-peer-all/fec-policy-mode)";
                            description
                              "List of FEC peer groups. Configure a FEC inbound policy if a device does not need to establish a specified FEC LSP based on a specified peer group.";
                            list fec-peer-group {
                              key "peer-group-name";
                              description
                                "Configure a FEC inbound policy if a device does not need to establish a specified FEC LSP based on a specified peer group.";
                              leaf peer-group-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Name of a peer group used in an inbound policy.";
                              }
    
                              leaf fec-policy-mode {
                                type fec-ip-prefix-group-type;
                                mandatory true;
                                description
                                  "Mode of a FEC prefix used in a FEC inbound policy if a device does not need to establish a specified FEC LSP based on a specified peer group.";
                              }
    
                              leaf fec-ip-prefix-name {
                                when
                                  "../fec-policy-mode='ip-prefix'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Name of a FEC prefix used in a FEC inbound policy if a device does not need to establish or clear a specified FEC LSP based on a specified peer group.";
                              }
                            }  // list fec-peer-group
                          }  // container fec-peer-groups
    
                          container fec-peers {
                            when
                              "not (../fec-peer-all/fec-policy-mode)";
                            description
                              "List of FEC peers. Config inbound policy when needed to assign the except LSP.";
                            list fec-peer {
                              key "peer-id";
                              description
                                "Configure inbound policy when needed to assign the except LSP.";
                              leaf peer-id {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Specifies an LDP peer ID.";
                              }
    
                              leaf fec-policy-mode {
                                type fec-ip-prefix-group-type;
                                mandatory true;
                                description
                                  "Config inbound policy of FEC by prefix mode when needed to assign the except FEC LSP.";
                              }
    
                              leaf fec-ip-prefix-name {
                                when
                                  "../fec-policy-mode='ip-prefix'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                mandatory true;
                                description
                                  "Config inbound policy of FEC by prefix name when needed to assign the except FEC LSP.";
                              }
                            }  // list fec-peer
                          }  // container fec-peers
                        }  // container inbound
                      }  // list topology-instance
                    }  // container topology-instances
    
                    container adjacencys {
                      config false;
                      description
                        "List of LDP adjacency information.";
                      list adjacency {
                        key "peer-id type src-address";
                        config false;
                        description
                          "Operational data of LDP adjacency information.";
                        leaf peer-id {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "LDP peer ID.";
                        }
    
                        leaf type {
                          type string {
                            length "1..17";
                          }
                          config false;
                          description
                            "Adjacency type.";
                        }
    
                        leaf src-address {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "UDP source address of received Hello packets.";
                        }
    
                        leaf create-date {
                          type string {
                            length "1..10";
                          }
                          config false;
                          description
                            "Date when an LDP adjacency was created.";
                        }
    
                        leaf create-time {
                          type string {
                            length "1..8";
                          }
                          config false;
                          description
                            "Time when an LDP adjacency was created.";
                        }
    
                        leaf age-time {
                          type string {
                            length "1..16";
                          }
                          config false;
                          description
                            "Time when an LDP adjacency ages.";
                        }
    
                        leaf discovery-source-name {
                          type pub-type:if-name;
                          config false;
                          description
                            "Discovery-Source of an LDP adjacency.";
                        }
    
                        leaf udp-socket-id {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "UDP Socket ID.";
                        }
    
                        leaf cfg-hello-hold-time {
                          type uint16 {
                            range "0..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Configured Hello Hold timer.";
                        }
    
                        leaf sequence-no {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "Sequence number of a Hello message sent by a peer.";
                        }
    
                        leaf received-hello {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "Numbers of messages sent to an adjacency.";
                        }
    
                        leaf crc-error-rate {
                          type string {
                            length "1..9";
                          }
                          config false;
                          description
                            "Bit error rate received by an adjacency.";
                        }
                      }  // list adjacency
                    }  // container adjacencys
    
                    container peer-infos {
                      config false;
                      description
                        "List of LDP neighbours.";
                      list peer-info {
                        key "lsr-id label-advertise-mode";
                        config false;
                        description
                          "Operational data of LDP peer information.";
                        leaf lsr-id {
                          type string {
                            length "1..32";
                          }
                          config false;
                          description
                            "Specifies peer LSR ID.";
                        }
    
                        leaf label-advertise-mode {
                          type ldp-label-distribute-mode;
                          config false;
                          description
                            "Specifies peer label advertising mode.";
                        }
    
                        leaf max-pdu-len {
                          type uint16;
                          config false;
                          description
                            "Specifies peer max PDU length.";
                        }
    
                        leaf loop-detect {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Specifies peer supported loop detect capability.";
                        }
    
                        leaf support-ft-flag {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Specifies peer supported FT capability.";
                        }
    
                        leaf transport-address {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Specifies peer transport address.";
                        }
    
                        leaf path-vector-limit {
                          type uint16;
                          config false;
                          description
                            "Specifies peer PV limit.";
                        }
    
                        leaf keep-alive-send-time {
                          type uint16 {
                            range "0..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies peer keep-alive send time.";
                        }
    
                        leaf recovery-timer {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies peer recovery timer.";
                        }
    
                        leaf reconnect-timer {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies peer reconnect timer.";
                        }
    
                        leaf announcement-capability {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Specifies peer supported announcement capability.";
                        }
    
                        leaf mldp-p2mp-capability {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Ldp peer p2mp capability.";
                        }
    
                        leaf mldp-mbb-capability {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Ldp peer MBB capability.";
                        }
    
                        leaf-list discovery-source {
                          type string {
                            length "1..64";
                          }
                          config false;
                          description
                            "Operational data of peer discovery source. The name is case-insensitive.";
                        }
                      }  // list peer-info
                    }  // container peer-infos
    
                    container sessions {
                      config false;
                      description
                        "List of LDP sessions.";
                      list session {
                        key "peer-lsr-id";
                        config false;
                        description
                          "Operational state of LDP session.";
                        leaf peer-lsr-id {
                          type string {
                            length "1..32";
                          }
                          config false;
                          description
                            "Specifies a peer LSR ID.";
                        }
    
                        leaf local-lsr-id {
                          type string {
                            length "1..32";
                          }
                          config false;
                          description
                            "Specifies a local LSR ID.";
                        }
    
                        leaf tcp-source-address {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "TCP connection source address used by a session.";
                        }
    
                        leaf tcp-dest-address {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Destination address of the TCP connection used by a session.";
                        }
    
                        leaf state {
                          type ldp-session-state;
                          config false;
                          description
                            "Session state.";
                        }
    
                        leaf role {
                          type ldp-session-role;
                          config false;
                          description
                            "Session role.";
                        }
    
                        leaf type {
                          type ldp-session-type;
                          config false;
                          description
                            "Session type.";
                        }
    
                        leaf negotiate-keep-alive-hold-time {
                          type uint32 {
                            range "1..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies the negotiated value of the Keepalive hold timer.";
                        }
    
                        leaf keep-alive-sent {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies the number of sent Keepalive messages.";
                        }
    
                        leaf keep-alive-received {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies the number of received Keepalive messages.";
                        }
    
                        leaf distribute-mode {
                          type ldp-label-distribute-mode;
                          config false;
                          description
                            "Specifies the label distribution mode used by a session.";
                        }
    
                        leaf peer-label-state {
                          type ldp-peer-label-state;
                          config false;
                          description
                            "Indicates that a neighbor label for a session is available.";
                        }
    
                        leaf ft-flag {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "The current session supports the FT capability.";
                        }
    
                        leaf md5-flag {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Indicates whether the current session supports the MD5 algorithm.";
                        }
    
                        leaf reconnect-time {
                          type uint32 {
                            range "1..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Value of the reconnect timer.";
                        }
    
                        leaf recovery-time {
                          type uint32 {
                            range "1..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Value of the recovery timer.";
                        }
    
                        leaf age {
                          type string {
                            length "1..32";
                          }
                          config false;
                          description
                            "Time length for establishing an session. The value is in the format of 0000:00:00.";
                        }
    
                        leaf announcement-capability {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "The enabling state of dynamic announcement for session.";
                        }
    
                        leaf mldp-p2mp-capability {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "The enabling state of p2mp for session.";
                        }
    
                        leaf mldp-mbb-capability {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "The enabling state of mbb capability for session.";
                        }
    
                        leaf msg-count-in-last-period {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "Number of suppression in the suppression period of protocol packets.";
                        }
    
                        leaf over-run-period-count {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "Number of Protocol message suppress period.";
                        }
                      }  // list session
                    }  // container sessions
    
                    container lsps {
                      config false;
                      description
                        "List of LDP LSPs.";
                      list lsp {
                        key "address prefix-length index type out-interface-name next-hop";
                        config false;
                        description
                          "Operational data of an LDP LSP.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Destination address of an LSP.";
                        }
    
                        leaf prefix-length {
                          type uint32 {
                            range "1..32";
                          }
                          config false;
                          description
                            "Prefix length of the destination address of an LSP.";
                        }
    
                        leaf index {
                          type uint32;
                          config false;
                          description
                            "Specifies an LSP index.";
                        }
    
                        leaf type {
                          type ldp-lsp-type;
                          config false;
                          description
                            "LSP type.";
                        }
    
                        leaf out-interface-name {
                          type pub-type:if-name;
                          config false;
                          description
                            "Out-going interface. The name is case-insensitive.";
                        }
    
                        leaf next-hop {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Next hop.";
                        }
    
                        leaf is-frr-lsp {
                          type boolean;
                          config false;
                          description
                            "Whether it is an FRR LSP.";
                        }
    
                        leaf is-rlfa-lsp {
                          type boolean;
                          config false;
                          description
                            "Whether it is an RLFA FRR LSP.";
                        }
    
                        leaf is-tilfa-lsp {
                          type boolean;
                          config false;
                          description
                            "Whether it is a TI-LFA FRR LSP.";
                        }
    
                        leaf mtu {
                          type uint32 {
                            range "0..65535";
                          }
                          units "Byte";
                          config false;
                          description
                            "Specifies an LSP MTU.";
                        }
    
                        leaf time-stamp {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          units "s";
                          config false;
                          description
                            "Time length for establishing an LSP.";
                        }
    
                        leaf in-label {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "In-coming label.";
                        }
    
                        leaf out-label {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "Out-going label.";
                        }
    
                        leaf entropy-label-capability {
                          type string {
                            length "1..64";
                          }
                          config false;
                          description
                            "Delivers LDP entropy label capability on the ingress.";
                        }
                      }  // list lsp
                    }  // container lsps
    
                    container fecs {
                      config false;
                      description
                        "List of LDP FECs.";
                      list fec {
                        key "address prefix-length out-interface-name next-hop route-type";
                        config false;
                        description
                          "Operational data of LDP FECs.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Specifies a destination address.";
                        }
    
                        leaf prefix-length {
                          type uint32 {
                            range "1..32";
                          }
                          config false;
                          description
                            "Prefix length.";
                        }
    
                        leaf out-interface-name {
                          type pub-type:if-name;
                          config false;
                          description
                            "Out-going interface. The name is case-insensitive.";
                        }
    
                        leaf next-hop {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Next hop.";
                        }
    
                        leaf route-type {
                          type ldp-route-type;
                          config false;
                          description
                            "FEC route type.";
                        }
    
                        leaf state {
                          type ldp-fec-state;
                          config false;
                          description
                            "Specifies an FEC state.";
                        }
    
                        leaf lsp {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          config false;
                          description
                            "Specifies the value of the LSP numer.";
                        }
                      }  // list fec
                    }  // container fecs
    
                    container flows {
                      when
                        "../../../../ni:name='_public_'";
                      config false;
                      description
                        "List of the infos of LDP LSP traffic.";
                      list flow {
                        key "ipv4-dest-address ipv4-masklen out-interface-name next-hop lsr-type";
                        description
                          "Operational data of the traffic statistical table of SRBE.";
                        leaf ipv4-dest-address {
                          type inet:ipv4-address-no-zone;
                          description "Prefix.";
                        }
    
                        leaf ipv4-masklen {
                          type uint32 {
                            range "0..32";
                          }
                          description
                            "Length of mask.";
                        }
    
                        leaf out-interface-name {
                          type string {
                            length "1..49";
                          }
                          description
                            "The name of interface.";
                        }
    
                        leaf next-hop {
                          type inet:ipv4-address-no-zone;
                          description
                            "The ip address of next hop.";
                        }
    
                        leaf lsr-type {
                          type ldp-lsp-type;
                          description
                            "Tunnel role.";
                        }
    
                        leaf in-label {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description "Inlabel.";
                        }
    
                        leaf out-label {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "OutLabel.";
                        }
    
                        leaf flow-period {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Out period of the last period.";
                        }
    
                        leaf last-period-byte-rate {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "Out bites rate of the last period.";
                        }
    
                        leaf last-period-packet-rate {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "Out packet rate of the last period.";
                        }
    
                        leaf display-interval {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "Query interval.";
                        }
    
                        leaf interval-byte-rate {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "Rate at which bytes are sent within a specified interval.";
                        }
    
                        leaf interval-packet-rate {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "Rate at which packets are sent within a specified interval.";
                        }
    
                        leaf total-byte {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "Counting bytes.";
                        }
    
                        leaf total-packet {
                          type uint64 {
                            range
                              "0..18446744073709551615";
                          }
                          description
                            "The number of packets.";
                        }
                      }  // list flow
                    }  // container flows
    
                    container auto-config-interfaces {
                      when
                        "../../../../ni:name='_public_'";
                      config false;
                      description
                        "List of auto config LDP interfaces.";
                      list auto-config-interface {
                        key "name";
                        description
                          "Operational state of an auto config LDP interface. LDP instance that is automatically created using an IGP.";
                        leaf name {
                          type pub-type:if-name;
                          description
                            "Interface name. The name is case-insensitive.";
                        }
    
                        leaf state {
                          type ldp-state;
                          config false;
                          description
                            "Interface status.";
                        }
    
                        leaf negotiated-hello-hold-time {
                          type uint16 {
                            range "0..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies a negotiated value of the Hello hold timer used by an interface.in seconds.";
                        }
    
                        leaf auto-trigger-type {
                          type ldp-if-auto-config-type;
                          config false;
                          description
                            "Specifies auto config flag of LDP interface by IGP. For example, ISIS, OSPF, ISIS&OSPF trigger config. By default, there is no auto config.";
                        }
                      }  // list auto-config-interface
                    }  // container auto-config-interfaces
    
                    container auto-config-remote-peers {
                      when
                        "../../../../ni:name='_public_'";
                      config false;
                      description
                        "List of auto config remote LDP neighbor.";
                      list auto-config-remote-peer {
                        key "remote-ip";
                        config false;
                        description
                          "Operational state of an auto config remote LDP neighbor.";
                        leaf remote-ip {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Specifies the IPv4 address of a remote neighbor.";
                        }
    
                        leaf remote-peer-name {
                          type string {
                            length "1..32";
                          }
                          config false;
                          description
                            "Specifies the name of a remote neighbor.";
                        }
    
                        leaf peer-state {
                          type ldp-state;
                          config false;
                          description
                            "Specifies the value status of a remote neighbor.";
                        }
    
                        leaf negotiated-hello-hold-time {
                          type uint16 {
                            range "0..65535";
                          }
                          units "s";
                          config false;
                          description
                            "Specifies the length of a negotiated hello holding time on an interface.";
                        }
    
                        container auto-config-type {
                          config false;
                          description
                            "Operational state of auto config type.";
                          leaf l2vpn {
                            type remote-peer-auto-config-l2;
                            config false;
                            description
                              "Remote peer that is automatically created using an L2VPN.";
                          }
    
                          leaf session-protection {
                            type remote-peer-auto-config-session-protection;
                            config false;
                            description
                              "Remote peer that is automatically created using session protection.";
                          }
    
                          leaf rlfa {
                            type remote-peer-auto-config-rlfa;
                            config false;
                            description
                              "Remote peer that is automatically created using RLFA.";
                          }
    
                          leaf auto-accept-function {
                            type remote-peer-auto-config-accept-function;
                            config false;
                            description
                              "Remote peer that is automatically created using the automatic accept function.";
                          }
                        }  // container auto-config-type
                      }  // list auto-config-remote-peer
                    }  // container auto-config-remote-peers
    
                    container instance-status {
                      config false;
                      description
                        "Statistics of the status information about the LDP VPN instance.";
                      leaf label-dist-mode {
                        type ldp-label-dist-mode-all;
                        config false;
                        description
                          "Specifies a label distribution control mode.";
                      }
    
                      leaf label-retention-mode {
                        type ldp-label-ret-mode-all;
                        config false;
                        description
                          "Specifies a label retention mode.";
                      }
    
                      leaf lsp-number {
                        type uint32;
                        config false;
                        description
                          "Specifies the number of LSPs.";
                      }
    
                      leaf session-number {
                        type uint32;
                        config false;
                        description
                          "Number of sessions.";
                      }
    
                      leaf adjacency-number {
                        type uint32;
                        config false;
                        description
                          "Number of adjacencies.";
                      }
    
                      leaf interface-number {
                        type uint32;
                        config false;
                        description
                          "Number of interfaces.";
                      }
    
                      leaf fec-number {
                        type uint32;
                        config false;
                        description
                          "Specifies the number of FECs.";
                      }
                    }  // container instance-status
                  }  // container instance
                }  // container ldp
              }  // container mpls
    
              container nvo3 {
                when "../ni:name != '_public_'";
                description
                  "Configure NVO3 for a network instance.";
                list vni-list {
                  key "vni";
                  max-elements 1;
                  description
                    "Configure NVO3 for a network instance.";
                  leaf vni {
                    type uint32 {
                      range "1..16777215";
                    }
                    description
                      "VXLAN network identifier.";
                  }
    
                  leaf source-vtep-ip {
                    type inet:ipv4-address-no-zone;
                    description
                      "The address of VXLAN tunnel source point. When not configured, the address of interface NVE is used as default.";
                  }
                }  // list vni-list
              }  // container nvo3
    
              container qos {
                description
                  "Configure QoS apply.";
                container traffic-policy-vxlans {
                  when
                    "not(../../ni:name='_public_')";
                  description
                    "List of configure application of a traffic policy.";
                  list traffic-policy-vxlan {
                    key "direction";
                    max-elements 2;
                    description
                      "Configure application of a traffic policy.";
                    leaf direction {
                      type qos-direction-type;
                      description "Direction.";
                    }
    
                    leaf policy-name {
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:traffic-policys/qos:traffic-policy/qos:name";
                      }
                      mandatory true;
                      description "Policy name.";
                    }
    
                    leaf layer {
                      when
                        "../direction='inbound'";
                      type policy-apply-vxlan-layer-type;
                      description
                        "Classification based on Layer 2 or Layer 3 information.";
                    }
                  }  // list traffic-policy-vxlan
                }  // container traffic-policy-vxlans
              }  // container qos
    
              container multicast {
                description
                  "Configure multicast in the instance.";
                container ipv4 {
                  when
                    "(../../ni:name='_public_' and ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']) or ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/l3vpn:route-distinguisher or (../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast'] and /ni:network-instance/ni:global/ni:route-distinguisher-auto-ip)";
                  presence
                    "Create mcastbaseAf4.";
                  description
                    "Enable/disable multicast in the instance.";
                  container global {
                    description
                      "Configure global multicast configurations.";
                    leaf longest-match {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the function of selecting an RPF route based on the longest matching rule. By default, the route with the highest preference is selected as the RPF route.";
                    }
    
                    leaf load-splitting {
                      type load-splitting-type;
                      default "none";
                      description
                        "Configure a multicast load splitting policy.";
                    }
    
                    leaf cpu-fwd-disable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable CPU forwarding. By default, CPU forwarding is enabled.";
                    }
    
                    leaf recursive-lookup-local-mt-enable {
                      when
                        "../../../../ni:name='_public_'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable multicast recursive lookup local mt.";
                    }
                  }  // container global
    
                  container interface-min-ttls {
                    description
                      "List of multicast interface minimum TTL.";
                    list interface-min-ttl {
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                      must
                        "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination)";
                      must
                        "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination)";
                      key "name";
                      description
                        "Configure multicast interface minimum TTL.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an interface.";
                      }
    
                      leaf minimum-ttl {
                        type uint32 {
                          range "1..255";
                        }
                        default "1";
                        description
                          "Specify the minimum TTL value for multicast packets to be forwarded on an interface.";
                      }
                    }  // list interface-min-ttl
                  }  // container interface-min-ttls
    
                  container interface-track-vrrps {
                    description
                      "List of multicast track VRRP.";
                    list interface-track-vrrp {
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                      key "name";
                      description
                        "Configure multicast track VRRP.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an interface.";
                      }
    
                      leaf vrrp-id {
                        type uint8 {
                          range "1..255";
                        }
                        mandatory true;
                        description "VRRP ID.";
                      }
    
                      leaf is-admin {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable a device to track admin VRRP. The value false indicates that it tracks normal VRRP, The value true indicates that it tracks admin VRRP.";
                      }
    
                      leaf track-interface {
                        when
                          "../is-admin='true'";
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        mandatory true;
                        description
                          "Name of the interface associated with the VRRP backup group.";
                      }
                    }  // list interface-track-vrrp
                  }  // container interface-track-vrrps
    
                  container interface-boundarys {
                    description
                      "List of multicast boundaries.";
                    list interface-boundary {
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                      key "name group-address mask-length";
                      description
                        "Configure multicast boundaries.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an interface.";
                      }
    
                      leaf group-address {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '(22[4-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        description
                          "Indicate a multicast group address. In IPv4, the value ranges from 224.0.0.0 to 239.255.255.255, in dotted decimal notation.";
                      }
    
                      leaf mask-length {
                        type uint32 {
                          range "4..32";
                        }
                        description
                          "Specify the mask length of a multicast group address. In IPv4, the value ranges from 4 to 32.";
                      }
                    }  // list interface-boundary
                  }  // container interface-boundarys
    
                  container rpf-multi-topology {
                    when
                      "../../../ni:name='_public_'";
                    must
                      "../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name='multicast']";
                    presence
                      "Enable multicast services to run in a specified multicast topology instance.";
                    description
                      "Enable/disable the multicast multi-topology function. By default, the multicast multi-topology function is disabled. Before enabling a multicast multi-topology, you must create it globally first.";
                    container topology-rule-list {
                      description
                        "Configure multicast multi-topology rules. Advanced multicast multi-topology and base topology names are supported.";
                      leaf-list name {
                        type leafref {
                          path "../../../../../l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                        }
                        must
                          "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name=current()]";
                        description
                          "Configure name of a multicast multi-topology. The value is a string of case-sensitive characters.";
                      }
                    }  // container topology-rule-list
                  }  // container rpf-multi-topology
    
                  container limits {
                    description
                      "List of multicast vrf route limit.";
                    list limit {
                      must
                        "not(../../../../ni:name='_public_')";
                      must
                        "l3mc:upper-threshold>l3mc:lower-threshold";
                      key "type";
                      description
                        "Configure multicast vrf route limit.";
                      leaf type {
                        type limit-type;
                        description
                          "Limit type.";
                      }
    
                      leaf value {
                        type uint32 {
                          range "1..16384";
                        }
                        mandatory true;
                        description
                          "Limit value.";
                      }
    
                      leaf upper-threshold {
                        type uint32 {
                          range "1..100";
                        }
                        default "80";
                        description
                          "Upper threshold.";
                      }
    
                      leaf lower-threshold {
                        type uint32 {
                          range "1..100";
                        }
                        default "70";
                        description
                          "Lower threshold.";
                      }
    
                      leaf current-count {
                        type uint32 {
                          range "0..4294967295";
                        }
                        config false;
                        description
                          "Current entry count.";
                      }
                    }  // list limit
                  }  // container limits
                }  // container ipv4
    
                container ipv6 {
                  when
                    "(../../ni:name='_public_' and ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']) or ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/l3vpn:route-distinguisher or (../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] and /ni:network-instance/ni:global/ni:route-distinguisher-auto-ip)";
                  presence
                    "Create mcastbase-af6.";
                  description
                    "Enable/disable multicast IPv6 in the instance.";
                  container global {
                    description
                      "Configure global IPv6 multicast configurations.";
                    leaf load-splitting {
                      type load-splitting-type;
                      default "none";
                      description
                        "Configure a multicast load splitting policy.";
                    }
    
                    leaf cpu-fwd-disable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable CPU forwarding. By default, CPU forwarding is enabled.";
                    }
                  }  // container global
    
                  container interface-min-ttls {
                    description
                      "List of multicast IPv6 interface minimum TTL.";
                    list interface-min-ttl {
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                      must
                        "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination)";
                      must
                        "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination)";
                      key "name";
                      description
                        "Configure multicast IPv6 interface minimum TTL.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an interface.";
                      }
    
                      leaf minimum-ttl {
                        type uint32 {
                          range "1..255";
                        }
                        default "1";
                        description
                          "Specify the minimum TTL value for multicast packets to be forwarded on an interface. The value is an integer ranging from 1 to 255. The default value is 1.";
                      }
                    }  // list interface-min-ttl
                  }  // container interface-min-ttls
    
                  container interface-boundarys {
                    description
                      "List of multicast IPv6 boundaries.";
                    list interface-boundary {
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                      key "name group-address mask-length";
                      description
                        "Configure multicast IPv6 boundaries.";
                      leaf name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an interface.";
                      }
    
                      leaf group-address {
                        type inet:ipv6-address-no-zone {
                          pattern
                            '[Ff]{2}[0-9A-Fa-f]{2}.+';
                        }
                        description
                          "Indicate a multicast group address. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                      }
    
                      leaf mask-length {
                        type uint32 {
                          range "8..128";
                        }
                        description
                          "Specify the mask length of a multicast group address. In IPv6, the value ranges from 8 to 128.";
                      }
                    }  // list interface-boundary
                  }  // container interface-boundarys
    
                  container rpf-multi-topology {
                    when
                      "../../../ni:name='_public_'";
                    must
                      "../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name='multicast']";
                    presence
                      "Enable multicast services to run in a specified multicast topology instance.";
                    description
                      "Enable/disable the multicast multi-topology function. By default, the multicast multi-topology function is disabled. Before enabling a multicast multi-topology, you must create it globally first.";
                    container topology-rule-list {
                      description
                        "Configure multicast multi-topology rules. Advanced multicast multi-topology and base topology names are supported.";
                      leaf-list name {
                        type leafref {
                          path "../../../../../l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                        }
                        must
                          "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name=current()]";
                        description
                          "Configure name of a multicast multi-topology. The value is a string of case-sensitive characters.";
                      }
                    }  // container topology-rule-list
                  }  // container rpf-multi-topology
    
                  container limits {
                    description
                      "List of multicast vrf route limit.";
                    list limit {
                      must
                        "not(../../../../ni:name='_public_')";
                      must
                        "l3mc:upper-threshold>l3mc:lower-threshold";
                      key "type";
                      description
                        "Configure multicast vrf route limit.";
                      leaf type {
                        type limit-type;
                        description
                          "Limit type.";
                      }
    
                      leaf value {
                        type uint32 {
                          range "1..16384";
                        }
                        mandatory true;
                        description
                          "Limit value.";
                      }
    
                      leaf upper-threshold {
                        type uint32 {
                          range "1..100";
                        }
                        default "80";
                        description
                          "Upper threshold.";
                      }
    
                      leaf lower-threshold {
                        type uint32 {
                          range "1..100";
                        }
                        default "70";
                        description
                          "Lower threshold.";
                      }
    
                      leaf current-count {
                        type uint32 {
                          range "0..4294967295";
                        }
                        config false;
                        description
                          "Current entry count.";
                      }
                    }  // list limit
                  }  // container limits
                }  // container ipv6
              }  // container multicast
    
              container igmp {
                when
                  "../l3mc:multicast/l3mc:ipv4";
                description
                  "Configure IGMP configurations.";
                container global {
                  presence "Create IGMP.";
                  description
                    "Enable/disable IGMP in an instance.";
                  leaf query-interval {
                    type uint32 {
                      range "1..18000";
                    }
                    units "s";
                    default "60";
                    description
                      "Specify the interval at which the device sends general query messages.";
                  }
    
                  leaf query-response-interval {
                    type uint32 {
                      range "1..125";
                    }
                    units "s";
                    default "10";
                    description
                      "Specify the maximum response time for a query message.";
                  }
    
                  leaf robustness {
                    type uint32 {
                      range "2..5";
                    }
                    default "2";
                    description
                      "Specify the number of times for retransmitting a message to avoid the packet loss.";
                  }
    
                  leaf last-member-query-interval {
                    type uint32 {
                      range "1..25";
                    }
                    units "s";
                    default "1";
                    description
                      "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs IGMPv2 or IGMPv3.";
                  }
    
                  leaf require-router-alert {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the router to process the messages whose IP headers contain Router-Alert options globally.";
                  }
    
                  leaf send-router-alert {
                    type boolean;
                    default "true";
                    description
                      "Enable/disable the router to send the messages with Router-Alert options in the IP headers globally.";
                  }
    
                  leaf other-querier-present-time {
                    type uint32 {
                      range "60..300";
                    }
                    units "s";
                    description
                      "Set the global Keepalive period for other queriers.";
                  }
    
                  choice ipsec {
                    description
                      "Specify a security association (SA) to implement IP Security (IPsec) authentication.";
                    case for-all {
                      description
                        "Specify an SA using to verify all messages types sent and received.";
                      leaf sa-name {
                        type string {
                          length "1..15";
                        }
                        description "SA name.";
                      }
                    }  // case for-all
    
                    case for-query {
                      description
                        "Specify an SA using to verify query messages sent and received.";
                      leaf query-sa-name {
                        type string {
                          length "1..15";
                        }
                        description "SA name.";
                      }
                    }  // case for-query
                  }  // choice ipsec
    
                  leaf ssm-mapping-dns-domain {
                    type string {
                      length "1..63";
                    }
                    default "in-addr.arpa";
                    description
                      "Specify the name extension of DNS.";
                  }
    
                  leaf ssm-mapping-query-dns {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable that whether SSM-mapping is based on DNS.";
                  }
    
                  leaf ssm-mapping-query-dns-policy {
                    when
                      "../ssm-mapping-query-dns='true'";
                    type leafref {
                      path "/acl:acl/acl:groups/acl:group/acl:identity";
                    }
                    must
                      "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                    description
                      "Configure and filter the acl name of DNS ssm-mapping.";
                  }
    
                  container ssm-mappings {
                    description
                      "List of SSM-mapping rules.";
                    list ssm-mapping {
                      key "group-address mask-length source-address";
                      description
                        "Configure SSM-mapping rules.";
                      leaf group-address {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '(22[4-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        description
                          "Specify the address of a multicast group. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                      }
    
                      leaf mask-length {
                        type uint32 {
                          range "5..32";
                        }
                        description
                          "Specify the mask length of a multicast group address.";
                      }
    
                      leaf source-address {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '(12[0-6]|1[0-1]\d|[1-9]\d|[1-9])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|(12[8-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        description
                          "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                      }
                    }  // list ssm-mapping
                  }  // container ssm-mappings
                }  // container global
    
                container interfaces {
                  description
                    "List of MGMD configurations on interfaces.";
                  list interface {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                    key "name";
                    description
                      "Configure MGMD on an interface.";
                    leaf name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the type and number of an interface.";
                    }
    
                    leaf enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable protocols on an interface.";
                    }
    
                    leaf ip-source-policy-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a policy for filtering IGMP Report messages based on host addresses. By default, no policy is configured for filtering IGMP Report messages based on host addresses.";
                    }
    
                    leaf ip-source-policy-name {
                      when
                        "../ip-source-policy-enable='true'";
                      type leafref {
                        path "/acl:acl/acl:groups/acl:group/acl:identity";
                      }
                      must
                        "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                      description
                        "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string.";
                    }
    
                    leaf query-interval {
                      type uint32 {
                        range "1..18000";
                      }
                      units "s";
                      default "60";
                      description
                        "Specify the interval at which the device sends general query messages.";
                    }
    
                    leaf query-response-interval {
                      type uint32 {
                        range "1..125";
                      }
                      units "s";
                      default "10";
                      description
                        "Specify the maximum time for the response to a query message. This time is used to control the deadline of a host's group membership feedback.";
                    }
    
                    leaf robustness {
                      type uint32 {
                        range "2..5";
                      }
                      default "2";
                      description
                        "Specify the number of times for retransmitting messages to avoid packet loss.";
                    }
    
                    leaf version {
                      ext:operation-exclude "update" {
                        when "../on-demand-enable='true'";
                        description "The version configuration cannot be changed when On-Demand is running on the interface.";
                      }
                      type uint32 {
                        range "1..3";
                      }
                      default "2";
                      description
                        "Specify the version of IGMP running on an interface.";
                    }
    
                    leaf last-member-query-interval {
                      type uint32 {
                        range "1..25";
                      }
                      units "s";
                      default "1";
                      description
                        "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs IGMPv2 or IGMPv3.";
                    }
    
                    leaf require-router-alert {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable an interface to process messages whose IP headers contain Router-Alert options.";
                    }
    
                    leaf send-router-alert {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable an interface to send the messages with Router-Alert options in the IP headers.";
                    }
    
                    leaf other-querier-present-time {
                      type uint32 {
                        range "60..300";
                      }
                      units "s";
                      description
                        "Set the Keepalive period for other queriers on an interface.";
                    }
    
                    leaf immediately-leave {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable an interface that receives a leave message of a certain group to immediately delete the corresponding group records, without sending a last-member query message.";
                    }
    
                    leaf immediately-leave-policy {
                      when
                        "../immediately-leave='true'";
                      type leafref {
                        path "/acl:acl/acl:groups/acl:group/acl:identity";
                      }
                      must
                        "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'";
                      description
                        "Configure an ACL that defines a multicast group range. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a case-sensitive string.";
                    }
    
                    leaf on-demand-enable {
                      type boolean;
                      must
                        "../on-demand-enable='false' or ../version!='1'";
                      must
                        "../on-demand-enable='false' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ifm:type!='Virtual-Template'";
                      default "false";
                      description
                        "Enable/disable records about the groups that the interface joins never to age. By default, the group records age periodically. 1. This command is applicable to IGMPv2, IGMPv3 only. 2. This command can be used on the querier only.";
                    }
    
                    leaf entry-limit {
                      type uint32 {
                        range "1..16384";
                      }
                      description
                        "Specify the maximum number of entries that the current interface can create.";
                    }
    
                    leaf entry-limit-acl-name {
                      when "../entry-limit>0";
                      type leafref {
                        path "/acl:acl/acl:groups/acl:group/acl:identity";
                      }
                      must
                        "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'";
                      description
                        "Specify the range of multicast groups, the number of IGMP entries corresponding to which needs not be limited. The basic ACL number ranges from 2000 to 2999. The basic ACL filters group addresses only, without distinguishing (*, G) entries and (S, G) entries; the advanced ACL number ranges from 3000 to 3999. The advanced ACL filters (S, G) entries of the interface only. The name is a case-sensitive string.";
                    }
    
                    leaf ssm-mapping-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable SSM mapping on an interface.";
                    }
    
                    leaf ssm-mapping-policy {
                      when
                        "../ssm-mapping-enable='true'";
                      type string {
                        length "1..31";
                      }
                      description
                        "Configure a policy for SSM Mapping on an interface.";
                    }
    
                    leaf group-acl-name {
                      type leafref {
                        path "/acl:acl/acl:groups/acl:group/acl:identity";
                      }
                      must
                        "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'";
                      description
                        "Set a filter for multicast groups on an interface to control the range of multicast groups that hosts can join. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a case-sensitive string.";
                    }
    
                    leaf group-acl-version {
                      when "../group-acl-name";
                      type uint32 {
                        range "1..3";
                      }
                      description
                        "Forbids hosts that use a specified version to join the multicast group. The version can be specified in this command only after a multicast filtering policy is configured.";
                    }
    
                    leaf query-acl-name {
                      type leafref {
                        path "/acl:acl/acl:groups/acl:group/acl:identity";
                      }
                      must
                        "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                      description
                        "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string.";
                    }
    
                    choice ipsec {
                      description
                        "Specify a security association (SA) to implement IP Security (IPsec) authentication.";
                      case for-all {
                        description
                          "Specify an SA using to verify all messages types sent and received.";
                        leaf sa-name {
                          type string {
                            length "1..15";
                          }
                          description "SA name.";
                        }
                      }  // case for-all
    
                      case for-query {
                        description
                          "Specify an SA using to verify query messages sent and received.";
                        leaf query-sa-name {
                          type string {
                            length "1..15";
                          }
                          description "SA name.";
                        }
                      }  // case for-query
                    }  // choice ipsec
    
                    container status {
                      config false;
                      description
                        "Operational state of IGMP/MLD on interfaces.";
                      leaf address {
                        type inet:ip-address-no-zone;
                        description
                          "Specify the IP address of an interface.";
                      }
    
                      leaf state {
                        type if-state;
                        description
                          "Specify the status of an interface enabled with a protocol.";
                      }
    
                      leaf negotiate-query-interval {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        units "s";
                        description
                          "Interval negotiated by non-queriers for sending query messages. The negotiated value is supported by IGMPv3 only.";
                      }
    
                      leaf other-querier-timeout {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        units "s";
                        description
                          "Specify the timeout period of other queriers. The value is 0 on the interface that acts as the querier.";
                      }
    
                      leaf maximum-response-time {
                        type uint32;
                        units "s";
                        description
                          "Specify the maximum response time carried in a query message.";
                      }
    
                      leaf last-member-query-time {
                        type uint32;
                        units "s";
                        description
                          "Specify the timeout period for sending the last-member query message.";
                      }
    
                      leaf startup-query-interval {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        units "s";
                        description
                          "Specify the interval at which an interface functioning as the querier sends query messages when it is started.";
                      }
    
                      leaf startup-query-count {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        description
                          "Specify the number of times that an interface functioning as the querier sends query messages when it is started.";
                      }
    
                      leaf querier-address {
                        type inet:ip-address-no-zone;
                        description
                          "Specify the address of a querier.";
                      }
    
                      leaf is-local-querier {
                        type querier-local-or-not;
                        description
                          "Whether a query is a local query.";
                      }
    
                      leaf joins {
                        type uint32;
                        description
                          "Specify the number of groups that an interface has joined. When the interface joins a new group, the value increases by one; when the interface leaves a group, the value remains unchanged.";
                      }
    
                      leaf leaves {
                        type uint32;
                        description
                          "Specify the number of groups that the interface leaves. Each time when the interface leaves a group, the value increases by one.";
                      }
    
                      leaf negotiated-robustness {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        description
                          "Specify the robustness variable negotiated by non-queriers. The value is supported by IGMPv3 only.";
                      }
    
                      leaf startup-query-timer-state {
                        type timer-state-type;
                        description
                          "Specify the status of the timer for the interface functioning as the querier after being started. off: The interface immediately sends a query message after being started. on: The interface does not send a query message after being started.";
                      }
    
                      leaf other-querier-present-timer-state {
                        type timer-state-type;
                        description
                          "Specify the status of the timer identifying whether another querier is present. Off: The interface considers itself as a querier and that no other queriers exist.";
                      }
    
                      leaf total-group-reported {
                        type uint32;
                        description
                          "Specify the number of groups that the interface dynamically joins. When an interface dynamically joins a new multicast group, the value increases by one.";
                      }
    
                      leaf remote-backup-state {
                        type remote-backup-state-type;
                        description
                          "Remote backup state.";
                      }
                    }  // container status
                  }  // list interface
                }  // container interfaces
    
                container static-groups {
                  description
                    "List of static multicast groups configurations.";
                  list static-group {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                    key "interface group-address is-source-address source-address is-inc-step-group-mask inc-step-group-mask is-source-dns-ssm-mapping";
                    description
                      "Configure a static multicast group.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:main-interface/ethernet:l2-attribute)";
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ipv4-address-no-zone {
                        pattern
                          '(22[5-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|224(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){2}|224\.0(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))';
                      }
                      description
                        "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                    }
    
                    leaf is-source-address {
                      type boolean;
                      must
                        "../is-source-address='false' or (../is-source-dns-ssm-mapping='false' and ../source-address!='0.0.0.0')";
                      description
                        "Enable/disable a device to configure an address for the multicast source.";
                    }
    
                    leaf source-address {
                      type inet:ipv4-address-no-zone;
                      must
                        "../source-address='0.0.0.0' or ../is-source-address='true'";
                      description
                        "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                    }
    
                    leaf is-inc-step-group-mask {
                      type boolean;
                      must
                        "../is-inc-step-group-mask='false' or (../is-source-dns-ssm-mapping='false' and ../inc-step-group-mask!='0.0.0.0')";
                      description
                        "Enable/disable a device to specify the step mask in batch configuration mode.";
                    }
    
                    leaf inc-step-group-mask {
                      type inet:ipv4-address-no-zone;
                      must
                        "../inc-step-group-mask='0.0.0.0' or ../is-inc-step-group-mask='true'";
                      description
                        "Specify the step mask of a group address in batch configuration mode. It refers to the step between two neighboring multicast group addresses. The value is expressed in wildcard-mask mode and in dotted decimal notation, ranging from 0.0.0.1 to 15.255.255.255.";
                    }
    
                    leaf is-source-dns-ssm-mapping {
                      type boolean;
                      must
                        "../is-source-dns-ssm-mapping='false' or (../is-source-address='false' and ../is-inc-step-group-mask='false')";
                      description
                        "Enable/disable an DNS based SSM mapping.";
                    }
    
                    leaf group-number {
                      when
                        "../is-inc-step-group-mask='true'";
                      type uint32 {
                        range "2..512";
                      }
                      mandatory true;
                      description
                        "Specify the number of multicast group addresses in batch configuration mode.";
                    }
                  }  // list static-group
                }  // container static-groups
    
                container dot1q-static-groups {
                  description
                    "List of static multicast groups in dot1q-termination interface.";
                  list dot1q-static-group {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination";
                    must "begin-vid<=end-vid";
                    key "interface group-address is-source-address source-address is-inc-step-group-mask inc-step-group-mask begin-vid end-vid";
                    description
                      "Configure a static multicast group in a dot1q-termination interface.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ipv4-address-no-zone {
                        pattern
                          '(22[5-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|224(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){2}|224\.0(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))';
                      }
                      description
                        "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                    }
    
                    leaf is-source-address {
                      type boolean;
                      description
                        "Enable/disable a device to configure an address for the multicast source.";
                    }
    
                    leaf source-address {
                      type inet:ipv4-address-no-zone;
                      must
                        "../source-address='0.0.0.0' or ../is-source-address='true'";
                      must
                        "../source-address!='0.0.0.0' or ../is-source-address='false'";
                      description
                        "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                    }
    
                    leaf is-inc-step-group-mask {
                      type boolean;
                      description
                        "Enable/disable a device to specify the step mask in batch configuration mode.";
                    }
    
                    leaf inc-step-group-mask {
                      type inet:ipv4-address-no-zone;
                      must
                        "(../is-inc-step-group-mask='true' and ../inc-step-group-mask!='0.0.0.0') or (../is-inc-step-group-mask='false' and ../inc-step-group-mask='0.0.0.0')";
                      description
                        "Specify the step mask of a group address in batch configuration mode. It refers to the step between two neighboring multicast group addresses. The value is expressed in wildcard-mask mode and in dotted decimal notation, ranging from 0.0.0.1 to 15.255.255.255.";
                    }
    
                    leaf begin-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the start DOT1Q tag.";
                    }
    
                    leaf end-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the end DOT1Q tag.";
                    }
    
                    leaf group-number {
                      when
                        "../is-inc-step-group-mask='true'";
                      type uint32 {
                        range "2..512";
                      }
                      mandatory true;
                      description
                        "Specify the number of multicast group addresses configured in a batch.";
                    }
                  }  // list dot1q-static-group
                }  // container dot1q-static-groups
    
                container qinq-static-groups {
                  description
                    "List of static multicast groups configuration on qinq-termination interface.";
                  list qinq-static-group {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination";
                    must
                      "ce-begin-vid<=ce-end-vid";
                    key "interface group-address is-source-address source-address is-inc-step-group-mask inc-step-group-mask pe-vid ce-begin-vid ce-end-vid";
                    description
                      "Configure a static multicast group on a qinq-termination interface.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ipv4-address-no-zone {
                        pattern
                          '(22[5-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|224(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){2}|224\.0(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))';
                      }
                      description
                        "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                    }
    
                    leaf is-source-address {
                      type boolean;
                      description
                        "Enable/disable a device to configure an address for the multicast source.";
                    }
    
                    leaf source-address {
                      type inet:ipv4-address-no-zone;
                      must
                        "../source-address='0.0.0.0' or ../is-source-address='true'";
                      must
                        "../source-address!='0.0.0.0' or ../is-source-address='false'";
                      description
                        "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                    }
    
                    leaf is-inc-step-group-mask {
                      type boolean;
                      description
                        "Enable/disable a device to specify the step mask in batch configuration mode.";
                    }
    
                    leaf inc-step-group-mask {
                      type inet:ipv4-address-no-zone;
                      must
                        "(../is-inc-step-group-mask='true' and ../inc-step-group-mask!='0.0.0.0')  or (../is-inc-step-group-mask='false' and ../inc-step-group-mask='0.0.0.0')";
                      description
                        "Specify the step mask of a group address in batch configuration mode. It refers to the step between two neighboring multicast group addresses. The value is expressed in wildcard-mask mode and in dotted decimal notation, ranging from 0.0.0.1 to 15.255.255.255.";
                    }
    
                    leaf pe-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "QINQ PE ID in an outer VLAN tag.";
                    }
    
                    leaf ce-begin-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the start QINQ CE ID.";
                    }
    
                    leaf ce-end-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the end QINQ CE ID.";
                    }
    
                    leaf group-number {
                      when
                        "../is-inc-step-group-mask='true'";
                      type uint32 {
                        range "2..512";
                      }
                      mandatory true;
                      description
                        "Specify the number of multicast group addresses configured in a batch.";
                    }
                  }  // list qinq-static-group
                }  // container qinq-static-groups
    
                container display-static-groups {
                  config false;
                  description
                    "List of static multicast group information.";
                  list display-static-group {
                    key "interface group-address";
                    description
                      "Operational state of static multicast group.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specify a multicast group address. In the case of an IPv4, the value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255; in the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx (x ranges from 0 to F and A can be 0, or in the range of 3 to F).";
                    }
    
                    leaf source-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specify the address of a multicast source.";
                    }
    
                    leaf is-configured-boundary {
                      type boolean;
                      description
                        "Whether the multicast forwarding boundary is configured.";
                    }
                  }  // list display-static-group
                }  // container display-static-groups
    
                container groups {
                  config false;
                  description
                    "List of dynamic multicast group.";
                  list group {
                    key "interface group-address";
                    description
                      "Multicast group state.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specify a multicast group address. In the case of an IPv4 address, the value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255; in the case of an IPv6 address, the value in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx (x ranges from 0 to F and A can be 0, or in the range of 3 to F).";
                    }
    
                    leaf last-report-address {
                      type inet:ip-address-no-zone {
                      }
                      description
                        "Specify the host that sends the last report message.";
                    }
    
                    leaf up-time {
                      type pub-type:time-tick;
                      description
                        "Specify the time when a multicast group is discovered, in seconds.";
                    }
    
                    leaf expire-time {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the scheduled time to remove a group from the group table. The value is expressed in seconds.";
                    }
    
                    leaf last-member-query-counter {
                      type uint32;
                      description
                        "Specify the number of times that the last member query message is transmitted.";
                    }
    
                    leaf last-member-query-timer {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the timeout period for sending last member query messages.";
                    }
    
                    leaf source-filter-mode {
                      type filter-mode-type;
                      description
                        "Specify the group mode, exclude or include.";
                    }
    
                    leaf v1-host-timer {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the timeout period of an v1 host.";
                    }
    
                    leaf v2-host-timer {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the timeout period of an v2 host.";
                    }
    
                    leaf is-ssm-mapping {
                      type boolean;
                      description
                        "Identifies an SSM mapping-enabled group.";
                    }
    
                    container sources {
                      description
                        "List of dynamic multicast source.";
                      list source {
                        key "source-address";
                        description
                          "Dynamic multicast source state.";
                        leaf source-address {
                          type inet:ip-address-no-zone;
                          description
                            "Specify the address of a multicast source.";
                        }
    
                        leaf up-time {
                          type pub-type:time-tick;
                          description
                            "Specify the time when a multicast source is discovered.";
                        }
    
                        leaf expire-time {
                          type pub-type:time-tick {
                          }
                          description
                            "Specify the time left to delete records from the source table.";
                        }
    
                        leaf last-member-query-counter {
                          type uint32;
                          description
                            "Specify the number of times that the last member query message is transmitted.";
                        }
    
                        leaf last-member-query-timer {
                          type pub-type:time-tick {
                          }
                          description
                            "Specify the timeout period for sending last member query messages.";
                        }
                      }  // list source
                    }  // container sources
                  }  // list group
                }  // container groups
              }  // container igmp
    
              container mld {
                when
                  "../l3mc:multicast/l3mc:ipv6";
                description
                  "Configure MLD configurations.";
                container global {
                  presence "Create MLD.";
                  description
                    "Enable/disable MLD in an instance.";
                  leaf query-interval {
                    type uint32 {
                      range "1..18000";
                    }
                    units "s";
                    default "125";
                    description
                      "Specify the interval at which the device sends general query messages.";
                  }
    
                  leaf query-response-interval {
                    type uint32 {
                      range "1..125";
                    }
                    units "s";
                    default "10";
                    description
                      "Specify the maximum response time for a query message.";
                  }
    
                  leaf robustness {
                    type uint32 {
                      range "2..5";
                    }
                    default "2";
                    description
                      "Specify the number of times for retransmitting a message to avoid the packet loss.";
                  }
    
                  leaf last-member-query-interval {
                    type uint32 {
                      range "1..25";
                    }
                    units "s";
                    default "1";
                    description
                      "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs MLD.";
                  }
    
                  leaf require-router-alert {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the router to process the messages whose IP headers contain Router-Alert options globally.";
                  }
    
                  leaf send-router-alert {
                    type boolean;
                    default "true";
                    description
                      "Enable/disable the router to send the messages with Router-Alert options in the IP headers globally.";
                  }
    
                  leaf other-querier-present-time {
                    type uint32 {
                      range "60..300";
                    }
                    units "s";
                    description
                      "Set the global Keepalive period for other queriers.";
                  }
    
                  choice ipsec {
                    description
                      "Specify a security association (SA) to implement IP Security (IPsec) authentication.";
                    case for-all {
                      description
                        "Specify an SA using to verify all messages types sent and received.";
                      leaf sa-name {
                        type string {
                          length "1..15";
                        }
                        description "SA name.";
                      }
                    }  // case for-all
    
                    case for-query {
                      description
                        "Specify an SA using to verify query messages sent and received.";
                      leaf query-sa-name {
                        type string {
                          length "1..15";
                        }
                        description "SA name.";
                      }
                    }  // case for-query
                  }  // choice ipsec
    
                  container ssm-mappings {
                    description
                      "List of SSM-mapping rules configurations.";
                    list ssm-mapping {
                      key "group-address mask-length source-address";
                      description
                        "Configure a SSM-mapping rule.";
                      leaf group-address {
                        type inet:ipv6-address-no-zone {
                          pattern
                            '([Ff]{2}[0-9a-fA-F]{2})[0-9a-fA-F:\.]*';
                        }
                        description
                          "Specify the address of a multicast group. In the case of an IPv6 address, the value ranges from FF00:: to FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF, in the hexadecimal format.";
                      }
    
                      leaf mask-length {
                        type uint32 {
                          range
                            "16 | 32 | 64 | 128";
                        }
                        description
                          "Specify the mask length of a multicast group address.";
                      }
    
                      leaf source-address {
                        type inet:ipv6-address-no-zone {
                          pattern
                            '(([1-9A-Ea-e][0-9A-Fa-f]{3}:)|([Ff][0-9A-Da-d][0-9A-Fa-f]{2}:)|([Ff][Ee][0-7C-Fc-f][0-9A-Fa-f]:)|((0)?[1-9A-Fa-f][0-9A-Fa-f]{2}:)|((00)?[1-9A-Fa-f][0-9A-Fa-f]:)|((000)?[1-9A-Fa-f]:)).+';
                        }
                        description
                          "Specify the address of a multicast source. In the case of an IPv6 address, the value ranges from FF00:: to FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF, in hexadecimal notation.";
                      }
                    }  // list ssm-mapping
                  }  // container ssm-mappings
                }  // container global
    
                container interfaces {
                  description
                    "List of MGMD configurations on all interfaces.";
                  list interface {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                    key "name";
                    description
                      "Configure MGMD on an interface.";
                    leaf name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the type and number of an interface.";
                    }
    
                    leaf enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable protocols on an interface.";
                    }
    
                    leaf ip-source-policy-enable {
                      type boolean;
                      must
                        "../ip-source-policy-enable='false' or ../ip-source-policy-name";
                      default "false";
                      description
                        "Enable/disable a policy for filtering MLD Report messages based on host addresses.";
                    }
    
                    leaf ip-source-policy-name {
                      when
                        "../ip-source-policy-enable='true'";
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                      description
                        "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string.";
                    }
    
                    leaf query-interval {
                      type uint32 {
                        range "1..18000";
                      }
                      units "s";
                      default "125";
                      description
                        "Specify the interval at which the device sends general query messages.";
                    }
    
                    leaf query-response-interval {
                      type uint32 {
                        range "1..125";
                      }
                      units "s";
                      default "10";
                      description
                        "Specify the maximum time for the response to a query message. This time is used to control the deadline of a host's group membership feedback.";
                    }
    
                    leaf robustness {
                      type uint32 {
                        range "2..5";
                      }
                      default "2";
                      description
                        "Specify the number of times for retransmitting messages to avoid packet loss.";
                    }
    
                    leaf version {
                      ext:operation-exclude "update" {
                        when "../on-demand-enable='true'";
                        description "The version configuration cannot be changed when On-Demand is running on the interface.";
                      }
                      type uint32 {
                        range "1..2";
                      }
                      default "2";
                      description
                        "Specify the version of MLD running on an interface.";
                    }
    
                    leaf last-member-query-interval {
                      type uint32 {
                        range "1..25";
                      }
                      units "s";
                      default "1";
                      description
                        "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs MLD.";
                    }
    
                    leaf require-router-alert {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable an interface to process messages whose IP headers contain Router-Alert options.";
                    }
    
                    leaf send-router-alert {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable an interface to send the messages with Router-Alert options in the IP headers.";
                    }
    
                    leaf other-querier-present-time {
                      type uint32 {
                        range "60..300";
                      }
                      units "s";
                      description
                        "Set the Keepalive period for other queriers on an interface. The value ranges from 60 to 300, in second.";
                    }
    
                    leaf immediately-leave {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable an interface that receives a leave message of a certain group to immediately delete the corresponding group records, without sending a last-member query message.";
                    }
    
                    leaf immediately-leave-policy {
                      when
                        "../immediately-leave='true'";
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "Configure an ACL that defines a multicast group range. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a case-sensitive string.";
                    }
    
                    leaf on-demand-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable records about the groups that the interface joins never to age. By default, the group records age periodically. 1. This command is applicable to MLD only. 2. This command can be used on the querier only.";
                    }
    
                    leaf entry-limit {
                      type uint32 {
                        range "1..16384";
                      }
                      description
                        "Specify the maximum number of entries that the current interface can create.";
                    }
    
                    leaf entry-limit-acl-name {
                      when "../entry-limit>0";
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "Specify the range of multicast groups, the number of MLD entries corresponding to which needs not be limited. The basic ACL number ranges from 2000 to 2999. The basic ACL filters group addresses only, without distinguishing (*, G) entries and (S, G) entries; the advanced ACL number ranges from 3000 to 3999. The advanced ACL filters (S, G) entries of the interface only. The name is a case-sensitive string.";
                    }
    
                    leaf ssm-mapping-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable SSM mapping on an interface.";
                    }
    
                    leaf group-acl-name {
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "Set a filter for multicast groups on an interface to control the range of multicast groups that hosts can join. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a case-sensitive string.";
                    }
    
                    leaf group-acl-version {
                      when "../group-acl-name";
                      type uint32 {
                        range "1..2";
                      }
                      description
                        "Forbids hosts that use a specified version to join the multicast group. The version can be specified in this command only after a multicast filtering policy is configured.";
                    }
    
                    leaf query-acl-name {
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                      description
                        "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string.";
                    }
    
                    choice ipsec {
                      description
                        "Specify a security association (SA) to implement IP Security (IPsec) authentication.";
                      case for-all {
                        description
                          "Specify an SA using to verify all messages types sent and received.";
                        leaf sa-name {
                          type string {
                            length "1..15";
                          }
                          description "SA name.";
                        }
                      }  // case for-all
    
                      case for-query {
                        description
                          "Specify an SA using to verify query messages sent and received.";
                        leaf query-sa-name {
                          type string {
                            length "1..15";
                          }
                          description "SA name.";
                        }
                      }  // case for-query
                    }  // choice ipsec
    
                    container status {
                      config false;
                      description
                        "Operational state of IGMP/MLD on interfaces.";
                      leaf address {
                        type inet:ip-address-no-zone;
                        description
                          "Specify the IP address of an interface.";
                      }
    
                      leaf state {
                        type if-state;
                        description
                          "Specify the status of an interface enabled with a protocol.";
                      }
    
                      leaf negotiate-query-interval {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        units "s";
                        description
                          "Interval negotiated by non-queriers for sending query messages. The negotiated value is supported by IGMPv3 only.";
                      }
    
                      leaf other-querier-timeout {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        units "s";
                        description
                          "Specify the timeout period of other queriers. The value is 0 on the interface that acts as the querier.";
                      }
    
                      leaf maximum-response-time {
                        type uint32;
                        units "s";
                        description
                          "Specify the maximum response time carried in a query message.";
                      }
    
                      leaf last-member-query-time {
                        type uint32;
                        units "s";
                        description
                          "Specify the timeout period for sending the last-member query message.";
                      }
    
                      leaf startup-query-interval {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        units "s";
                        description
                          "Specify the interval at which an interface functioning as the querier sends query messages when it is started.";
                      }
    
                      leaf startup-query-count {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        description
                          "Specify the number of times that an interface functioning as the querier sends query messages when it is started.";
                      }
    
                      leaf querier-address {
                        type inet:ip-address-no-zone;
                        description
                          "Specify the address of a querier.";
                      }
    
                      leaf is-local-querier {
                        type querier-local-or-not;
                        description
                          "Whether a query is a local query.";
                      }
    
                      leaf joins {
                        type uint32;
                        description
                          "Specify the number of groups that an interface has joined. When the interface joins a new group, the value increases by one; when the interface leaves a group, the value remains unchanged.";
                      }
    
                      leaf leaves {
                        type uint32;
                        description
                          "Specify the number of groups that the interface leaves. Each time when the interface leaves a group, the value increases by one.";
                      }
    
                      leaf negotiated-robustness {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "1627389951" {
                              ext:meaning "-";
                            }
                          }
                        }
                        description
                          "Specify the robustness variable negotiated by non-queriers. The value is supported by IGMPv3 only.";
                      }
    
                      leaf startup-query-timer-state {
                        type timer-state-type;
                        description
                          "Specify the status of the timer for the interface functioning as the querier after being started. off: The interface immediately sends a query message after being started. on: The interface does not send a query message after being started.";
                      }
    
                      leaf other-querier-present-timer-state {
                        type timer-state-type;
                        description
                          "Specify the status of the timer identifying whether another querier is present. Off: The interface considers itself as a querier and that no other queriers exist.";
                      }
    
                      leaf total-group-reported {
                        type uint32;
                        description
                          "Specify the number of groups that the interface dynamically joins. When an interface dynamically joins a new multicast group, the value increases by one.";
                      }
    
                      leaf remote-backup-state {
                        type remote-backup-state-type;
                        description
                          "Remote backup state.";
                      }
                    }  // container status
                  }  // list interface
                }  // container interfaces
    
                container static-groups {
                  description
                    "List of static multicast groups configurations on interfaces.";
                  list static-group {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                    key "interface group-address is-source-address source-address is-mask-length mask-length";
                    description
                      "Configure a static multicast group.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:main-interface/ethernet:l2-attribute)";
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ipv6-address-no-zone {
                        pattern
                          '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                      }
                      description
                        "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx, among which x ranges from 0 to F and A can be 0, or in the range of 3 to F.";
                    }
    
                    leaf is-source-address {
                      type boolean;
                      description
                        "Enable/disable a device to configure an address for the multicast source.";
                    }
    
                    leaf source-address {
                      type inet:ipv6-address-no-zone;
                      must
                        "../source-address='::' or ../is-source-address='true'";
                      must
                        "../source-address!='::' or ../is-source-address='false'";
                      description
                        "Specify the address of a multicast source.";
                    }
    
                    leaf is-mask-length {
                      type boolean;
                      description
                        "Enable/disable a device to specify the length for the step mask of a multicast group address in batch configuration mode.";
                    }
    
                    leaf mask-length {
                      type uint32 {
                        range "0..128";
                      }
                      must
                        "../mask-length=0 or ../is-mask-length='true'";
                      description
                        "Specify the mask length of a multicast group address. In the case of an IPv6 address, the mask length is 16/32/64/128.";
                    }
    
                    leaf total-number {
                      when
                        "../is-mask-length='true'";
                      type uint32 {
                        range "2..512";
                      }
                      mandatory true;
                      description
                        "Specify the number of multicast group addresses in batch configuration mode.";
                    }
                  }  // list static-group
                }  // container static-groups
    
                container dot1q-static-groups {
                  description
                    "List of static multicast groups on dot1q-termination interfaces.";
                  list dot1q-static-group {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination";
                    must "begin-vid<=end-vid";
                    key "interface group-address is-source-address source-address is-mask-length mask-length begin-vid end-vid";
                    description
                      "Configure a static multicast group on a dot1q-termination interface.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ipv6-address-no-zone {
                        pattern
                          '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                      }
                      description
                        "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx, among which x ranges from 0 to F and A can be 0, or in the range of 3 to F.";
                    }
    
                    leaf is-source-address {
                      type boolean;
                      description
                        "Enable/disable a device to configure an address for the multicast source.";
                    }
    
                    leaf source-address {
                      type inet:ipv6-address-no-zone;
                      must
                        "../source-address='::' or ../is-source-address='true'";
                      must
                        "../source-address!='::' or ../is-source-address='false'";
                      description
                        "Specify the address of a multicast source.";
                    }
    
                    leaf is-mask-length {
                      type boolean;
                      description
                        "Enable/disable a device to specify the length for the step mask of a multicast group address in batch configuration mode.";
                    }
    
                    leaf mask-length {
                      type uint32 {
                        range "0..128";
                      }
                      must
                        "(../is-mask-length='true' and ../mask-length>=9) or (../is-mask-length='false' and ../mask-length=0)";
                      description
                        "Specify the step mask length of a multicast group address. An IPv6 address uses a mask with a length of 16, 32, 64, or 128 bits.";
                    }
    
                    leaf begin-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the start DOT1Q tag.";
                    }
    
                    leaf end-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the end DOT1Q tag.";
                    }
    
                    leaf group-number {
                      when
                        "../is-mask-length='true'";
                      type uint32 {
                        range "2..512";
                      }
                      mandatory true;
                      description
                        "Specify the number of multicast group addresses configured in a batch.";
                    }
                  }  // list dot1q-static-group
                }  // container dot1q-static-groups
    
                container qinq-static-groups {
                  description
                    "List of static multicast groups configuration on qinq-termination interfaces.";
                  list qinq-static-group {
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination";
                    must
                      "ce-begin-vid<=ce-end-vid";
                    key "interface group-address is-source-address source-address is-mask-length mask-length pe-vid ce-begin-vid ce-end-vid";
                    description
                      "Configure a static multicast group.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ipv6-address-no-zone {
                        pattern
                          '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                      }
                      description
                        "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx, among which x ranges from 0 to F and A can be 0, or in the range of 3 to F.";
                    }
    
                    leaf is-source-address {
                      type boolean;
                      description
                        "Enable/disable a device to configure an address for the multicast source.";
                    }
    
                    leaf source-address {
                      type inet:ipv6-address-no-zone;
                      must
                        "../source-address='::' or ../is-source-address='true'";
                      must
                        "../source-address!='::' or ../is-source-address='false'";
                      description
                        "Specify the address of a multicast source.";
                    }
    
                    leaf is-mask-length {
                      type boolean;
                      description
                        "Enable/disable a device to specify the length for the step mask of a multicast group address in batch configuration mode.";
                    }
    
                    leaf mask-length {
                      type uint32 {
                        range "0..128";
                      }
                      must
                        "(../is-mask-length='true' and ../mask-length>=9) or (../is-mask-length='false' and ../mask-length=0)";
                      description
                        "Specify the step mask length of a multicast group address. An IPv6 address uses a mask with a length of 16, 32, 64, or 128 bits.";
                    }
    
                    leaf pe-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "QINQ PE ID in an outer VLAN tag.";
                    }
    
                    leaf ce-begin-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the start QINQ CE ID.";
                    }
    
                    leaf ce-end-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Specify the end QINQ CE ID.";
                    }
    
                    leaf group-number {
                      when
                        "../is-mask-length='true'";
                      type uint32 {
                        range "2..512";
                      }
                      mandatory true;
                      description
                        "Specify the number of multicast group addresses configured in a batch.";
                    }
                  }  // list qinq-static-group
                }  // container qinq-static-groups
    
                container display-static-groups {
                  config false;
                  description
                    "List of static multicast group information.";
                  list display-static-group {
                    key "interface group-address";
                    description
                      "Operational state of static multicast group.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specify a multicast group address. In the case of an IPv4, the value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255; in the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx (x ranges from 0 to F and A can be 0, or in the range of 3 to F).";
                    }
    
                    leaf source-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specify the address of a multicast source.";
                    }
    
                    leaf is-configured-boundary {
                      type boolean;
                      description
                        "Whether the multicast forwarding boundary is configured.";
                    }
                  }  // list display-static-group
                }  // container display-static-groups
    
                container groups {
                  config false;
                  description
                    "List of dynamic multicast group.";
                  list group {
                    key "interface group-address";
                    description
                      "Multicast group state.";
                    leaf interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specify the name of an interface.";
                    }
    
                    leaf group-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specify a multicast group address. In the case of an IPv4 address, the value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255; in the case of an IPv6 address, the value in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx (x ranges from 0 to F and A can be 0, or in the range of 3 to F).";
                    }
    
                    leaf last-report-address {
                      type inet:ip-address-no-zone {
                      }
                      description
                        "Specify the host that sends the last report message.";
                    }
    
                    leaf up-time {
                      type pub-type:time-tick;
                      description
                        "Specify the time when a multicast group is discovered, in seconds.";
                    }
    
                    leaf expire-time {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the scheduled time to remove a group from the group table. The value is expressed in seconds.";
                    }
    
                    leaf last-member-query-counter {
                      type uint32;
                      description
                        "Specify the number of times that the last member query message is transmitted.";
                    }
    
                    leaf last-member-query-timer {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the timeout period for sending last member query messages.";
                    }
    
                    leaf source-filter-mode {
                      type filter-mode-type;
                      description
                        "Specify the group mode, exclude or include.";
                    }
    
                    leaf v1-host-timer {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the timeout period of an v1 host.";
                    }
    
                    leaf v2-host-timer {
                      type pub-type:time-tick {
                      }
                      description
                        "Specify the timeout period of an v2 host.";
                    }
    
                    leaf is-ssm-mapping {
                      type boolean;
                      description
                        "Identifies an SSM mapping-enabled group.";
                    }
    
                    container sources {
                      description
                        "List of dynamic multicast source.";
                      list source {
                        key "source-address";
                        description
                          "Dynamic multicast source state.";
                        leaf source-address {
                          type inet:ip-address-no-zone;
                          description
                            "Specify the address of a multicast source.";
                        }
    
                        leaf up-time {
                          type pub-type:time-tick;
                          description
                            "Specify the time when a multicast source is discovered.";
                        }
    
                        leaf expire-time {
                          type pub-type:time-tick {
                          }
                          description
                            "Specify the time left to delete records from the source table.";
                        }
    
                        leaf last-member-query-counter {
                          type uint32;
                          description
                            "Specify the number of times that the last member query message is transmitted.";
                        }
    
                        leaf last-member-query-timer {
                          type pub-type:time-tick {
                          }
                          description
                            "Specify the timeout period for sending last member query messages.";
                        }
                      }  // list source
                    }  // container sources
                  }  // list group
                }  // container groups
              }  // container mld
    
              container te {
                description
                  "Configure TE function information.";
                container interfaces {
                  description
                    "List of interfaces.";
                  list interface {
                    key "name";
                    description
                      "Configure interface with the TE capability.";
                    leaf name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                      description
                        "Specifies the name of a physical interface. The name is case-insensitive.";
                    }
    
                    leaf mpls-te-enable {
                      when
                        "/mpls:mpls/mpls-te:te/mpls-te:enable='true'";
                      type boolean;
                      must
                        "(/ni:network-instance/ni:instances/ni:instance/mpls:mpls/mpls:common/mpls:mpls-interfaces/mpls:mpls-interface[mpls:name=current()/../name] and /te:te/te:global/te:te-attribute-enable='false') or /te:te/te:global/te:te-attribute-enable='true'";
                      default "false";
                      description
                        "Enable/disable MPLS TE in the interface.";
                    }
    
                    leaf p2mp-te-disable {
                      when
                        "../mpls-te-enable='true'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable P2MP-TE on the interface.";
                    }
    
                    container attribute {
                      when
                        "../mpls-te-enable='true' or /te:te/te:global/te:te-attribute-enable='true'";
                      must
                        "not(admin-groups-name) or admin-groups='0x0'";
                      description
                        "Configure TE parameters.";
                      leaf metric {
                        type uint32 {
                          range "1..16777215";
                        }
                        description
                          "Specifies the Value of TE interface metric. The link with smallest metric value is used preferentially as a TE LSP.";
                      }
    
                      leaf admin-groups {
                        ext:case-sensitivity "upper2lower";
                        type pub-type:hex-binary;
                        default "0x0";
                        description
                          "Specifies interface management attributes. They are total 32 bits. Each bit is one attribute that is established on a TE LSP. Standby LSPs are selected based on the limit of the LSP affinity attribute.";
                      }
    
                      leaf-list admin-groups-name {
                        type leafref {
                          path "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping/te:attribute-name";
                        }
                        max-elements 32;
                        description
                          "Configure the interface management attributes. They are total 32 bits. Each bit is one attribute that is established on a TE LSP. Standby LSPs are selected based on the limit of the LSP affinity attribute.";
                      }
    
                      leaf-list srlg-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        max-elements 64;
                        description
                          "Configure a list of risk-shared link groups of TE interfaces.";
                      }
    
                      container bandwidth {
                        must
                          "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='non-ietf' or (/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode='mam' and max-reserved>=(bc0+bc1+bc2+bc3+bc4+bc5+bc6+bc7)) or /mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode='rdm'";
                        description
                          "Configure TE link bandwidth attributes.";
                        leaf max-reserved {
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          default "0";
                          description
                            "Specifies the maximum reserved bandwidth (kbit/s) of TE interfaces.
    Special explanation:
    Constraint: If a static BC0 or dynamic BC0 bandwidth is configured, the value of the static maximum reservable bandwidth node must be higher than or equal to the static or dynamic BC0 bandwidth. The configured bandwidth of the static maximum reservable bandwidth on a TE interface cannot exceed the physical bandwidth of the interface. The value of the static maximum reservable bandwidth is mutually exclusive with the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc0 {
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc0)";
                          default "0";
                          description
                            "Bc0 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC0 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC0 bandwidth. And the value of the static BC0 bandwidth is mutually exclusive with the dynamic BC0 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc1 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc1) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc0 >= ../bc1))";
                          default "0";
                          description
                            "Bc1 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC1 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC1 bandwidth. And the value of the static BC1 bandwidth is mutually exclusive with the dynamic BC1 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc2 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc2) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc1 >= ../bc2))";
                          default "0";
                          description
                            "Bc2 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC2 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC2 bandwidth. And the value of the static BC2 bandwidth is mutually exclusive with the dynamic BC2 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc3 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc3) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc2 >= ../bc3))";
                          default "0";
                          description
                            "Bc3 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC3 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC3 bandwidth. And the value of the static BC3 bandwidth is mutually exclusive with the dynamic BC3 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc4 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc4) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc3 >= ../bc4))";
                          default "0";
                          description
                            "Bc4 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC4 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC4 bandwidth. And the value of the static BC4 bandwidth is mutually exclusive with the dynamic BC4 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc5 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc5) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc4 >= ../bc5))";
                          default "0";
                          description
                            "Bc5 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC5 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC5 bandwidth. And the value of the static BC5 bandwidth is mutually exclusive with the dynamic BC5 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc6 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc6) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc5 >= ../bc6))";
                          default "0";
                          description
                            "Bc6 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC6 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC6 bandwidth. And the value of the static BC6 bandwidth is mutually exclusive with the dynamic BC6 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf bc7 {
                          when
                            "/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:ds-te-mode='ietf'";
                          type uint32 {
                            ext:value-meaning {
                              ext:item "0" {
                                ext:meaning "Physical interface bandwidth.";
                              }
                            }
                            range
                              "0..4294967295";
                          }
                          units "kbit/s";
                          must
                            "../max-reserved and (../max-reserved>=../bc7) and ((/mpls:mpls/mpls-te:te/mpls-te:global/mpls-te:bcm-model/mpls-te:bcm-mode = 'mam') or (../bc6 >= ../bc7))";
                          default "0";
                          description
                            "Bc7 bandwidth value in kbps.
    Special explanation:
    Constraint: When a static BC7 bandwidth is configured, the value of the static maximum reservable bandwidth must be higher than or equal to the static BC7 bandwidth. And the value of the static BC7 bandwidth is mutually exclusive with the dynamic BC7 bandwidth and the dynamic maximum reservable bandwidth.";
                        }
    
                        leaf dynamic-max-reserved-percent {
                          type uint16 {
                            range "1..1000";
                          }
                          must
                            "../max-reserved=0";
                          description
                            "Specifies the dynamic maximum reserved bandwidth percent of TE interfaces.
    Special explanation:
    Constraint: If a dynamic BC0 bandwidth node is configured, the value of dynamic maximum reservable bandwidth cannot be deleted and is mutually exclusive with the static maximum reservable bandwidth. And if the dynamic maximum reservable bandwidth is configured, the physical bandwidth of the interface cannot be less than the dynamic maximum reservable bandwidth (used bandwidth).";
                        }
    
                        leaf dynamic-bc0-percent {
                          type uint8 {
                            range "1..100";
                          }
                          units "%";
                          must
                            "(../dynamic-max-reserved-percent or (../max-reserved>0)) and ../bc0=0";
                          description
                            "Specifies the dynamic Bc0 bandwidth percent.
    Special explanation:
    Constraint: When a dynamic BC0 bandwidth node is configured, either of the dynamic and static maximum reservable bandwidth must be configured. If a static maximum reservable bandwidth is configured, the value of the dynamic BC0 bandwidth must be lower than or equal to the static maximum reservable bandwidth. And the value of dynamic BC0 bandwidth is mutually exclusive with the static BC0 bandwidth.";
                        }
    
                        leaf change-threshold-down {
                          type int32 {
                            range "0..100";
                          }
                          units "%";
                          default "10";
                          description
                            "Specifies the flooding threshold of bandwidth consumption percentage. Establishing TE LSPs consumes the bandwidth of the TE interface, and the available bandwidth of the interface is therefore reduced. If the percentage of the reduced bandwidth is larger than the configured flooding threshold, the bandwidth of the TE interface will be flooded to the network.";
                        }
    
                        leaf change-threshold-up {
                          type int32 {
                            range "0..100";
                          }
                          units "%";
                          default "10";
                          description
                            "Specifies the flooding threshold of the percentage of released bandwidth compared with the available interface bandwidth. When a TE LSP of an interface is removed, the bandwidth of the TE LSP is released. The available bandwidth of the interface is therefore increased. If the percentage of the increased bandwidth is larger than the configured flooding threshold, the bandwidth of the TE interface will be flooded over the network.";
                        }
    
                        leaf bc0-available {
                          type uint32;
                          units "kbit/s";
                          config false;
                          description
                            "Bc0 bandwidth available value on an interface.";
                        }
                      }  // container bandwidth
    
                      container status {
                        config false;
                        description
                          "Operational state of TE interface information.";
                        leaf used-bandwidth {
                          type uint32 {
                            range "0..40000000";
                          }
                          units "kbit/s";
                          config false;
                          description
                            "Allocated bandwidth on an interface.";
                        }
    
                        leaf line-protocol-state {
                          type line-protocol-status;
                          config false;
                          description
                            "TE Interface line protocol current state.";
                        }
    
                        leaf static-reserved-bandwidth {
                          type uint32 {
                            range "0..40000000";
                          }
                          units "kbit/s";
                          config false;
                          description
                            "Static reserved bandwidth on an interface.";
                        }
                      }  // container status
                    }  // container attribute
    
                    container mpls-te-attribute {
                      when
                        "../mpls-te-enable='true'";
                      description
                        "Configure MPLS TE link parameters.";
                      leaf auto-frr-mode {
                        type rsvp-fast-reroute-mode;
                        default "default";
                        description
                          "Auto FRR protection modes: global inheritance, link protection, node protection and self-adapting. By default, global AutoFRR is global inheritance. Link protection: A bypass tunnel can be used to protect only the links where the outbound interface of the primary LSP resides. Node protection: A bypass tunnel can be used to protect the downstream node of the links where the outbound interface of the primary LSP resides. Self-adapting: A bypass tunnel can be dynamically selected node protection or link protection according to the network conditions.";
                      }
    
                      container auto-frr-attributes {
                        description
                          "Configure MPLS TE link frr parameters.";
                        leaf bandwidth {
                          type uint32 {
                            range
                              "0..4000000000";
                          }
                          units "kbit/s";
                          description
                            "TE link auto bypass tunnel bandwidth (kbits/s) requested by an active tunnel. The value cannot exceed the bandwidth of the active tunnel.";
                        }
    
                        leaf setup-priority {
                          type uint32 {
                            range "0..7";
                          }
                          must
                            "(../hold-priority and (../setup-priority>=../hold-priority)) or not(../hold-priority)";
                          default "7";
                          description
                            "TE link auto bypass tunnel setup priority.";
                        }
    
                        leaf hold-priority {
                          type uint32 {
                            range "0..7";
                          }
                          default "7";
                          description
                            "TE link auto bypass tunnel hold priority.";
                        }
    
                        leaf hop-limit {
                          type uint32 {
                            range "1..32";
                          }
                          description
                            "TE link auto bypass tunnel hop limit.";
                        }
    
                        leaf include-any {
                          type pub-type:hex-binary;
                          description
                            "TE link auto bypass tunnel administrative group attribute (include any).";
                        }
    
                        leaf exclude-any {
                          type pub-type:hex-binary;
                          description
                            "TE link auto bypass tunnel administrative group attribute (exclude).";
                        }
    
                        leaf include-all {
                          type pub-type:hex-binary;
                          config false;
                          description
                            "TE link auto bypass tunnel administrative group attribute (include all).";
                        }
    
                        leaf-list include-any-affinity-name {
                          type leafref {
                            path "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping/te:attribute-name";
                          }
                          must
                            "not(../include-any or ../exclude-any)";
                          must
                            "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping[te:attribute-name=current()]/te:bit-sequence>=0 and /te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping[te:attribute-name=current()]/te:bit-sequence<=31";
                          max-elements 32;
                          description
                            "Configure a list of affinity names that can be refer to a tunnel to include any.";
                        }
    
                        leaf-list exclude-any-affinity-name {
                          type leafref {
                            path "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping/te:attribute-name";
                          }
                          must
                            "not(../include-any or ../exclude-any)";
                          must
                            "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping[te:attribute-name=current()]/te:bit-sequence>=0 and /te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping[te:attribute-name=current()]/te:bit-sequence<=31";
                          max-elements 32;
                          description
                            "Configure tunnel path affinity attribute: exclude.";
                        }
    
                        leaf-list include-all-affinity-name {
                          type leafref {
                            path "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping/te:attribute-name";
                          }
                          must
                            "not(../include-any or ../exclude-any)";
                          must
                            "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping[te:attribute-name=current()]/te:bit-sequence>=0 and /te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping[te:attribute-name=current()]/te:bit-sequence<=31";
                          max-elements 32;
                          description
                            "Configure a list of affinity names that can be refer to a tunnel to include all.";
                        }
                      }  // container auto-frr-attributes
                    }  // container mpls-te-attribute
                  }  // list interface
                }  // container interfaces
    
                container attribute-applications {
                  when
                    "/te:te/te:global/te:te-attribute-enable='true'";
                  description
                    "List of TE attribute applications.";
                  list attribute-application {
                    key "interface-name application-type";
                    description
                      "Configure TE attribute applications.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name='_public_'";
                      description
                        "Specifies the name of an interface. The name is case-insensitive.";
                    }
    
                    leaf application-type {
                      type te-link-application;
                      description
                        "Application type.";
                    }
    
                    leaf metric {
                      type uint32 {
                        range "1..16777215";
                      }
                      must "../inherit='false'";
                      description
                        "TE link metric value.";
                    }
    
                    leaf delay {
                      type uint32 {
                        range "1..16777215";
                      }
                      description
                        "TE link delay.";
                    }
    
                    leaf inherit {
                      type boolean;
                      must
                        "(current()= 'true' and not(../metric or ../admin-groups-name)) or (current()='false')";
                      default "false";
                      description
                        "Enable/disable TE link inherit.";
                    }
    
                    leaf-list admin-groups-name {
                      type leafref {
                        path "/te:te/te:affinity-define/te:affinity-mappings/te:affinity-mapping/te:attribute-name";
                      }
                      must "../inherit='false'";
                      max-elements 128;
                      description
                        "Configure the application management attributes.";
                    }
                  }  // list attribute-application
                }  // container attribute-applications
              }  // container te
    
              container gre {
                description
                  "Configure Generic Routing Encapsulation.";
                leaf-list bind-src-interface-names {
                  type leafref {
                    path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  must
                    "../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                  description
                    "Specify the interface bound to a GRE tunnel.";
                }
              }  // container gre
    
              container ospfv3 {
                description "Configure OSPFv3.";
                container gtsm {
                  when
                    "../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                  presence "Enable gtsm.";
                  description
                    "Configure the OSPFv3 GTSM.";
                  leaf hops {
                    type uint8 {
                      range "1..255";
                    }
                    mandatory true;
                    description
                      "Specifies the number of TTL hops to be detected.";
                  }
                }  // container gtsm
    
                container sites {
                  when
                    "../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                  description
                    "List of OSPFv3 instance.";
                  list site {
                    key "process-id";
                    description
                      "Configure OSPFv3 instance.";
                    leaf process-id {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description "Process ID.";
                    }
    
                    leaf router-id {
                      type inet:ipv4-address-no-zone;
                      description
                        "Router ID. It is used to set the OSPFv3 private ID.";
                    }
    
                    leaf fa-mode {
                      type forwarding-address-type;
                      default "disable";
                      description
                        "Forwarding address mode.";
                    }
    
                    leaf description {
                      type string {
                        length "1..80";
                        pattern '([^?]*)';
                      }
                      description
                        "Description of an OSPFv3 process.";
                    }
    
                    leaf rfc1583-compatible {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the route selection rule that is compatible with RFC 1583.";
                    }
    
                    leaf silent-all-interface {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable to suppress all interfaces in an OSPF process from sending or receiving OSPF packets.";
                    }
    
                    leaf retransmission-limit {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable maximum retransmission times enable.";
                    }
    
                    leaf retransmission-limit-value {
                      when
                        "../retransmission-limit='true'";
                      type uint32 {
                        range "2..255";
                      }
                      default "30";
                      description
                        "Maximum retransmission times.";
                    }
    
                    leaf lsa-refresh {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable refresh the age of LSA with greater lsa age.";
                    }
    
                    leaf peer-flapping-suppress {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable peer flapping suppress feature.";
                    }
    
                    leaf qppb-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable QPPB on this process.";
                    }
    
                    leaf sham-hello {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable peers keep alive by receiving any valid OSPF packet.";
                    }
    
                    leaf max-link-cost {
                      type uint16 {
                        range "1..65534";
                      }
                      description
                        "Set OSPFv3 maximum link cost value.";
                    }
    
                    leaf maxage-lsa {
                      type uint32 {
                        range "0..65535";
                      }
                      units "s";
                      default "20";
                      description
                        "Calculation of route delay when the OSPF LSA frequently flaps.";
                    }
    
                    container private-net {
                      when
                        "../../../../ni:name!='_public_'";
                      description
                        "Configure private network configuration of OSPFv3.";
                      choice route-tag {
                        description
                          "To set route tag value.";
                        case value {
                          description
                            "Tag of an imported VPN route.";
                          leaf value {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Tag of an imported VPN route. By default, the first two bytes of the tag value are fixed to be 0xD000, and the last two bytes are the local AS number of the local BGP. For example, if the AS number of BGP is 100, the default tag value in decimal notation is 3489661028.If not configed, the default is 0.";
                          }
                        }  // case value
                      }  // choice route-tag
    
                      leaf vpn-capability {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable route loop detection and directly calculate routes. When VPN multi instance is supported on the Multi VPN Instance CE (MCE) router, loop detection must be cancelled. It is applicable to only OSPF VPN instances.";
                      }
    
                      container domain-id {
                        presence
                          "ID of an OSPF domain.";
                        description
                          "Configure ID of an OSPF domain.";
                        leaf domain-id {
                          type inet:ipv4-address-no-zone;
                          mandatory true;
                          description
                            "ID of an OSPF domain.";
                        }
    
                        leaf type {
                          type domain-id-type;
                          default "0x0005";
                          description
                            "Type of an OSPF domain ID.";
                        }
    
                        leaf value {
                          type pub-type:hex-binary {
                            length "1..6";
                            pattern
                              '((0x|0X)?[0-9a-fA-F]{0,4})';
                          }
                          default "0x0";
                          description
                            "Value of an OSPF domain ID type.";
                        }
                      }  // container domain-id
    
                      container domain-id-secondarys {
                        when "../domain-id";
                        description
                          "List of the ID of a secondary domain.";
                        list domain-id-secondary {
                          key "domain-id type value";
                          description
                            "Configure the ID of a secondary domain.";
                          leaf domain-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "ID of an OSPF domain.";
                          }
    
                          leaf type {
                            type domain-id-type;
                            description
                              "Type of an OSPF domain ID.";
                          }
    
                          leaf value {
                            type pub-type:hex-binary {
                              length "1..6";
                              pattern
                                '((0x|0X)?[0-9a-fA-F]{0,4})';
                            }
                            description
                              "Value of an OSPF domain ID type.";
                          }
                        }  // list domain-id-secondary
                      }  // container domain-id-secondarys
                    }  // container private-net
    
                    container bandwidth {
                      description
                        "Configure bandwidth.";
                      leaf reference-value {
                        type uint32 {
                          range "1..2147483648";
                        }
                        default "100";
                        description
                          "Reference to the calculation of link costs.";
                      }
                    }  // container bandwidth
    
                    container timer {
                      description
                        "Configure OSPFv3 timer.";
                      container lsa-arrival {
                        must
                          "((start-interval<=max-interval) and (hold-interval<=max-interval)) or (not(max-interval) and not(start-interval)and not(hold-interval))";
                        description
                          "Configure interval between acceptance for two new instances of the same LSA.";
                        choice timer-type {
                          default
                            "intelligent-timer";
                          description
                            "Interval between acceptance for two new instances of the same LSA.";
                          case timer {
                            description
                              "Specify an interval.";
                            leaf interval {
                              type uint32 {
                                range "0..10000";
                              }
                              units "ms";
                              description
                                "Interval for receiving LSAs.";
                            }
                          }  // case timer
    
                          case intelligent-timer {
                            description
                              "Specify an intelligent timer.";
                            leaf max-interval {
                              type uint32 {
                                range
                                  "1..120000";
                              }
                              units "ms";
                              default "1000";
                              description
                                "Maximum interval for receiving OSPFv3 LSAs.";
                            }
    
                            leaf start-interval {
                              type uint32 {
                                range "0..60000";
                              }
                              units "ms";
                              default "500";
                              description
                                "Initial interval for receiving OSPFv3 LSAs.";
                            }
    
                            leaf hold-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              units "ms";
                              default "500";
                              description
                                "Hold interval for receiving OSPFv3 LSAs.";
                            }
                          }  // case intelligent-timer
                        }  // choice timer-type
                      }  // container lsa-arrival
    
                      container lsa-arr-supp-flap {
                        description
                          "Configure the delay timer for LSA acceptance.";
                        leaf interval {
                          type uint32 {
                            range "0..600";
                          }
                          units "s";
                          default "10";
                          description
                            "Specifies an interval for suppressing LSA advertising in case of route flapping. The value 0 indicates that LSA advertising is not suppressed.";
                        }
    
                        leaf threshold-count {
                          type uint32 {
                            range "3..100";
                          }
                          default "30";
                          description
                            "Value of the threshold of LSAs to be suppressed.";
                        }
                      }  // container lsa-arr-supp-flap
    
                      container lsa-originate {
                        must
                          "((start-interval<=max-interval) and (hold-interval<=max-interval)) or (not(max-interval) and not(start-interval)and not(hold-interval))";
                        description
                          "Configure interval for receiving LSAs either through an intelligent timer or timer.";
                        leaf other-type-interval {
                          type uint32 {
                            range "0..10";
                          }
                          units "s";
                          default "5";
                          description
                            "Specify an updating/originating interval for Type 3, Type 4 and Type 10 LSAs. Interval for updating the LSAs except OSPF router LSAs and network LSAs.";
                        }
    
                        choice timer-type {
                          default "interval";
                          description
                            "Specify an updating/originating interval for Type 3, Type 4 and Type 10 LSAs.";
                          case interval {
                            description
                              "Specify an intelligent timer for router LSA, network LSA, external LSA and NSSA LSA.";
                            leaf max-interval {
                              type uint32 {
                                range
                                  "1..120000";
                              }
                              default "5000";
                              description
                                "Maximum interval for updating OSPFv3 LSAs.";
                            }
    
                            leaf start-interval {
                              type uint32 {
                                range "0..60000";
                              }
                              default "500";
                              description
                                "Initial interval for updating OSPFv3 LSAs.";
                            }
    
                            leaf hold-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              default "1000";
                              description
                                "Hold interval for updating OSPFv3 LSAs.";
                            }
                          }  // case interval
                        }  // choice timer-type
                      }  // container lsa-originate
    
                      container lsa-org-supp-flap {
                        description
                          "Configure the delay timer for LSA generation.";
                        leaf interval {
                          type uint32 {
                            range "0..600";
                          }
                          units "s";
                          default "10";
                          description
                            "Specifies an interval for suppressing LSA advertising in case of route flapping. The value 0 indicates that LSA advertising is not suppressed.";
                        }
    
                        leaf threshold-count {
                          type uint32 {
                            range "3..100";
                          }
                          default "30";
                          description
                            "Value of the threshold of LSAs to be suppressed.";
                        }
                      }  // container lsa-org-supp-flap
    
                      container spf-schedule {
                        must
                          "((start-interval<=max-interval) and (hold-interval<=max-interval)) or (not(max-interval) and not(start-interval)and not(hold-interval))";
                        description
                          "Configure the interval for SPF calculation.";
                        choice schedule-type {
                          default
                            "intelligent-timer";
                          description
                            "Set the interval for SPF calculation.";
                          case timer {
                            description
                              "Specify an updating/originating interval for Type 3, Type 4 and Type 10 LSAs.";
                            leaf type {
                              type spf-timer-type;
                              mandatory true;
                              description
                                "SPF timer type.";
                            }
    
                            leaf delay-interval {
                              type uint32 {
                                range "0..65535";
                              }
                              units "s";
                              default "5";
                              description
                                "SPF delay between receiving a change to SPF calculation.";
                            }
    
                            leaf hold-interval-timer {
                              type uint32 {
                                range "0..65535";
                              }
                              units "s";
                              default "10";
                              description
                                "SPF hold time between consecutive SPF calculations.";
                            }
                          }  // case timer
    
                          case intelligent-timer {
                            description
                              "Specify an intelligent timer.";
                            leaf max-interval {
                              type uint32 {
                                range
                                  "1..120000";
                              }
                              units "ms";
                              must
                                "../start-interval<=../max-interval and ../hold-interval<=../max-interval";
                              default "5000";
                              description
                                "Maximum interval for OSPF SPF calculation set through an intelligent timer. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidths and device resources caused by frequent network changes.";
                            }
    
                            leaf start-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              units "ms";
                              must
                                "../start-interval<=../max-interval";
                              default "50";
                              description
                                "Initial interval for OSPF SPF calculation set through an intelligent timer. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidth and router resources caused by frequent network changes.";
                            }
    
                            leaf hold-interval {
                              type uint32 {
                                range "1..60000";
                              }
                              units "ms";
                              must
                                "../hold-interval<=../max-interval";
                              default "200";
                              description
                                "Hold interval for OSPF SPF calculation set through an intelligent timer. By adjusting the interval for calculating SPF, you can prevent the occupation of too many bandwidth and router resources caused by frequent network changes.";
                            }
                          }  // case intelligent-timer
    
                          case millisecond {
                            description
                              "Specify an interval.";
                            leaf millisecond {
                              type uint32 {
                                range "1..10000";
                              }
                              units "ms";
                              description
                                "Interval for OSPF SPF calculation. By adjusting the interval for SPF calculation, you can prevent the occupation of too many bandwidths and device resources caused by frequent network changes.";
                            }
                          }  // case millisecond
                        }  // choice schedule-type
                      }  // container spf-schedule
                    }  // container timer
    
                    container bfd {
                      description
                        "Configure BFD in a OSPFv3 process.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable BFD in an OSPFv3 process.";
                      }
    
                      leaf min-rx {
                        type uint32 {
                          range "3..20000";
                        }
                        units "ms";
                        description
                          "Minimum interval for receiving BFD packets from the peer end. The value range and default value are controlled by the PAF.";
                      }
    
                      leaf min-tx {
                        type uint32 {
                          range "3..20000";
                        }
                        units "ms";
                        description
                          "Minimum interval for sending BFD packets to the peer end. The value range and default value are controlled by the PAF.";
                      }
    
                      leaf detect-multiplier {
                        type uint32 {
                          range "3..50";
                        }
                        default "3";
                        description
                          "Local detection multiplier.";
                      }
    
                      leaf incr-cost {
                        type uint32 {
                          range "1..65535";
                        }
                        description
                          "BFD sync cost.";
                      }
    
                      leaf frr-binding {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable bind FRR with BFD.";
                      }
                    }  // container bfd
    
                    container stub-router {
                      description
                        "Configure stub router is used to configure the router as stub router.";
                      leaf flag {
                        type stub-router-flag;
                        default "no-config";
                        description
                          "Stub router. The router configured with the stub router command notifies other OSPF routers of not using the stub router to forward data by increasing the metric greater than 65535 of the links in the LSA that is generated by the router.";
                      }
    
                      leaf interval {
                        when
                          "../flag='stub-on-boot'";
                        type uint32 {
                          range "5..65535";
                        }
                        default "500";
                        description
                          "Interval for remaining as the stub router during the active/standby switchover of a router.";
                      }
    
                      leaf include-stub {
                        when
                          "../flag!='no-config'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable maximum cost for router lsa stub link.";
                      }
    
                      leaf external-lsa {
                        when
                          "../flag!='no-config'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable maximum cost for external lsa.";
                      }
    
                      leaf external-cost {
                        when
                          "../external-lsa='true'";
                        type uint32 {
                          range "1..16777215";
                        }
                        default "16711680";
                        description
                          "Advertise external LSAs with configured/default overriding metric.";
                      }
    
                      leaf summary-lsa {
                        when
                          "../flag!='no-config'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable maximum cost for summary lsa.";
                      }
    
                      leaf summary-cost {
                        when
                          "../summary-lsa='true'";
                        type uint32 {
                          range "1..16777215";
                        }
                        default "16711680";
                        description
                          "Advertise summary LSAs with configured/default overriding metric.";
                      }
                    }  // container stub-router
    
                    container bgp-ls {
                      description
                        "Configure BGP LS.";
                      leaf enable {
                        type boolean;
                        must
                          "../enable='false' or ../../../../../ni:name='_public_'";
                        default "false";
                        description
                          "Enable/disable BGP LS.";
                      }
    
                      leaf identifier {
                        when "../enable='true'";
                        type uint32 {
                          range "2..65535";
                        }
                        description
                          "TOPO identifier.";
                      }
                    }  // container bgp-ls
    
                    container import-limit {
                      presence
                        "Enable import-limit";
                      description
                        "Configure limits the maximum number of routes to be imported.";
                      leaf max-number {
                        type uint32 {
                          range "1..4294967295";
                        }
                        mandatory true;
                        description
                          "Maximum number of external routes that can be imported.";
                      }
    
                      leaf threshold-upper {
                        type uint32 {
                          range "1..100";
                        }
                        must
                          "../threshold-upper>=../threshold-lower";
                        default "80";
                        description
                          "Upper threshold of the maximum number of routes that can be imported.";
                      }
    
                      leaf threshold-lower {
                        type uint32 {
                          range "1..100";
                        }
                        must
                          "../threshold-upper>=../threshold-lower";
                        default "70";
                        description
                          "Lower threshold of the maximum number of routes that can be imported.";
                      }
                    }  // container import-limit
    
                    container spf-control {
                      description
                        "Configure SPF calculation control.";
                      leaf max-load-balancing {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..128";
                        }
                        description
                          "Maximum number of the equal cost routes of the destination address in the routing table. The range and default are based on PAF.";
                      }
                    }  // container spf-control
    
                    container default-para {
                      description
                        "Configure multiple topologies in a process.";
                      leaf cost {
                        type uint32 {
                          range "0..16777214";
                        }
                        default "1";
                        description
                          "Default metric of the external routes imported by OSPFv3.";
                      }
    
                      leaf tag {
                        type uint32 {
                          range "0..4294967295";
                        }
                        default "1";
                        description
                          "Tag of an external route.";
                      }
    
                      leaf type {
                        type external-route-type;
                        default "type2";
                        description
                          "Type of an external route.";
                      }
                    }  // container default-para
    
                    container asbr-summary-prefixs {
                      description
                        "List of aggregate addresses for OSPF (only for ASBR).";
                      list asbr-summary-prefix {
                        key "prefix network-mask";
                        description
                          "Configure aggregate addresses for OSPF (only for ASBR).";
                        leaf prefix {
                          type inet:ipv6-address-no-zone;
                          description
                            "IP address.";
                        }
    
                        leaf network-mask {
                          type uint32 {
                            range "1..128";
                          }
                          description
                            "IP address mask.";
                        }
    
                        leaf cost {
                          type uint32 {
                            range "1..16777214";
                          }
                          description
                            "Specifies the cost of the aggregated route. By default, the maximal cost in that of all the routes which are aggregated serves as the cost of the aggregated route.";
                        }
    
                        leaf tag {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Specifies that the tag is mainly used to control advertisement of routes through the routing policy.";
                        }
    
                        leaf distribute-delay {
                          type uint32 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Distribute delay interval.";
                        }
    
                        leaf advertise {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable the aggregated route is not advertised.";
                        }
                      }  // list asbr-summary-prefix
                    }  // container asbr-summary-prefixs
    
                    container default-route {
                      presence
                        "Enable default-route-advertise.";
                      description
                        "Configure default routes to the OSPFv3 routing area.";
                      leaf cost {
                        type uint32 {
                          range "0..16777214";
                        }
                        description
                          "Metric of an ASE LSA.";
                      }
    
                      leaf tag {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Route tag for default imported routes.";
                      }
    
                      leaf type {
                        type external-route-type;
                        description
                          "Metric type of an ASE LSA for the default routes.";
                      }
    
                      leaf distribute-delay {
                        type uint32 {
                          range "1..65535";
                        }
                        description
                          "Distribute delay timer used for the local router to calculate the default routes advertised by other routers.";
                      }
    
                      choice mode {
                        description
                          "Mode for default route.";
                        case permit-calculate-other {
                          description
                            "Set permit calculate other.";
                          leaf permit-calculate-other {
                            type empty;
                            description
                              "To generate and advertise an ASE LSA that describes the default route only when there are valid default routes of other protocols in the routing table of the host. The router configured with permit calculate other still calculates the default routes of other routers.";
                          }
                        }  // case permit-calculate-other
    
                        case always {
                          description
                            "Set always.";
                          leaf always {
                            type empty;
                            description
                              "The router configured with the always parameter does not calculate the default routes of other routers.";
                          }
                        }  // case always
                      }  // choice mode
    
                      choice policy-type {
                        description
                          "Mode of the policy used for default route.";
                        case route-policy-name {
                          description
                            "Set a route policy name.";
                          leaf route-policy-name {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Name of a routing policy. Through the routing policy, the device matches the default routing entry generated by the device that does not run OSPF in the routing table, and advertises the default route according to the parameters set through the routing policy.";
                          }
                        }  // case route-policy-name
    
                        case route-filter-name {
                          description
                            "Set a route filter name.";
                          leaf route-filter-name {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Name of a routing Filter.";
                          }
                        }  // case route-filter-name
                      }  // choice policy-type
                    }  // container default-route
    
                    container route-preferences {
                      description
                        "List of preference of an OSPF route.";
                      list route-preference {
                        ext:generated-by "system" {
                          ext:filter "route-type='default' or route-type='ase'";
                        }
                        key "route-type";
                        max-elements 2;
                        description
                          "Configure preference of an OSPF route.";
                        leaf route-type {
                          type ospf-route-type;
                          description
                            "Router type.";
                        }
    
                        leaf preference {
                          ext:dynamic-default {
                            ext:default-value "10" {
                              when "../route-type = 'default'";
                              description "The default value is 10 when route type is default.";
                            }
                            ext:default-value "150" {
                              when "../route-type = 'ase'";
                              description "The default value is 150 when route type is ase.";
                            }
                          }
                          type uint32 {
                            range "1..255";
                          }
                          description
                            "Preference of an OSPF route. The default of intra and inter area is 10.And The default of external is 150.";
                        }
    
                        choice policy-type {
                          description
                            "Type of a filtering rule.";
                          case route-policy-name {
                            description
                              "Name of a routing policy.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Name of a routing policy.";
                            }
                          }  // case route-policy-name
    
                          case route-filter-name {
                            description
                              "Name of a routing Filter.";
                            leaf route-filter-name {
                              type leafref {
                                path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                              }
                              description
                                "Name of a routing Filter.";
                            }
                          }  // case route-filter-name
                        }  // choice policy-type
                      }  // list route-preference
                    }  // container route-preferences
    
                    container nexthop-weights {
                      description
                        "List of preference of an equal cost route.";
                      list nexthop-weight {
                        key "ip-address if-name";
                        description
                          "Configure preference of an equal cost route.";
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "The Router ID of the next hop.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ip:ipv6";
                          description
                            "Next Hop Interface Name. Only Ethernet, NULL and Pos are used for nexthop.";
                        }
    
                        leaf weight {
                          type uint32 {
                            range "1..254";
                          }
                          mandatory true;
                          description
                            "Weight of the next hop. After OSPFv3 calculates the equal cost routes, the next hop is chosen from these equal-cost routes based on the value of weight. The smaller the value is, the higher the preference is. By default, the weight is 255. This indicates that load balancing is carried out among equal cost routes and packets are forwarded at the same time without the preference being set.";
                        }
                      }  // list nexthop-weight
                    }  // container nexthop-weights
    
                    container prefix-prioritys {
                      description
                        "List of priority of OSPF route.";
                      list prefix-priority {
                        key "priority";
                        description
                          "Configure priority of OSPF route.";
                        leaf priority {
                          type prefix-priority;
                          description
                            "Convergence priority of OSPF routes.";
                        }
    
                        leaf ip-prefix {
                          type leafref {
                            path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                          }
                          mandatory true;
                          description
                            "IPv6 Prefix List Name in String.";
                        }
                      }  // list prefix-priority
                    }  // container prefix-prioritys
    
                    container authentication {
                      description
                        "Configure authentication.";
                      leaf mode {
                        type authen-mode;
                        default "none";
                        description
                          "Set authentication type.";
                      }
    
                      leaf key-id {
                        when
                          "../mode='hmac-sha256' or ../mode='hmac-sm3'";
                        type uint32 {
                          range "1..65535";
                        }
                        mandatory true;
                        description
                          "Authentication identifier.";
                      }
    
                      leaf text {
                        when
                          "../mode='hmac-sha256' or ../mode='hmac-sm3'";
                        type pub-type:password-extend;
                        mandatory true;
                        description
                          "Encrypted password.";
                      }
    
                      leaf key-chain-name {
                        ext:case-sensitivity "lower-only";
                        when
                          "../mode='keychain'";
                        type string {
                          length "1..47";
                          pattern '[^A-Z]+';
                        }
                        mandatory true;
                        description
                          "Keychain name.";
                      }
                    }  // container authentication
    
                    container helper-role {
                      presence
                        "Enable OSPFv3 GR Helper.";
                      description
                        "Configure OSPFv3 GR Helper.";
                      leaf planned-only {
                        type empty;
                        description
                          "To support only planned GR on routers.";
                      }
    
                      leaf ignore-external-lsa {
                        type empty;
                        description
                          "Ignore external lsa check (Type5 and Type7 LSAs).";
                      }
    
                      leaf period {
                        type uint32 {
                          range "1..1800";
                        }
                        default "1800";
                        description
                          "Maximum grace period.";
                      }
    
                      choice filter-type {
                        description
                          "Basic ACl name or ACL number or IP prefix List.";
                        case acl-name-or-num {
                          description
                            "Specify the basic ACL number or ACL name for filtering peer.";
                          leaf acl-name-or-num {
                            type leafref {
                              path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                            }
                            must
                              "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                            description
                              "Specify the basic ACL number or ACL name for filtering peer.";
                          }
                        }  // case acl-name-or-num
    
                        case ip-prefix-name {
                          description
                            "Specify the IP prefix name for filtering peers.";
                          leaf ip-prefix-name {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                            }
                            description
                              "Specify the IP prefix name for filtering peers.";
                          }
                        }  // case ip-prefix-name
                      }  // choice filter-type
                    }  // container helper-role
    
                    container filter-import {
                      presence
                        "filter policy import";
                      description
                        "Configure the filter policy import command, you can set the rules for filtering intra area, inter area, and AS external routes of an OSPF process.";
                      choice policy-type {
                        mandatory true;
                        description
                          "Type of a filtering rule.";
                        case basic-acl6 {
                          description
                            "Apply basic ACL6 name or ACL6 number.";
                          leaf name-or-num {
                            type leafref {
                              path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                            }
                            must
                              "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                            description
                              "Apply basic ACL6 name or ACL6 number.";
                          }
                        }  // case basic-acl6
    
                        case ip-prefix6 {
                          description
                            "Set the name of an IP prefix list.";
                          leaf ip-prefix6 {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                            }
                            description
                              "Set the name of an IP prefix list.";
                          }
                        }  // case ip-prefix6
    
                        case route-policy {
                          description
                            "Set a route policy name.";
                          leaf route-policy {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Set a route policy name.";
                          }
                        }  // case route-policy
    
                        case route-filter {
                          description
                            "Set a route filter name.";
                          leaf route-filter {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Set a route filter name.";
                          }
                        }  // case route-filter
                      }  // choice policy-type
                    }  // container filter-import
    
                    container filter-exports {
                      description
                        "List of the filter policy export command. You can set the rules for filtering the routes imported through the import route (OSPF) command when the routes are advertised in type5 LSAs to the OSPF AS.";
                      list filter-export {
                        key "protocol protocol-id";
                        description
                          "Configure the filter policy export command. You can set the rules for filtering the routes imported through the import route (OSPF) command when the routes are advertised in type5 LSAs to the OSPF AS.";
                        leaf protocol {
                          type filter-rt-protocol;
                          description
                            "Protocol that advertises routes.";
                        }
    
                        leaf protocol-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "../protocol-id=1 or ../protocol='ospfv3' or ../protocol='isis' or ../protocol='ripng'";
                          description
                            "Process ID when the advertised protocol is RIPng, ISIS, or OSPFv3.";
                        }
    
                        choice policy-type {
                          mandatory true;
                          description
                            "Type of a filtering rule.";
                          case basic-acl6 {
                            description
                              "Apply basic ACL6 name or ACL6 number.";
                            leaf name-or-num {
                              type leafref {
                                path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                              }
                              must
                                "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                              description
                                "Apply basic ACL6 name or ACL6 number.";
                            }
                          }  // case basic-acl6
    
                          case ip-prefix6 {
                            description
                              "Set the name of an IP prefix list.";
                            leaf ip-prefix6 {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                              }
                              description
                                "Set the name of an IP prefix list.";
                            }
                          }  // case ip-prefix6
                        }  // choice policy-type
                      }  // list filter-export
                    }  // container filter-exports
    
                    container import-routes {
                      description
                        "List of import the routes learned from other routing protocols.";
                      list import-route {
                        key "protocol process-id";
                        description
                          "Configure import the routes learned from other routing protocols.";
                        leaf protocol {
                          type import-rt-protocol;
                          description
                            "Routing protocol whose routes are imported.";
                        }
    
                        leaf process-id {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          must
                            "(../process-id=0 and (../protocol='direct' or ../protocol='static' or ../protocol='bgp' or ../protocol='unr' or ../protocol='opr')) or (../process-id>0 and (../protocol='ospfv3' or ../protocol='isis' or ../protocol='ripng'))";
                          description
                            "Process ID of the routing protocol whose routes are imported. It needs to be set only when the protocol is RIPng, OSPFv3, or ISIS.";
                        }
    
                        leaf tag {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Route tag of an external LSA.";
                        }
    
                        leaf type {
                          type external-route-type;
                          description
                            "Metric type of an external LSA.";
                        }
    
                        leaf permit-ibgp {
                          type boolean;
                          must
                            "../permit-ibgp='false' or (../permit-ibgp='true' and ../protocol='bgp')";
                          default "false";
                          description
                            "Enable/disable to import IBGP routes.";
                        }
    
                        choice cost {
                          description
                            "Route cost.";
                          case inherit-cost {
                            description
                              "Import the routes with the original cost.";
                            leaf inherit-cost {
                              type empty;
                              description
                                "Import the routes with the original cost.";
                            }
                          }  // case inherit-cost
    
                          case cost-value {
                            description
                              "Route cost.";
                            leaf cost-value {
                              type uint32 {
                                range
                                  "0..16777214";
                              }
                              description
                                "Route cost.";
                            }
                          }  // case cost-value
                        }  // choice cost
    
                        choice policy-type {
                          description
                            "Type of a filtering rule.";
                          case route-policy-name {
                            description
                              "Name of a routing policy.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Name of a routing policy.";
                            }
                          }  // case route-policy-name
    
                          case route-filter-name {
                            description
                              "Name of a routing filter.";
                            leaf route-filter-name {
                              type leafref {
                                path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                              }
                              description
                                "Name of a routing Filter.";
                            }
                          }  // case route-filter-name
                        }  // choice policy-type
                      }  // list import-route
                    }  // container import-routes
    
                    container frr {
                      description
                        "Configure OSPFv3 FRR.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable FRR for this particular process.";
                      }
    
                      leaf lfa-enable {
                        type boolean;
                        must
                          "../lfa-enable='false' or ../enable='true'";
                        default "false";
                        description
                          "Enable/disable loop free alternate.";
                      }
    
                      container tiebreaker {
                        when
                          "../lfa-enable='true'";
                        description
                          "Configure tiebreaker for multiple backups.";
                        leaf node-protect {
                          type uint8 {
                            range "1..255";
                          }
                          default "40";
                          description
                            "Set the value of node protect preference.";
                        }
    
                        leaf lowest-cost {
                          type uint8 {
                            range "1..255";
                          }
                          default "20";
                          description
                            "Set the value of lowcost preference.";
                        }
                      }  // container tiebreaker
    
                      container route-policy {
                        when "../enable='true'";
                        description
                          "Configure FRR route policy.";
                        choice policy-type {
                          description
                            "Type of a filtering rule.";
                          case route-policy-name {
                            description
                              "Name of a routing policy.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Name of a routing policy.";
                            }
                          }  // case route-policy-name
    
                          case route-filter-name {
                            description
                              "Name of a routing filter.";
                            leaf route-filter-name {
                              type leafref {
                                path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                              }
                              description
                                "Name of a routing filter.";
                            }
                          }  // case route-filter-name
                        }  // choice policy-type
                      }  // container route-policy
                    }  // container frr
    
                    container silent-interfaces {
                      when
                        "../silent-all-interface='false'";
                      description
                        "List of interface. To prevent the OSPF routing information from being received by routers in a network segment and forbid the local router to receive the routing update information that is advertised by other routers in the network segment, you can use the silent interface command to suppress the interface to receive or send the OSPF packets.";
                      list silent-interface {
                        key "if-name";
                        description
                          "Configure interface. To prevent the OSPF routing information from being received by routers in a network segment and forbid the local router to receive the routing update information that is advertised by other routers in the network segment, you can use the silent interface command to suppress the interface to receive or send the OSPF packets.";
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ip:ipv6";
                          description
                            "Interface name.";
                        }
                      }  // list silent-interface
                    }  // container silent-interfaces
    
                    container undo-silent-interfaces {
                      when
                        "../silent-all-interface='true'";
                      description
                        "List of interface. Enables sending and receiving packet on this interface when true. This information is useful when sending and receiving packet is suppressed on all interface on process level and user want it to be enabled on certain interface.";
                      list undo-silent-interface {
                        key "if-name";
                        description
                          "Configure interface. Enables sending and receiving packet on this interface when true. This information is useful when sending and receiving packet is suppressed on all interface on process level and user want it to be enabled on certain interface.";
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ip:ipv6";
                          description
                            "Interface name.";
                        }
                      }  // list undo-silent-interface
                    }  // container undo-silent-interfaces
    
                    container host-name {
                      description
                        "Configure OSPFv3 host name.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable host name.";
                      }
    
                      leaf name {
                        when
                          "(../enable='true')";
                        type string {
                          length "1..255";
                        }
                        description "Host name.";
                      }
                    }  // container host-name
    
                    container cost-bindings {
                      description
                        "List of cost-binding. Indicate cost of routing from indicated router source ID binding interface.";
                      list cost-binding {
                        key "router-id if-name";
                        description
                          "Configure cost-binding. Indicate cost of routing from indicated router source ID binding interface.";
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Source router ID.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
                      }  // list cost-binding
                    }  // container cost-bindings
    
                    container dn-bit {
                      when
                        "../../../../ni:name!='_public_'";
                      description
                        "Configure VPN optionA feature will help PEs in inter AS exchange routes through OSPF. VPN optionA provide two ways to suppress DN bit so that so that inter AS can exchange routes through OSPF. First way dose not set DN bit while import routes from BGP, second way dose not check DN bit while learning the routes from neighbor router. In both the scenario PE will be able to learn route and propagate the route in the new VPN cloud.";
                      leaf set-ase {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable setting of DN bit in all ASE LSA, applicable in private network.";
                      }
    
                      leaf set-nssa {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable setting of DN bit in all NSSA LSA, applicable in private network.";
                      }
    
                      leaf set-summary {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable setting of DN bit in all summary LSA, applicable in private network.";
                      }
    
                      leaf check-ase {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable checking of DN bit in all ASE LSA, applicable in private network.";
                      }
    
                      leaf check-nssa {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable checking of DN bit in all NSSA LSA, applicable in private network.";
                      }
    
                      leaf check-summary {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable checking of DN bit in all summary LSA, applicable in private network.";
                      }
    
                      container summary-router-ids {
                        when
                          "../check-summary='false'";
                        description
                          "List of router ID for which checking for DN bit summary LSA is disabled, applicable in private network.";
                        list summary-router-id {
                          key "router-id";
                          description
                            "Configure router ID for which checking for DN bit summary LSA is disabled, applicable in private network.";
                          leaf router-id {
                            type inet:ipv4-address-no-zone;
                            description
                              "Router ID for which checking for DN bit summary LSA is disabled, applicable in private network.";
                          }
                        }  // list summary-router-id
                      }  // container summary-router-ids
                    }  // container dn-bit
    
                    container areas {
                      description
                        "List of OSPFv3 area.";
                      list area {
                        key "area-id";
                        description
                          "Configure OSPFv3 area.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf area-type {
                          type area-type;
                          default "normal";
                          description
                            "Area type.";
                        }
    
                        leaf description {
                          type string {
                            length "1..80";
                            pattern '([^?]*)';
                          }
                          description
                            "Description of an OSPFv3 area.";
                        }
    
                        container stub {
                          when
                            "../area-type='stub'";
                          description
                            "Configure stub area.";
                          leaf backbone-peer-ignore {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ignore backbone peer for Stub area.";
                          }
    
                          leaf no-summary {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable forbid an ABR to Send Summary LSAs to the Stub Area.";
                          }
    
                          leaf default-cost {
                            type int32 {
                              range
                                "0..16777214";
                            }
                            default "1";
                            description
                              "Cost of the default Type3 routes that are sent by an OSPF process to a stub area or an NSSA area. The value is an integer ranging from 1 to 16777214. This parameter takes effect only when it is configured on the ABR connected to a stub area or an NSSA area. The default is 1.";
                          }
                        }  // container stub
    
                        container nssa {
                          when
                            "../area-type='nssa'";
                          description
                            "Configure nssa area.";
                          leaf no-summary {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable forbid an ABR to Send Summary LSAs to the NSSA Area.";
                          }
    
                          leaf translator-always {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the router to act as translator always for NSSA Area.";
                          }
    
                          leaf default-route-advertise {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable originate Type 7 default into NSSA area.";
                          }
    
                          leaf backbone-peer-ignore {
                            when
                              "../default-route-advertise='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ignore backbone peer for Nssa area.";
                          }
    
                          leaf no-import-route {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable redistribute type 7 LSA into this area.";
                          }
    
                          leaf set-n-bit {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable setting of 'N' bit in the DD packet.";
                          }
    
                          leaf suppress-fa {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the forwarding address as 0 for all translated type 5 LSAs.";
                          }
    
                          leaf translator-interval {
                            type uint32 {
                              range "1..120";
                            }
                            default "40";
                            description
                              "Translator interval.";
                          }
    
                          leaf default-cost {
                            type int32 {
                              range
                                "0..16777214";
                            }
                            default "1";
                            description
                              "Cost of the default Type3 routes that are sent by an OSPF process to a stub area or an NSSA area. This parameter takes effect only when it is configured on the ABR connected to a stub area or an NSSA area.";
                          }
                        }  // container nssa
    
                        container authentication {
                          description
                            "Configure area authentication.";
                          leaf mode {
                            type authen-mode;
                            default "none";
                            description
                              "Set authentication type.";
                          }
    
                          leaf key-id {
                            when
                              "../mode='hmac-sha256' or ../mode='hmac-sm3'";
                            type uint32 {
                              range "1..65535";
                            }
                            mandatory true;
                            description
                              "Authentication identifier.";
                          }
    
                          leaf auth-text {
                            when
                              "../mode='hmac-sha256' or ../mode='hmac-sm3'";
                            type pub-type:password-extend;
                            mandatory true;
                            description
                              "Encrypted Password.";
                          }
    
                          leaf key-chain-name {
                            ext:case-sensitivity "lower-only";
                            when
                              "../mode='keychain'";
                            type string {
                              length "1..47";
                              pattern '[^A-Z]+';
                            }
                            mandatory true;
                            description
                              "Keychain name.";
                          }
                        }  // container authentication
    
                        container abr-summary-prefixs {
                          description
                            "List of abr-summary.";
                          list abr-summary-prefix {
                            key "prefix network-mask";
                            description
                              "Configure abr-summary.";
                            leaf prefix {
                              type inet:ipv6-address-no-zone;
                              description
                                "Specifies the IP address in dotted decimal notation.";
                            }
    
                            leaf network-mask {
                              type uint32 {
                                range "1..128";
                              }
                              description
                                "Specifies the mask of the IP address. The mask address is in dotted decimal notation.";
                            }
    
                            choice cost {
                              description
                                "Set the cost. By default, the maximal cost in that of all the routes which are aggregated serves as the cost of the aggregated route.";
                              case cost-value {
                                description
                                  "Specifies the cost of the aggregated route.";
                                leaf cost-value {
                                  type uint32 {
                                    range
                                      "0..16777214";
                                  }
                                  description
                                    "Specifies the cost of the aggregated route.";
                                }
                              }  // case cost-value
                            }  // choice cost
    
                            leaf hold-max-cost {
                              type uint32 {
                                range "10..1800";
                              }
                              description
                                "Hold max cost duration.";
                            }
    
                            leaf advertise {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the aggregated route is advertised.";
                            }
                          }  // list abr-summary-prefix
                        }  // container abr-summary-prefixs
    
                        container filters {
                          description
                            "List of an ABR to filter outgoing or incoming summary LSAs of the local area.";
                          list filter {
                            key "mode";
                            description
                              "Configure an ABR to filter outgoing or incoming summary LSAs of the local area.";
                            leaf mode {
                              type area-filter-mode;
                              description
                                "Using the filter export command, you can configure an ABR to filter outgoing summary LSAs of the local area. Using the filter import command, you can configure an ABR to filter incoming summary LSAs of the local area.";
                            }
    
                            choice policy-type {
                              mandatory true;
                              description
                                "Type of a filtering rule.";
                              case basic-acl {
                                description
                                  "Apply basic ACL Name or ACL Number.";
                                leaf name-or-num {
                                  type leafref {
                                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "Apply basic ACL Name or ACL Number.";
                                }
                              }  // case basic-acl
    
                              case ipv6-prefix {
                                description
                                  "Set the name of an IPv6 prefix list.";
                                leaf ipv6-prefix {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Set the name of an IPv6 prefix list.";
                                }
                              }  // case ipv6-prefix
    
                              case route-policy {
                                description
                                  "Set a route policy name.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Set a route policy name.";
                                }
                              }  // case route-policy
    
                              case route-filter {
                                description
                                  "Set a route filter name.";
                                leaf route-filter {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Set a route filter name.";
                                }
                              }  // case route-filter
                            }  // choice policy-type
                          }  // list filter
                        }  // container filters
    
                        container interfaces {
                          description
                            "List of the interface enabled with OSPFv3.";
                          list interface {
                            key "name instance-id";
                            description
                              "Configure the interface enabled with OSPFv3.";
                            leaf name {
                              type leafref {
                                path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                              }
                              must
                                "../../../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                              must
                                "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ip:ipv6";
                              description
                                "Interface name. OSPFv3 does not support the configuration of a NULL/LMP/MTUNNEL/RPR/STACKPORT/SIP/ATMBUNDLE/IMAGROUP/Remote-Ap/VBridge interface types.";
                            }
    
                            leaf instance-id {
                              type uint32 {
                                range "0..255";
                              }
                              description
                                "Interface instance ID.";
                            }
    
                            leaf network-type {
                              ext:dynamic-default;
                              type network-type;
                              description
                                "Network type of an OSPFv3 interface. By default, the network type of an interface is determined by the physical interface.
    In the same network segment, if only two routers run OSPFv3, you can change the network type of an interface to P2P.";
                            }
    
                            leaf transmit-delay {
                              type int32 {
                                range "1..800";
                              }
                              default "1";
                              description
                                "Delay for transmitting LSAs on an interface.";
                            }
    
                            leaf mtu-enable {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable MTU filled in a DD packet when the packet is sent. The default MTU in the DD packet is 0. Using the command, you can manually configure the interface to fill in the MTU field (actual MTU of the interface) when the interface sends DD packets.
    After a virtual connection is established through the virtual template or tunnel, different vendors may use different MTUs as default settings. To ensure consistency, the MTU is set to 0 by default when the interface sends DD packets. Thus, the ospf mtu-enable command usually does not need to be configured.
    OSPF does not support the preceding configuration on a null interface.";
                            }
    
                            leaf dr-priority {
                              type int32 {
                                range "0..255";
                              }
                              default "1";
                              description
                                "Priority of the interface that participates in the DR and BDR election. The greater the value is, the higher the priority is. The router whose priority is 0 cannot be elected as a DR or a BDR.";
                            }
    
                            leaf peer-hold-max-timer {
                              type uint32 {
                                range
                                  "100..1000000";
                              }
                              units "ms";
                              description
                                "Config peer hold max cost interval.";
                            }
    
                            leaf cost {
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "To set the cost of an interface.";
                            }
    
                            leaf link-cost {
                              type uint32 {
                                range "1..65535";
                              }
                              description
                                "Link cost to be incremented when link quality is low.";
                            }
    
                            container frr {
                              description
                                "Configure FRR.";
                              leaf frr-disable {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable not use this interface for FRR calculation.";
                              }
                            }  // container frr
    
                            container timer {
                              description
                                "Configure timer.";
                              leaf hello-interval {
                                ext:dynamic-default {
                                  ext:default-value "10" {
                                    when "../../network-type = 'p2p' or ../../network-type = 'broadcast'";
                                    description "The default value is 10 when network-type is p2p or broadcast.";
                                  }
                                  ext:default-value "30" {
                                    when "../../network-type = 'p2mp' or ../../network-type = 'nbma'";
                                    description "The default value is 30 when network-type is p2mp or nbma.";
                                  }
                                }
                                type int32 {
                                  range
                                    "1..65535";
                                }
                                units "s";
                                description
                                  "Interval for sending Hello packets on an interface.";
                              }
    
                              leaf hello-conser {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the compensation mechanism of controling the deadtimer to enable.";
                              }
    
                              leaf dead-interval {
                                ext:dynamic-default {
                                  ext:default-value "4*(../hello-interval)" {
                                    description "The default value of dead interval is 4 times that of hello interval.";
                                  }
                                }
                                type int32 {
                                  range
                                    "1..65535";
                                }
                                units "s";
                                must
                                  "(../hello-interval<../dead-interval) or (../hello-interval=65535 and ../dead-interval=65535)";
                                description
                                  "Dead interval of an OSPF neighbor.";
                              }
    
                              leaf wait-interval {
                                ext:dynamic-default {
                                  ext:default-value "../dead-interval" {
                                    description "The default value of wait interval is equal to dead interval.";
                                  }
                                }
                                type uint32 {
                                  range
                                    "1..65535";
                                }
                                description
                                  "Wait time.";
                              }
    
                              leaf poll-interval {
                                type int32 {
                                  range
                                    "1..65535";
                                }
                                default "120";
                                description
                                  "Poll interval for sending Hello packets. On the NBMA network, after the neighbor is invalid, the router sends Hello packets periodically according to the interval set through the ospf timer poll command. The poll interval should be at least four times of the interval for sending Hello packets.";
                              }
    
                              leaf retransmit-interval {
                                type int32 {
                                  range
                                    "1..3600";
                                }
                                default "5";
                                description
                                  "Interval for retransmitting LSAs on an interface.";
                              }
                            }  // container timer
    
                            container bfd {
                              description
                                "Configure BFD.";
                              leaf enable {
                                type boolean;
                                must
                                  "../enable='false' or ../block='false'";
                                default "false";
                                description
                                  "Enable/disable BFD.";
                              }
    
                              leaf block {
                                type boolean;
                                must
                                  "../block='false' or ../enable='false'";
                                default "false";
                                description
                                  "Enable/disable to prevent the dynamic establishment of a BFD session on an interface.";
                              }
    
                              leaf detect-multiplier {
                                type uint32 {
                                  range "3..50";
                                }
                                default "3";
                                description
                                  "Local detection multiplier.";
                              }
    
                              leaf min-tx {
                                type uint32 {
                                  range
                                    "3..20000";
                                }
                                units "ms";
                                description
                                  "Minimum interval for sending BFD packets to the peer end. The value range and default value are controlled by the PAF.";
                              }
    
                              leaf min-rx {
                                type uint32 {
                                  range
                                    "3..20000";
                                }
                                units "ms";
                                description
                                  "Minimum interval for receiving BFD packets from the peer end. The value range and default value are controlled by the PAF.";
                              }
    
                              leaf frr-binding {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable bind FRR with BFD.";
                              }
    
                              choice incr-cost {
                                description
                                  "Interface BFD sync cost.";
                                case incr-cost-block {
                                  description
                                    "Interface BFD sync cost block.";
                                  leaf incr-cost-block {
                                    type empty;
                                    description
                                      "Interface BFD sync cost block.";
                                  }
                                }  // case incr-cost-block
    
                                case incr-cost-value {
                                  description
                                    "Interface BFD sync cost.";
                                  leaf incr-cost-value {
                                    type uint32 {
                                      range
                                        "1..65535";
                                    }
                                    description
                                      "Interface BFD sync cost.";
                                  }
                                }  // case incr-cost-value
                              }  // choice incr-cost
    
                              leaf per-link-flag {
                                type boolean;
                                must
                                  "../one-arm-echo-flag=../per-link-flag and (../per-link-flag='false' or ../enable='true')";
                                default "false";
                                description
                                  "Enable/disable BFD session per link, support only VLANif interface.";
                              }
    
                              leaf one-arm-echo-flag {
                                type boolean;
                                must
                                  "../one-arm-echo-flag=../per-link-flag";
                                default "false";
                                description
                                  "Enable/disable echo detection mode, support only VLANif interface.";
                              }
                            }  // container bfd
    
                            container authentication {
                              description
                                "Configure interface authentication.";
                              leaf mode {
                                type authen-mode;
                                default "none";
                                description
                                  "Set authentication type.";
                              }
    
                              leaf key-id {
                                when
                                  "../mode='hmac-sha256' or ../mode='hmac-sm3'";
                                type uint32 {
                                  range
                                    "1..65535";
                                }
                                mandatory true;
                                description
                                  "Authentication identifier.";
                              }
    
                              leaf auth-text {
                                when
                                  "../mode='hmac-sha256' or ../mode='hmac-sm3'";
                                type pub-type:password-extend;
                                mandatory true;
                                description
                                  "Encrypted Password.";
                              }
    
                              leaf key-chain-name {
                                ext:case-sensitivity "lower-only";
                                when
                                  "../mode='keychain'";
                                type string {
                                  length "1..47";
                                  pattern
                                    '[^A-Z]+';
                                }
                                mandatory true;
                                description
                                  "Keychain name.";
                              }
                            }  // container authentication
    
                            container suppress-flapping {
                              description
                                "Configure flapping suppression.";
                              container peer {
                                must
                                  "resume-interval>detect-interval";
                                description
                                  "Configure flapping suppression peer. Not support Loopback.";
                                leaf enable {
                                  type boolean;
                                  default "true";
                                  description
                                    "Enable/disable interface peer flapping suppress.";
                                }
    
                                leaf detect-interval {
                                  type uint32 {
                                    range
                                      "1..300";
                                  }
                                  default "60";
                                  description
                                    "Detecting interval.";
                                }
    
                                leaf threshold {
                                  type uint32 {
                                    range
                                      "1..1000";
                                  }
                                  default "10";
                                  description
                                    "Threshold.";
                                }
    
                                leaf resume-interval {
                                  type uint32 {
                                    range
                                      "2..1000";
                                  }
                                  default "120";
                                  description
                                    "Resume interval.";
                                }
    
                                leaf hold-down-interval {
                                  type uint32 {
                                    range
                                      "1..86400";
                                  }
                                  description
                                    "Hold down interval.";
                                }
    
                                leaf hold-max-cost {
                                  type boolean;
                                  default "true";
                                  description
                                    "Enable/disable hold max cost.";
                                }
                              }  // container peer
                            }  // container suppress-flapping
    
                            container peers {
                              description
                                "List of the IP address and DR priority of the neighbor router on the NBMA network.";
                              list peer {
                                key "nbr-router-id";
                                unique "nbr-link-local-addr";
                                description
                                  "Configure the Link Local address and DR eligibility of the neighbor router on the NBMA network.";
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Neighbor router ID.";
                                }
    
                                leaf nbr-link-local-addr {
                                  type inet:ipv6-address-no-zone;
                                  mandatory
                                    true;
                                  description
                                    "Link Local address of the neighbor router.
    Link Local Address should be in IPv6 format.
    Valid Link Local Address starts with FE80:";
                                }
    
                                leaf cost {
                                  type uint32 {
                                    range
                                      "1..65535";
                                  }
                                  description
                                    "Cost to reach P2MP non broadcast neighbor.";
                                }
    
                                leaf dr-eligible {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable DR Eligibility of the NBMA neighbor.";
                                }
    
                                leaf poll {
                                  type int32 {
                                    range
                                      "1..65535";
                                  }
                                  description
                                    "Poll interval for NBMA neighbor.";
                                }
                              }  // list peer
                            }  // container peers
    
                            container flush-source-trace {
                              description
                                "Configure OSPF flush source trace function.";
                              leaf block {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable OSPF flush source trace.";
                              }
                            }  // container flush-source-trace
    
                            container ipv6-prefixs {
                              config false;
                              description
                                "List of the IPv6 prefixes.";
                              list ipv6-prefix {
                                key "ipv6-address ipv6-mask-len";
                                description
                                  "Statistics of the IPv6 prefixes.";
                                leaf ipv6-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "IPv6 address.";
                                }
    
                                leaf ipv6-mask-len {
                                  type uint32;
                                  description
                                    "Mask length.";
                                }
                              }  // list ipv6-prefix
                            }  // container ipv6-prefixs
    
                            container attribute {
                              config false;
                              description
                                "Statistics of interface attributes.";
                              leaf prefix-len {
                                type uint32;
                                description
                                  "Prefix length.";
                              }
    
                              leaf link-protocol {
                                type interface-state;
                                description
                                  "OSPFv3 link protocol state.";
                              }
    
                              leaf mtu {
                                type uint32;
                                description
                                  "MTU of an interface.";
                              }
    
                              leaf link-local-addr {
                                type inet:ipv6-address-no-zone;
                                description
                                  "Link local address.";
                              }
    
                              leaf event {
                                type uint32;
                                description
                                  "Interface event.";
                              }
    
                              leaf lsa-count {
                                type uint32;
                                description
                                  "Interface Lsa Count.";
                              }
    
                              leaf lsa-checksum {
                                type uint32;
                                description
                                  "Interface Lsa Checksum.";
                              }
    
                              leaf effective-cost {
                                type uint32;
                                description
                                  "Valid cost value.";
                              }
    
                              leaf cost-type {
                                type string {
                                  length "1..40";
                                }
                                description
                                  "Cost type.";
                              }
    
                              leaf state {
                                type interface-state;
                                description
                                  "OSPFv3 interface state.";
                              }
    
                              leaf dr {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Designated router.";
                              }
    
                              leaf dr-link-local-addr {
                                type inet:ipv6-address-no-zone;
                                description
                                  "DR link local address.";
                              }
    
                              leaf bdr {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Backup designated router.";
                              }
    
                              leaf bdr-link-local-addr {
                                type inet:ipv6-address-no-zone;
                                description
                                  "BDR link local address.";
                              }
    
                              leaf hello-due-timer {
                                type string {
                                  length "1..8";
                                }
                                description
                                  "Hello due timer.";
                              }
    
                              leaf count {
                                type uint32;
                                description
                                  "Number of neighbors.";
                              }
    
                              leaf adjacent-count {
                                type uint32;
                                description
                                  "Number of adjacents.";
                              }
    
                              leaf bandwidth-high {
                                type uint32;
                                description
                                  "Higher order 32-bit of the interface bandwidth value.";
                              }
    
                              leaf bandwidth-low {
                                type uint32;
                                description
                                  "Lower order 32-bit of the interface bandwidth value.";
                              }
    
                              container bfd {
                                description
                                  "Statistics of bfd attributes.";
                                leaf enable {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable BFD in an OSPFv3 process.";
                                }
    
                                leaf frr-binding {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable bind FRR with BFD.";
                                }
    
                                leaf min-tx {
                                  type uint32 {
                                    range
                                      "3..20000";
                                  }
                                  units "ms";
                                  description
                                    "Minimum interval for sending BFD packets to the peer end. The value range and default value are controlled by the PAF.";
                                }
    
                                leaf min-rx {
                                  type uint32 {
                                    range
                                      "3..20000";
                                  }
                                  units "ms";
                                  description
                                    "Minimum interval for receiving BFD packets from the peer end. The value range and default value are controlled by the PAF.";
                                }
    
                                leaf detect-multiplier {
                                  type uint32 {
                                    range
                                      "3..50";
                                  }
                                  default "3";
                                  description
                                    "Local detection multiplier.";
                                }
                              }  // container bfd
    
                              leaf auth-flag {
                                type auth-type;
                                description
                                  "Authentication which can be configured using the ospf authentication-mode command.";
                              }
    
                              leaf auth-seq-high {
                                type uint32;
                                description
                                  "Higher order 32-bit of the sequence number of the sent packet.";
                              }
    
                              leaf auth-seq-low {
                                type uint32;
                                description
                                  "Lower order 32-bit of the sequence number of the sent packet.";
                              }
    
                              leaf sa-name-apply {
                                type string {
                                  length "1..15";
                                }
                                description
                                  "The name of iP security association applied.";
                              }
    
                              leaf sa-name {
                                type string {
                                  length "1..15";
                                }
                                description
                                  "The name of iP security association configured.";
                              }
    
                              leaf peer-flapping-suppress {
                                type peer-flapping-suppress-type;
                                description
                                  "OSPFv3 peer suppress-flapping status.";
                              }
    
                              leaf peer-flapping-count {
                                type uint32;
                                description
                                  "OSPFv3 peer suppress-flapping count.";
                              }
    
                              leaf peer-flapping-suppress-threshold {
                                type uint32;
                                description
                                  "OSPFv3 peer suppress-flapping threshold.";
                              }
    
                              leaf peer-flapping-suppress-time {
                                type yang:date-and-time;
                                description
                                  "OSPFv3 peer suppress-flapping start time.";
                              }
    
                              leaf peer-flapping-suppress-remain-interval {
                                type uint32;
                                description
                                  "OSPFv3 peer suppress-flapping remain interval.";
                              }
    
                              leaf link-quality-adjust-cost {
                                type string {
                                  length "1..15";
                                }
                                description
                                  "Whether bit-error-triggered interface cost adjustment is effective.";
                              }
    
                              leaf link-quality {
                                type string {
                                  length
                                    "1..255";
                                }
                                description
                                  "Link-quality.";
                              }
                            }  // container attribute
    
                            container request-queues {
                              config false;
                              description
                                "List of the OSPFv3 request message.";
                              list request-queue {
                                key "nbr-router-id nbr-ip-addr lsa-type link-state-id adv-router-id";
                                description
                                  "Statistics of the OSPFv3 request message.";
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf nbr-ip-addr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "IP address of the neighbor interface.";
                                }
    
                                leaf lsa-type {
                                  type lsa-type;
                                  description
                                    "LSA type.";
                                }
    
                                leaf link-state-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the link state.";
                                }
    
                                leaf adv-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Advertisement router ID.";
                                }
    
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the local router.";
                                }
    
                                leaf lsa-sequence {
                                  type pub-type:hex-binary;
                                  description
                                    "LSA sequence number.";
                                }
    
                                leaf lsa-age {
                                  type uint32;
                                  description
                                    "LSA aging time.";
                                }
    
                                leaf lsa-count {
                                  type uint32;
                                  description
                                    "LSA count.";
                                }
                              }  // list request-queue
                            }  // container request-queues
    
                            container retrans-queues {
                              config false;
                              description
                                "List of the OSPFv3 retrans message.";
                              list retrans-queue {
                                key "nbr-router-id nbr-ip-addr lsa-type link-state-id adv-router-id";
                                description
                                  "Statistics of the OSPFv3 retrans message.";
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf nbr-ip-addr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "IP address of the neighbor interface.";
                                }
    
                                leaf lsa-type {
                                  type lsa-type;
                                  description
                                    "LSA type.";
                                }
    
                                leaf link-state-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the link state.";
                                }
    
                                leaf adv-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Advertisement router ID.";
                                }
    
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the local router.";
                                }
    
                                leaf lsa-sequence {
                                  type pub-type:hex-binary;
                                  description
                                    "LSA sequence number.";
                                }
    
                                leaf lsa-age {
                                  type uint32;
                                  description
                                    "LSA aging time.";
                                }
    
                                leaf lsa-count {
                                  type uint32;
                                  description
                                    "LSA count.";
                                }
                              }  // list retrans-queue
                            }  // container retrans-queues
    
                            container bfd-statistics {
                              config false;
                              description
                                "List of the neighbors enabled with BFD.";
                              list bfd-statistic {
                                key "local-ipv6-addr remote-ipv6-addr nbr-router-id";
                                description
                                  "Statistics of the neighbors enabled with BFD.";
                                leaf local-ipv6-addr {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Local IPv6 address.";
                                }
    
                                leaf remote-ipv6-addr {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Remote IPv6 address.";
                                }
    
                                leaf nbr-router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of a neighbor router.";
                                }
    
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "ID of the local router.";
                                }
    
                                leaf bfd-state {
                                  type bfd-state;
                                  description
                                    "BFD status.";
                                }
                              }  // list bfd-statistic
                            }  // container bfd-statistics
    
                            container neighbors {
                              config false;
                              description
                                "List of interface OSPF neighbors.";
                              list neighbor {
                                key "router-id interface-address";
                                description
                                  "Statistics of neighbors for the interface.";
                                leaf router-id {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Router ID.";
                                }
    
                                leaf interface-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "IP address of the interface that connects to the neighbor.";
                                }
    
                                leaf host-name {
                                  ext:support-filter "true";
                                  type string {
                                    length
                                      "1..255";
                                  }
                                  description
                                    "Neighbor host name.";
                                }
    
                                leaf priority {
                                  type int32;
                                  description
                                    "Priority of a neighbor router.";
                                }
    
                                leaf state {
                                  type nbr-state;
                                  description
                                    "Neighbor status.";
                                }
    
                                leaf dead-due-timer {
                                  type uint32;
                                  description
                                    "Dead due timer.";
                                }
    
                                leaf dr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Designated router.";
                                }
    
                                leaf bdr {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Backup designated router.";
                                }
    
                                leaf up-time {
                                  type string {
                                    length
                                      "1..16";
                                  }
                                  description
                                    "Time when a neighbor goes up.";
                                }
    
                                leaf up-time-stamp {
                                  type yang:date-and-time;
                                  description
                                    "Neighbor up time stamp.";
                                }
    
                                leaf link-state-request-list-number {
                                  type uint32;
                                  description
                                    "Number of LSAs in the request list of the neighbor.";
                                }
    
                                leaf link-state-retransmission-list-number {
                                  type uint32;
                                  description
                                    "Number of LSAs in the retransmission list of the neighbor.";
                                }
    
                                leaf event {
                                  type uint32;
                                  description
                                    "Event of the neighbor.";
                                }
    
                                leaf if-id {
                                  type int32;
                                  description
                                    "Interface ID of the neighbor.";
                                }
    
                                leaf received-higher-sequence-number {
                                  type uint32;
                                  description
                                    "Received higher order sequence number.";
                                }
    
                                leaf received-low-sequence-number {
                                  type uint32;
                                  description
                                    "Received lower order sequence number.";
                                }
    
                                leaf adj-sid {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Adjacency SID.";
                                }
    
                                leaf adj-weight {
                                  type uint32;
                                  description
                                    "Adjacency weight.";
                                }
    
                                leaf adj-flags {
                                  type string {
                                    length
                                      "1..20";
                                  }
                                  description
                                    "Adjacency flags.";
                                }
                              }  // list neighbor
                            }  // container neighbors
    
                            container error-data {
                              config false;
                              description
                                "Statistics of interface error data.";
                              leaf same-ip-pkt {
                                type uint32;
                                description
                                  "Same IP packet count.";
                              }
    
                              leaf bad-pkt {
                                type uint32;
                                description
                                  "Bad packet count.";
                              }
    
                              leaf bad-version {
                                type uint32;
                                description
                                  "Bad version count.";
                              }
    
                              leaf bad-chksum-pkt {
                                type uint32;
                                description
                                  "Bad checksum count.";
                              }
    
                              leaf bad-area-pkt {
                                type uint32;
                                description
                                  "Bad area ID count.";
                              }
    
                              leaf bad-virt-link {
                                type uint32;
                                description
                                  "Bad virtual link count.";
                              }
    
                              leaf auth-type-fail {
                                type uint32;
                                description
                                  "Authentication failure count.";
                              }
    
                              leaf auth-key-fail {
                                type uint32;
                                description
                                  "Authentication keyId mismatch count.";
                              }
    
                              leaf short-pkt-cnt {
                                type uint32;
                                description
                                  "Packet too small count.";
                              }
    
                              leaf tx-err-cnt {
                                type uint32;
                                description
                                  "Transmit error count.";
                              }
    
                              leaf if-down-cnt {
                                type uint32;
                                description
                                  "Interface down count.";
                              }
    
                              leaf no-nbr {
                                type uint32;
                                description
                                  "Unknown neighbor count.";
                              }
    
                              leaf mis-hello-intl {
                                type uint32;
                                description
                                  "Hello timer mismatch count.";
                              }
    
                              leaf mis-dead-intl {
                                type uint32;
                                description
                                  "Dead timer mismatch count.";
                              }
    
                              leaf mis-ext-option {
                                type uint32;
                                description
                                  "Extern option mismatch count.";
                              }
    
                              leaf vlink-nbr-mis {
                                type uint32;
                                description
                                  "Virtual neighbor unknown count.";
                              }
    
                              leaf dd-mtu-mis {
                                type uint32;
                                description
                                  "MTU option mismatch count.";
                              }
    
                              leaf dd-opt-mis-cnt {
                                type uint32;
                                description
                                  "Extern option mismatch count.";
                              }
    
                              leaf dd-router-id {
                                type uint32;
                                description
                                  "DD router ID confusion count.";
                              }
    
                              leaf dd-unknown-lsa {
                                type uint32;
                                description
                                  "DD packet unknown LSA type count.";
                              }
    
                              leaf ack-bad-cnt {
                                type uint32;
                                description
                                  "Bad ACK count.";
                              }
    
                              leaf gr-invalid-lsa {
                                type uint32;
                                description
                                  "Invalid LSA count.";
                              }
    
                              leaf gr-invalid-pol {
                                type uint32;
                                description
                                  "Policy failed LSA count.";
                              }
    
                              leaf gr-invalid-prd {
                                type uint32;
                                description
                                  "Wrong period LSA count.";
                              }
    
                              leaf hello-dr-mis {
                                type uint32;
                                description
                                  "The DR or BDR in receiving hello packet is not same with the DR or BDR.";
                              }
    
                              leaf gen-ttl-err {
                                type uint32;
                                description
                                  "The TTL of the packet is error.";
                              }
    
                              leaf over-max-buf-len {
                                type uint32;
                                description
                                  "Number of packet that length is more than maximum buffer length.";
                              }
    
                              leaf long-pkt {
                                type uint32;
                                description
                                  "The packet length is greater than the IP packet length.";
                              }
    
                              leaf bad-link-local-addr-pkt {
                                type uint32;
                                description
                                  "Bad linklocal address packet count.";
                              }
    
                              leaf dest-ip-err-pkt {
                                type uint32;
                                description
                                  "Number of bad destination IP address packet.";
                              }
    
                              leaf pass-intf-pkt {
                                type uint32;
                                description
                                  "Number of packet that received from silent interface.";
                              }
    
                              leaf hello-nbr-limit {
                                type uint32;
                                description
                                  "Number of hello packet that discard because the number of neighbour reached the limit.";
                              }
    
                              leaf hello-hold-down {
                                type uint32;
                                description
                                  "Number of hello packet that discard because the neighbour is in hold down state.";
                              }
    
                              leaf hello-memory-over {
                                type uint32;
                                description
                                  "Number of hello packet that discard because memory is overload.";
                              }
    
                              leaf hello-cpu-over {
                                type uint32;
                                description
                                  "Number of hello packet that discard because cpu is overload.";
                              }
    
                              leaf ack-duplicate-cnt {
                                type uint32;
                                description
                                  "Duplicate ACK count.";
                              }
    
                              leaf ack-unknown-lsa {
                                type uint32;
                                description
                                  "LSAck packet unknown LSA type count.";
                              }
    
                              leaf req-empty-cnt {
                                type uint32;
                                description
                                  "Empty request count.";
                              }
    
                              leaf req-bad-cnt {
                                type uint32;
                                description
                                  "Bad request count.";
                              }
    
                              leaf upd-lsa-chksum {
                                type uint32;
                                description
                                  "Bad LSA checksum count.";
                              }
    
                              leaf upd-unknow-lsa {
                                type uint32;
                                description
                                  "LSUpdate packet unknown LSA type count.";
                              }
    
                              leaf upd-self-newer {
                                type uint32;
                                description
                                  "Newer self-generate LSA count.";
                              }
    
                              leaf upd-less-recent {
                                type uint32;
                                description
                                  "Received less recent LSA count.";
                              }
    
                              leaf bad-instance-id {
                                type uint32;
                                description
                                  "Bad instance ID count.";
                              }
    
                              leaf same-router-id-pkt {
                                type uint32;
                                description
                                  "Router ID confusion count.";
                              }
    
                              leaf dd-nbr-low {
                                type uint32;
                                description
                                  "Neighbour state low for DD count.";
                              }
    
                              leaf ack-nbr-low {
                                type uint32;
                                description
                                  "Neighbour state low for LS ACK count.";
                              }
    
                              leaf req-nbr-low {
                                type uint32;
                                description
                                  "Neighbour state low for LS REQ count.";
                              }
    
                              leaf upd-nbr-low {
                                type uint32;
                                description
                                  "Neighbour state low for LS UPD count.";
                              }
    
                              leaf upd-min-lsa-arr {
                                type uint32;
                                description
                                  "Received LSA within LSA arrival interval.";
                              }
    
                              leaf auth-seq-fail {
                                type uint32;
                                description
                                  "Authentication sequence mismatch count.";
                              }
                            }  // container error-data
                          }  // list interface
                        }  // container interfaces
    
                        container attribute {
                          config false;
                          description
                            "Statistics of OSPF area.";
                          leaf intf-cnt {
                            type uint32;
                            description
                              "Number of interfaces.";
                          }
    
                          leaf unknown-lsa-cnt {
                            type uint32;
                            description
                              "Number of unknown LSA.";
                          }
    
                          leaf status {
                            type area-status;
                            description
                              "Area status.";
                          }
    
                          leaf lsa-cnt {
                            type uint32;
                            description
                              "Number of LSA.";
                          }
    
                          leaf lsa-checksum {
                            type pub-type:hex-binary;
                            description
                              "LSA checksum.";
                          }
    
                          leaf bdr-cnt {
                            type uint32;
                            description
                              "Area BDR router count.";
                          }
    
                          leaf as-bdr-cnt {
                            type uint32;
                            description
                              "Area AS BDR router count.";
                          }
    
                          leaf router-id-state {
                            type router-id-state;
                            description
                              "Router ID conflict state.";
                          }
    
                          leaf next-spf-trig {
                            type uint32;
                            description
                              "The next spf trigger timer when intelligent timer is configured. If spf timer delay hold is configured then this field is set to zero.";
                          }
    
                          leaf import-limit-status {
                            type import-limit-status;
                            description
                              "Limit status of imported routes.";
                          }
    
                          leaf nssa-lsa-cnt {
                            type uint32;
                            description
                              "Number of NSSA LSAs that are generated locally.";
                          }
    
                          leaf authen-mode {
                            type authen-mode;
                            description
                              "Authentication mode.";
                          }
                        }  // container attribute
                      }  // list area
                    }  // container areas
    
                    container attribute {
                      config false;
                      description
                        "Statistics of OSPF site.";
                      leaf effective-router-id {
                        type inet:ipv4-address-no-zone;
                        description
                          "Effective router ID.";
                      }
    
                      leaf spf-count {
                        type uint32;
                        description "SPF count.";
                      }
    
                      leaf area-count {
                        type uint32;
                        description
                          "Number of areas.";
                      }
    
                      leaf exchange-and-loading-nbr {
                        type uint32;
                        description
                          "Neighbor in exchange/loading state.";
                      }
    
                      leaf ase-lsa-chksum {
                        type pub-type:hex-binary;
                        description
                          "AS-External LSA's checksum sum.";
                      }
    
                      leaf as-unknown-lsa-cnt {
                        type uint32;
                        description
                          "Number of AS-scoped unknown LSA.";
                      }
    
                      leaf as-unknown-lsa-chksum {
                        type pub-type:hex-binary;
                        description
                          "AS-scoped unknown LSA's checksum sum.";
                      }
    
                      leaf full-nbr-count {
                        type uint32;
                        description
                          "Number of full neighbors.";
                      }
    
                      leaf non-refresh-lsa-cnt {
                        type uint32;
                        description
                          "Non refresh LSA.";
                      }
    
                      leaf non-full-nbr-cnt {
                        type uint32;
                        description
                          "Non full neighbor count.";
                      }
    
                      leaf lsa-org-cnt {
                        type uint32;
                        description
                          "Number of LSA originated.";
                      }
    
                      leaf lsa-recvd-cnt {
                        type uint32;
                        description
                          "Number of LSA received.";
                      }
    
                      leaf ase-lsa-count {
                        type uint32;
                        description
                          "Number of AS-external LSA.";
                      }
    
                      leaf import-limit-status {
                        type import-limit-status;
                        description
                          "Limit status of imported external routes.";
                      }
    
                      leaf self-ase-lsa-cnt {
                        type uint32;
                        description
                          "Number of AS-external LSAs that are generated locally.";
                      }
    
                      leaf authen-mode {
                        type authen-mode;
                        description
                          "Authentication mode.";
                      }
                    }  // container attribute
    
                    container dynamic-hostnames {
                      config false;
                      description
                        "List of dynamic hostname.";
                      list dynamic-hostname {
                        key "scope area-id router-id";
                        description
                          "Statistics of dynamic hostname.";
                        leaf scope {
                          type hostname-scope;
                          description
                            "Scope of the hostname.";
                        }
    
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Area ID to which hostname belongs.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router ID to which hostname belongs.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..256";
                          }
                          description
                            "Hostname associated with the router ID.";
                        }
                      }  // list dynamic-hostname
                    }  // container dynamic-hostnames
    
                    container bfd-stat-datas {
                      config false;
                      description
                        "List of BFD status data.";
                      list bfd-stat-data {
                        key "area-id nbr-router-id instance-id if-name";
                        description
                          "Statistics of BFD status data.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf nbr-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor router ID.";
                        }
    
                        leaf instance-id {
                          type uint32;
                          description
                            "Instance ID.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf state {
                          type bfd-state;
                          description
                            "BFD status.";
                        }
    
                        leaf local-ipv6-addr {
                          type inet:ipv6-address-no-zone;
                          description
                            "IPv6 local address.";
                        }
    
                        leaf remote-ipv6-addr {
                          type inet:ipv6-address-no-zone;
                          description
                            "IPv6 remote address.";
                        }
                      }  // list bfd-stat-data
                    }  // container bfd-stat-datas
    
                    container neighbors {
                      config false;
                      description
                        "List of neighbors.";
                      list neighbor {
                        key "area-id nbr-router-id if-name";
                        description
                          "Statistics of neighbors.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf nbr-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor router ID.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf nbr-priority {
                          type int32;
                          description
                            "Neighbor router priority.";
                        }
    
                        leaf nbr-state {
                          type nbr-state-type;
                          description
                            "Neighbor state.";
                        }
    
                        leaf nbr-intf-status {
                          type nbr-intf-status;
                          description
                            "Neighbor interface status.";
                        }
    
                        leaf dead-due-timer {
                          type uint32;
                          description
                            "Dead due timer.";
                        }
    
                        leaf instance-id {
                          type uint32;
                          description
                            "Instance ID.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..256";
                          }
                          description
                            "Host name.";
                        }
    
                        leaf dns-host-name {
                          type string {
                            length "1..256";
                          }
                          description
                            "DNS host name.";
                        }
    
                        container datas {
                          config false;
                          description
                            "List of neighbor datas.";
                          list data {
                            key "nbr-ipv6-addr";
                            description
                              "Statistics of neighbor datas.";
                            leaf nbr-ipv6-addr {
                              type inet:ipv6-address-no-zone;
                              description
                                "Neighbor IPv6 address.";
                            }
    
                            leaf nbr-dr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Designated router.";
                            }
    
                            leaf nbr-bdr {
                              type inet:ipv4-address-no-zone;
                              description
                                "Backup designated router.";
                            }
    
                            leaf nbr-options {
                              type pub-type:hex-binary;
                              description
                                "Neighbor options.";
                            }
    
                            leaf nbr-up-time {
                              type string {
                                length "1..17";
                              }
                              description
                                "Times when a neighbor goes up.";
                            }
    
                            leaf up-time-stamp {
                              type yang:date-and-time;
                              description
                                "Neighbor up time stamp.";
                            }
    
                            leaf ls-request-num {
                              type uint32;
                              description
                                "LS request list number.";
                            }
    
                            leaf ls-retrans-num {
                              type uint32;
                              description
                                "Ls retransmit list number.";
                            }
    
                            leaf events {
                              type uint32;
                              description
                                "Events.";
                            }
    
                            leaf nbr-if-id {
                              type int32;
                              description
                                "Neighbor interface ID.";
                            }
    
                            leaf nbr-auth-seq-high {
                              type uint32;
                              description
                                "Neighbor crypt high seq num.";
                            }
    
                            leaf nbr-auth-seq-low {
                              type uint32;
                              description
                                "Neighbor crypt low seq num.";
                            }
                          }  // list data
                        }  // container datas
                      }  // list neighbor
                    }  // container neighbors
    
                    container graceful-restart-info {
                      config false;
                      description
                        "Statistics of graceful restart informations.";
                      leaf gr-capability {
                        type helper-capabality;
                        description
                          "Helper capability.";
                      }
    
                      leaf help-role {
                        type helper-support;
                        description
                          "Helper support.";
                      }
    
                      leaf max-grace-period {
                        type uint32;
                        description
                          "Max rrace-period configured.";
                      }
    
                      leaf on-helper {
                        type on-helper;
                        description
                          "Last helper-exit reason.";
                      }
    
                      leaf restart-nbr-num {
                        type uint32;
                        description
                          "Restarting neighbor count.";
                      }
                    }  // container graceful-restart-info
    
                    container last-down-nbrs {
                      config false;
                      description
                        "List of the OSPF neighbor that goes down for the last time.";
                      list last-down-nbr {
                        key "area-id nbr-router-id if-name instance-id list-index";
                        description
                          "Statistics of the OSPF neighbor that goes Down for the last time.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor area ID.";
                        }
    
                        leaf nbr-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router ID of the neighbor.";
                        }
    
                        leaf if-name {
                          type string {
                            length "0..64";
                          }
                          description
                            "Interface that connects to the neighbor.";
                        }
    
                        leaf instance-id {
                          type uint8;
                          description
                            "Instance ID.";
                        }
    
                        leaf list-index {
                          type uint32;
                          description
                            "The index of the node for the particular last down neighbor.";
                        }
    
                        leaf down-imm-reason {
                          type nbr-down-imm-reason;
                          description
                            "Direct reason that the neighbor goes down.";
                        }
    
                        leaf down-pri-reason {
                          type nbr-down-prim-reason;
                          description
                            "Primary reason that the neighbor goes down.";
                        }
    
                        leaf down-time {
                          type yang:date-and-time;
                          description
                            "Time when the neighbor goes down.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "ID of the local router.";
                        }
                      }  // list last-down-nbr
                    }  // container last-down-nbrs
    
                    container nexthop-paras {
                      config false;
                      description
                        "List of the next hop of an OSPF process.";
                      list nexthop-para {
                        key "nbr-rtr-id nexthop-ipv6-addr if-name";
                        description
                          "Statistics of the next hop of an OSPF process.";
                        leaf nbr-rtr-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor router ID.";
                        }
    
                        leaf nexthop-ipv6-addr {
                          type inet:ipv6-address-no-zone;
                          description
                            "Nexthop IPv6 address.";
                        }
    
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Local router ID.";
                        }
    
                        leaf referece-count {
                          type uint32;
                          description
                            "Number of OSPF routes using the nexthop.";
                        }
                      }  // list nexthop-para
                    }  // container nexthop-paras
    
                    container lsdb-statistics {
                      config false;
                      description
                        "List of OSPF LSDBs.";
                      list lsdb-statistic {
                        key "area-id lsa-type link-state-id adv-router-id";
                        description
                          "Statistics of OSPF LSDBs.";
                        leaf area-id {
                          type inet:ipv4-address-no-zone;
                          description "Area ID.";
                        }
    
                        leaf lsa-type {
                          type lsa-type;
                          description
                            "LSA type.";
                        }
    
                        leaf link-state-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Link state ID in the LSA header.";
                        }
    
                        leaf adv-router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Router for advertising or generating LSAs.";
                        }
    
                        leaf lsa-age {
                          type int32;
                          description "LSA age.";
                        }
    
                        leaf options {
                          type pub-type:hex-binary;
                          description
                            "LSA option.";
                        }
    
                        leaf lsa-length {
                          type uint32;
                          description
                            "Lsa length.";
                        }
    
                        leaf option-flag {
                          type pub-type:hex-binary;
                          description
                            "LSA option flag. The available options are V, B, and E.";
                        }
    
                        leaf lsa-seq-num {
                          type string {
                            length "1..13";
                          }
                          description
                            "LSA sequence number.";
                        }
    
                        leaf checksum {
                          type pub-type:hex-binary;
                          description
                            "LSA checksum.";
                        }
    
                        leaf prefix-num {
                          type uint32;
                          description
                            "Number of prefixes.";
                        }
    
                        leaf ref-ls-type {
                          type ref-ls-type;
                          description
                            "Referenced LS type.";
                        }
    
                        leaf ref-ls-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Reference LS ID.";
                        }
    
                        leaf ref-adv-router {
                          type inet:ipv4-address-no-zone;
                          description
                            "Referenced originating router.";
                        }
    
                        leaf router-pri {
                          type uint32;
                          description
                            "Router priority of the interface.";
                        }
    
                        leaf link-local-addr {
                          type inet:ipv6-address-no-zone;
                          description
                            "Originating router link local address.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..256";
                          }
                          description
                            "Host name.";
                        }
    
                        container lsabodys {
                          config false;
                          description
                            "List of LSA body.";
                          list lsabody {
                            key "nbr-intf-id nbr-router-id attach-router-id link-type fwd-ipv6-addr";
                            description
                              "Statistics of LSA body.";
                            leaf nbr-intf-id {
                              type pub-type:hex-binary;
                              description
                                "Neighbor interface ID.";
                            }
    
                            leaf nbr-router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Neighbor router ID.";
                            }
    
                            leaf attach-router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Router ID of the routers attached to the link.";
                            }
    
                            leaf link-type {
                              type lsdb-link-type;
                              description
                                "Link type of the router LSA.";
                            }
    
                            leaf fwd-ipv6-addr {
                              type inet:ipv6-address-no-zone;
                              description
                                "Forwarding IPv6 address.";
                            }
    
                            leaf tos-metric {
                              type uint32;
                              description
                                "ToS metric.";
                            }
    
                            leaf route-tag {
                              type uint32;
                              description
                                "Route tag, which is used to prevent route loopback and applicable to Type5 or Type7 LSAs.";
                            }
    
                            leaf ext-metric-type {
                              type uint8;
                              description
                                "External metric type.";
                            }
    
                            leaf intf-id {
                              type pub-type:hex-binary;
                              description
                                "Interface ID.";
                            }
    
                            leaf prefix-len {
                              type uint32;
                              description
                                "Prefix length.";
                            }
    
                            leaf prefix-options {
                              type pub-type:hex-binary;
                              description
                                "Prefix options.";
                            }
    
                            leaf dest-router-id {
                              type inet:ipv4-address-no-zone;
                              description
                                "Destination router ID.";
                            }
    
                            leaf ipv6-prefix {
                              type inet:ipv6-address-no-zone;
                              description
                                "Interface IPv6 prefix.";
                            }
                          }  // list lsabody
                        }  // container lsabodys
                      }  // list lsdb-statistic
                    }  // container lsdb-statistics
    
                    container lsdb-briefs {
                      config false;
                      description
                        "List of LSDB statistics.";
                      list lsdb-brief {
                        key "router-id";
                        description
                          "Statistics of LSDB.";
                        leaf router-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Local router ID.";
                        }
    
                        leaf router {
                          type uint32;
                          description
                            "Number of router LSAs.";
                        }
    
                        leaf network {
                          type uint32;
                          description
                            "Number of network LSAs.";
                        }
    
                        leaf summary-net {
                          type uint32;
                          description
                            "Number of inter area prefix LSAs.";
                        }
    
                        leaf asbr {
                          type uint32;
                          description
                            "Number of inter area router LSAs.";
                        }
    
                        leaf type7 {
                          type uint32;
                          description
                            "Number of NSSA external LSAs.";
                        }
    
                        leaf ase {
                          type uint32;
                          description
                            "Number of ASE LSAs.";
                        }
    
                        leaf total {
                          type uint32;
                          description
                            "Total number of LSAs.";
                        }
    
                        leaf link-lsa {
                          type uint32;
                          description
                            "Number of link LSAs.";
                        }
    
                        leaf grace-lsa {
                          type uint32;
                          description
                            "Number of grace LSAs.";
                        }
    
                        leaf unknown-lsa {
                          type uint32;
                          description
                            "Number of unknown LSAs.";
                        }
    
                        leaf intra-prefix-lsa {
                          type uint32;
                          description
                            "Number of intra area LSAs.";
                        }
    
                        leaf ri-link-lsa {
                          type uint32;
                          description
                            "Number of router information link LSAs.";
                        }
    
                        leaf ri-area-lsa {
                          type uint32;
                          description
                            "Number of router information area LSAs.";
                        }
    
                        leaf ri-as-lsa {
                          type uint32;
                          description
                            "Number of router information ASE LSAs.";
                        }
                      }  // list lsdb-brief
                    }  // container lsdb-briefs
    
                    container routings {
                      config false;
                      description
                        "List of the OSPF routing table.";
                      list routing {
                        key "dest-ipv6-addr ipv6-mask-len";
                        description
                          "Statistics of the OSPF routing table.";
                        leaf dest-ipv6-addr {
                          type inet:ipv6-address-no-zone;
                          description
                            "Destination IPv6 address.";
                        }
    
                        leaf ipv6-mask-len {
                          type uint32;
                          description
                            "Mask length.";
                        }
    
                        leaf cost {
                          type uint32;
                          description
                            "Cost to the destination address.";
                        }
    
                        leaf path-type {
                          type string {
                            length "1..22";
                          }
                          description
                            "Path type.";
                        }
    
                        leaf prefix-priority {
                          type pre-priority;
                          description
                            "Prefix priority.";
                        }
    
                        container nexthop-datas {
                          config false;
                          description
                            "List of nexthop.";
                          list nexthop-data {
                            key "ipv6-addr if-name";
                            description
                              "Statistics of nexthop.";
                            leaf ipv6-addr {
                              type inet:ipv6-address-no-zone;
                              description
                                "Nexthop IPv6 address.";
                            }
    
                            leaf if-name {
                              type leafref {
                                path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                              }
                              description
                                "Outgoing interface name.";
                            }
    
                            leaf bak-if-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Backup outgoing interface name.";
                            }
    
                            leaf bak-next-ipv6-addr {
                              type inet:ipv6-address-no-zone;
                              description
                                "Backup nexthop IPv6 address.";
                            }
    
                            leaf backup-type {
                              type routing-bak-type;
                              description
                                "Type of backup.";
                            }
    
                            leaf flags-disp {
                              type string {
                                length "1..9";
                              }
                              description
                                "Nexthop flags.";
                            }
                          }  // list nexthop-data
                        }  // container nexthop-datas
                      }  // list routing
                    }  // container routings
    
                    container error-process-data {
                      config false;
                      description
                        "Statistics of error data.";
                      leaf same-ip-pkt {
                        type uint32;
                        description
                          "Same IP packet count.";
                      }
    
                      leaf bad-pkt {
                        type uint32;
                        description
                          "Bad packet count.";
                      }
    
                      leaf bad-version {
                        type uint32;
                        description
                          "Bad version count.";
                      }
    
                      leaf bad-chksum-pkt {
                        type uint32;
                        description
                          "Bad checksum count.";
                      }
    
                      leaf bad-area-pkt {
                        type uint32;
                        description
                          "Bad area ID count.";
                      }
    
                      leaf bad-virt-link {
                        type uint32;
                        description
                          "Bad virtual link count.";
                      }
    
                      leaf auth-type-fail {
                        type uint32;
                        description
                          "Authentication failure count.";
                      }
    
                      leaf auth-key-fail {
                        type uint32;
                        description
                          "Authentication keyId mismatch count.";
                      }
    
                      leaf short-pkt-cnt {
                        type uint32;
                        description
                          "Packet too small count.";
                      }
    
                      leaf tx-err-cnt {
                        type uint32;
                        description
                          "Transmit error count.";
                      }
    
                      leaf if-down-cnt {
                        type uint32;
                        description
                          "Interface down count.";
                      }
    
                      leaf no-nbr {
                        type uint32;
                        description
                          "Unknown neighbor count.";
                      }
    
                      leaf mis-hello-intl {
                        type uint32;
                        description
                          "Hello timer mismatch count.";
                      }
    
                      leaf mis-dead-intl {
                        type uint32;
                        description
                          "Dead timer mismatch count.";
                      }
    
                      leaf mis-ext-option {
                        type uint32;
                        description
                          "Extern option mismatch count.";
                      }
    
                      leaf vlink-nbr-mis {
                        type uint32;
                        description
                          "Virtual neighbor unknown count.";
                      }
    
                      leaf router-id {
                        type inet:ipv4-address-no-zone;
                        description "Router ID.";
                      }
    
                      leaf dd-mtu-mis {
                        type uint32;
                        description
                          "MTU option mismatch count.";
                      }
    
                      leaf dd-opt-mis-cnt {
                        type uint32;
                        description
                          "Extern option mismatch count.";
                      }
    
                      leaf dd-router-id {
                        type uint32;
                        description
                          "DD router ID confusion count.";
                      }
    
                      leaf dd-unknown-lsa {
                        type uint32;
                        description
                          "DD packet unknown LSA type count.";
                      }
    
                      leaf ack-bad-cnt {
                        type uint32;
                        description
                          "Bad ACK count.";
                      }
    
                      leaf gr-invalid-lsa {
                        type uint32;
                        description
                          "Invalid LSA count.";
                      }
    
                      leaf gr-invalid-pol {
                        type uint32;
                        description
                          "Policy failed LSA count.";
                      }
    
                      leaf gr-invalid-prd {
                        type uint32;
                        description
                          "Wrong period LSA count.";
                      }
    
                      leaf hello-dr-mis {
                        type uint32;
                        description
                          "The DR or BDR in receiving hello packet is not same with the DR or BDR.";
                      }
    
                      leaf gen-ttl-err {
                        type uint32;
                        description
                          "The TTL of the packet is error.";
                      }
    
                      leaf over-max-buf-len {
                        type uint32;
                        description
                          "Number of packet that length is more than maximum buffer length.";
                      }
    
                      leaf long-pkt {
                        type uint32;
                        description
                          "The packet length is greater than the IP packet length.";
                      }
    
                      leaf bad-link-local-addr-pkt {
                        type uint32;
                        description
                          "Bad linklocal address packet count.";
                      }
    
                      leaf dest-ip-err-pkt {
                        type uint32;
                        description
                          "Number of bad destination IP address packet.";
                      }
    
                      leaf pass-intf-pkt {
                        type uint32;
                        description
                          "Number of packet that received from silent interface.";
                      }
    
                      leaf hello-nbr-limit {
                        type uint32;
                        description
                          "Number of hello packet that discard because the number of neighbour reached the limit.";
                      }
    
                      leaf hello-hold-down {
                        type uint32;
                        description
                          "Number of hello packet that discard because the neighbour is in hold down state.";
                      }
    
                      leaf hello-memory-over {
                        type uint32;
                        description
                          "Number of hello packet that discard because memory is overload.";
                      }
    
                      leaf hello-cpu-over {
                        type uint32;
                        description
                          "Number of hello packet that discard because cpu is overload.";
                      }
    
                      leaf dd-nbr-limit {
                        type uint32;
                        description
                          "Number of dd packet that discard because the number of neighbour reached the limit.";
                      }
    
                      leaf dd-cpu-over {
                        type uint32;
                        description
                          "Number of dd packet that discard because cpu is overload.";
                      }
    
                      leaf ack-duplicate-cnt {
                        type uint32;
                        description
                          "Duplicate ACK count.";
                      }
    
                      leaf ack-unknown-lsa {
                        type uint32;
                        description
                          "LSAck packet unknown LSA type count.";
                      }
    
                      leaf req-empty-cnt {
                        type uint32;
                        description
                          "Empty request count.";
                      }
    
                      leaf req-bad-cnt {
                        type uint32;
                        description
                          "Bad request count.";
                      }
    
                      leaf upd-lsa-chksum {
                        type uint32;
                        description
                          "Bad LSA checksum count.";
                      }
    
                      leaf upd-unknow-lsa {
                        type uint32;
                        description
                          "LSUpdate packet unknown LSA type count.";
                      }
    
                      leaf upd-self-newer {
                        type uint32;
                        description
                          "Newer self-generate LSA count.";
                      }
    
                      leaf upd-less-recent {
                        type uint32;
                        description
                          "Received less recent LSA count.";
                      }
    
                      leaf bad-instance-id {
                        type uint32;
                        description
                          "Bad instance ID count.";
                      }
    
                      leaf same-router-id-pkt {
                        type uint32;
                        description
                          "Router ID confusion count.";
                      }
    
                      leaf dd-nbr-low {
                        type uint32;
                        description
                          "Neighbour state LOW for DD count.";
                      }
    
                      leaf ack-nbr-low {
                        type uint32;
                        description
                          "Neighbour state LOW for LS ACK count.";
                      }
    
                      leaf req-nbr-low {
                        type uint32;
                        description
                          "Neighbour state LOW for LS REQ count.";
                      }
    
                      leaf upd-nbr-low {
                        type uint32;
                        description
                          "Neighbour state LOW for LS UPD count.";
                      }
    
                      leaf upd-min-lsa-arr {
                        type uint32;
                        description
                          "Received LSA within LSA arrival interval.";
                      }
    
                      leaf auth-seq-fail {
                        type uint32;
                        description
                          "Authentication sequence mismatch count.";
                      }
                    }  // container error-process-data
                  }  // list site
                }  // container sites
              }  // container ospfv3
    
              container pim {
                description
                  "Configure PIM (Protocol Independent Multicast) in the instance.";
                container rp {
                  description
                    "Configure PIM RP configurations.";
                  container c-bsr-vpns {
                    description
                      "List of BSR configurations.";
                    list c-bsr-vpn {
                      key "type";
                      description
                        "Configure BSR.";
                      leaf type {
                        type addr-family-type;
                        must
                          "../../../../pim:protocol/pim:instances/pim:instance[pim:type=current()]";
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf if-name {
                        when
                          "../type='ipv4unicast'";
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        must
                          "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                        description
                          "Interface name of a C-BSR. PIM-SM must be enabled on the interface to make the C-BSR take effect.";
                      }
    
                      leaf if-addr {
                        when
                          "../type='ipv6unicast'";
                        type inet:ipv6-address-no-zone;
                        description
                          "Global IPv6 unicast address of the C-BSR.";
                      }
    
                      leaf hold-time {
                        type uint32 {
                          range "1..214748364";
                        }
                        units "s";
                        default "130";
                        description
                          "Timeout period (called holdtime) during which C-BSRs wait to receive bootstrap messages from the BSR. To prevent frequent BSR elections, set the same holdtime for all C-BSRs in the same domain. If an interval (called BS_interval) at which bootstrap messages are sent has been set for C-BSRs, ensure that the specified holdtime is larger than the BS_interval.";
                      }
    
                      leaf interval {
                        type uint32 {
                          range "1..107374177";
                        }
                        units "s";
                        default "60";
                        description
                          "Interval (called BS_interval) at which a BSR continuously sends bootstrap messages. To prevent frequent BSR elections, set the same BS_interval for all C-BSRs in the same domain. If a timeout period (called holdtime) during which C-BSRs wait to receive bootstrap messages from the BSR has been set for C-BSRs, ensure that the specified BS_interval is smaller than the holdtime.";
                      }
    
                      leaf hash-len {
                        ext:dynamic-default {
                          ext:default-value "30" {
                            when "../type='ipv4unicast'";
                            description "In IPv4, the default value is 30.";
                          }
                          ext:default-value "126" {
                            when "../type='ipv6unicast'";
                            description "In IPv6, the default value is 126.";
                          }
                        }
                        type uint32 {
                          range "0..128";
                        }
                        description
                          "Global hash mask length for a C-BSR.
    In IPv4, the value is an integer ranging from 0 to 32, and the default value is 30. In IPv6, the value is an integer ranging from 0 to 128, and the default value is 126.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        default "0";
                        description
                          "Globally specify a priority for all C-BSRs on the router. The greater the value, the higher the priority.";
                      }
    
                      leaf policy-name {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        description
                          "Policy for limiting the range of valid BSR addresses so that a router discards the messages received from the BSRs not in the specified address range.";
                      }
    
                      leaf policy-name6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Policy for limiting the range of valid BSR addresses so that a router discards the messages received from the BSRs not in the specified address range.";
                      }
    
                      leaf admin-scope {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable a device to divide one PIM-SM domain into multiple BSR administrative domains to implement RP-Set advertisement. By default, there is only one BSR in the entire PIM-SM domain.";
                      }
    
                      leaf global-enable {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable C-BSR in the global domain. By default, no C-BSR is configured in the global domain.";
                      }
    
                      leaf global-hash-len {
                        when
                          "../global-enable='true'";
                        type uint32 {
                          range "0..32";
                        }
                        default "30";
                        description
                          "Hash mask length for the C-BSR in the global domain.";
                      }
    
                      leaf global-priority {
                        when
                          "../global-enable='true'";
                        type uint32 {
                          range "0..255";
                        }
                        default "0";
                        description
                          "Priority for the C-BSR in the global domain. The greater the value, the higher the priority.";
                      }
    
                      leaf c-rp-hold-time {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "150";
                        description
                          "Timeout period during which a BSR waits to receive Advertisement messages from a C-RP.";
                      }
    
                      leaf c-rp-priority {
                        ext:dynamic-default {
                          ext:default-value "0" {
                            when "../type='ipv4unicast'";
                            description "In IPv4, the default value is 0.";
                          }
                          ext:default-value "192" {
                            when "../type='ipv6unicast'";
                            description "In IPv6, the default value is 192.";
                          }
                        }
                        type uint32 {
                          range "0..255";
                        }
                        description
                          "Global priority for C-RPs. The greater the value, the lower the priority. In IPv4, the value is an integer ranging from 0 to 255, and the default value is 0. In IPv6, the value is an integer ranging from 0 to 255, and the default value is 192.";
                      }
    
                      leaf c-rp-ad-interval {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "60";
                        description
                          "Interval at which a C-RP periodically sends Advertisement messages.";
                      }
    
                      leaf c-rp-policy {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Policy for limiting the range of valid C-RP addresses and the range of multicast groups that each C-RP serves. The BSR configured with a C-RP filter policy discards messages received from the C-RPs whose addresses are not in the specified address range, thus preventing C-RP spoofing.";
                      }
    
                      leaf c-rp-policy6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                        description
                          "Policy for limiting the range of valid C-RP addresses and the range of multicast groups that each C-RP serves. The BSR configured with a C-RP filter policy discards messages received from the C-RPs whose addresses are not in the specified address range, thus preventing C-RP spoofing.";
                      }
    
                      leaf is-fragable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the C-BSR message fragmentation function.";
                      }
                    }  // list c-bsr-vpn
                  }  // container c-bsr-vpns
    
                  container ipv4-c-bsr-groups {
                    when
                      "../../pim:protocol/pim:instances/pim:instance[type='ipv4unicast']";
                    description
                      "List of C-BSR group ranges.";
                    list ipv4-c-bsr-group {
                      key "group-addr group-mask";
                      max-elements 64;
                      description
                        "Configure range of C-BSR groups. PIM-SM must be enabled on the interface to make the C-BSR take effect.";
                      leaf group-addr {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '(239)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        description
                          "Multicast group address. The value ranges from 239.0.0.0 to 239.255.255.255.";
                      }
    
                      leaf group-mask {
                        type inet:ipv4-address-no-zone;
                        description
                          "Mask of a group address. The value is in dotted decimal notation.";
                      }
    
                      leaf hash-length {
                        type uint32 {
                          range "0..32";
                        }
                        default "30";
                        description
                          "Hash length of a C-BSR.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        default "0";
                        description
                          "Priority of a C-BSR in the BSR administrative domain that serves a specific multicast group. The greater the value, the higher the priority.";
                      }
                    }  // list ipv4-c-bsr-group
                  }  // container ipv4-c-bsr-groups
    
                  container ipv4-c-rp-ifs {
                    when
                      "../../pim:protocol/pim:instances/pim:instance[type='ipv4unicast']";
                    description
                      "List of C-RP IPv4 configurations.";
                    list ipv4-c-rp-if {
                      key "if-name";
                      description
                        "Configure C-RP IPv4 configuration. PIM-SM must be enabled on the interface to make the C-RP take effect.";
                      leaf if-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        must
                          "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                        description
                          "Name of a C-RP interface.";
                      }
    
                      leaf group-policy {
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        description
                          "Policy for limiting the range of valid group addresses. With this policy, a router discards messages received from the addresses not in the specified range.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        default "0";
                        description
                          "Priority of a C-RP. The greater the value, the lower the priority.";
                      }
    
                      leaf hold-time {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "150";
                        description
                          "Timeout period during which a BSR waits to receive Advertisement messages from a C-RP.";
                      }
    
                      leaf ad-interval {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "60";
                        description
                          "Interval at which a C-RP sends Advertisement messages.";
                      }
                    }  // list ipv4-c-rp-if
                  }  // container ipv4-c-rp-ifs
    
                  container ipv6-c-rps {
                    when
                      "../../pim:protocol/pim:instances/pim:instance[type='ipv6unicast']";
                    description
                      "List of C-RP IPv6 configurations.";
                    list ipv6-c-rp {
                      key "address";
                      description
                        "Configure C-RP IPv6 configurations.";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "Address of a C-RP. The value is a valid IPv6 unicast address, such as fc00::100.";
                      }
    
                      leaf holdtime {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "150";
                        description
                          "Timeout period during which a BSR waits to receive Advertisement messages from a C-RP.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        default "192";
                        description
                          "Priority of a C-RP. The greater the value, the lower the priority.";
                      }
    
                      leaf ad-interval {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "60";
                        description
                          "Interval at which a C-RP continuously sends Advertisement messages.";
                      }
    
                      leaf group-policy {
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Policy for limiting the range of valid group addresses. With this policy, a router discards the messages received from the addresses not in the specified range.";
                      }
                    }  // list ipv6-c-rp
                  }  // container ipv6-c-rps
    
                  container auto-rps {
                    when
                      "../../pim:protocol/pim:instances/pim:instance[type='ipv4unicast']";
                    presence
                      "Auto-RP configuration.";
                    description
                      "Enable/disable Auto-RP.";
                  }  // container auto-rps
    
                  container static-rps {
                    description
                      "List of static RPs.";
                    list static-rp {
                      must
                        "(count(../static-rp[type='ipv4unicast'])-count(../static-rp[type='ipv4unicast']/policy)<2) and (count(../static-rp[type='ipv6unicast'])-count(../static-rp[type='ipv6unicast']/policy)<2)";
                      key "type address";
                      unique "type policy";
                      unique "type policy-ipv6";
                      description
                        "Configure static RP.";
                      leaf type {
                        type addr-family-type;
                        must
                          "../../../../pim:protocol/pim:instances/pim:instance[pim:type=current()]";
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf address {
                        type inet:ip-address-no-zone;
                        description
                          "Address of a static RP. This address must be a valid unicast IP address.
    In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
    In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                      }
    
                      leaf policy {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        description
                          "Static RP policy.";
                      }
    
                      leaf policy-ipv6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Static RP policy.";
                      }
    
                      leaf preference {
                        type rp-prefer-type;
                        default "not-prefer";
                        description
                          "Whether the static RP is preferred. The value can be:
    0: the static RP is not preferred.
    1: the static RP is preferred.
    The default value is 0.";
                      }
                    }  // list static-rp
                  }  // container static-rps
    
                  container elected-bsrs {
                    config false;
                    description
                      "List of elected BSR states.";
                    list elected-bsr {
                      key "type address";
                      description
                        "Operational state of elected BSRs.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf address {
                        type inet:ip-address-no-zone;
                        description
                          "Address of an elected BSR.";
                      }
    
                      leaf scope {
                        type bsr-scope;
                        description
                          "Whether the BSR is a BSR in an administrative domain.";
                      }
    
                      leaf group-addr {
                        type inet:ip-address-no-zone {
                        }
                        description
                          "Multicast group address. In IPv4 address, the value ranges from 239.0.0.0 to 239.255.255.255. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                      }
    
                      leaf group-mask-length {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "0" {
                              ext:meaning "--";
                            }
                          }
                          range "0..32";
                        }
                        description
                          "Mask length of a group address. The value is an integer ranging from 8 to 32.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        description
                          "Priority for a C-BSR to participate in BSR election. The greater the value, the higher the priority. The value is an integer ranging from 0 to 255. The default value is 0.";
                      }
    
                      leaf hash-lenth {
                        type uint32 {
                          range "0..128";
                        }
                        description
                          "Hash length used by an elected BSR to perform RP calculation. The value is an integer ranging from 0 to 32.";
                      }
    
                      leaf fsm-state {
                        type bsr-state;
                        description
                          "Status of an elected BSR.";
                      }
    
                      leaf up-time {
                        type pub-type:time-tick;
                        description
                          "Time since the C-BSR was elected as the BSR.";
                      }
    
                      leaf expire-time {
                        type pub-type:time-tick;
                        description
                          "Period after which the elected BSR on the LAN sends the next bootstrap message.";
                      }
    
                      leaf candidate-count {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of candidate RPs.";
                      }
                    }  // list elected-bsr
                  }  // container elected-bsrs
    
                  container c-bsrs {
                    config false;
                    description
                      "List of C-BSR states.";
                    list c-bsr {
                      key "type address";
                      description
                        "Operational state of candidate bootstrap router.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf address {
                        type inet:ip-address-no-zone;
                        description
                          "Address of a C-BSR.";
                      }
    
                      leaf scope {
                        type bsr-scope;
                        description
                          "Whether the BSR is a BSR in an administrative domain.";
                      }
    
                      leaf group-addr {
                        type inet:ip-address-no-zone {
                        }
                        description
                          "Multicast group address. In IPv4, the value ranges from 239.0.0.0 to 239.255.255.255. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                      }
    
                      leaf group-mask-length {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "0" {
                              ext:meaning "--";
                            }
                          }
                          range "0..32";
                        }
                        description
                          "Mask length of a group address. The value is an integer ranging from 8 to 32.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        description
                          "Priority of a C-BSR. The greater the value, the higher the priority. The value is an integer ranging from 0 to 255. The default value is 0.";
                      }
    
                      leaf hash-lenth {
                        type uint32 {
                          range "0..32";
                        }
                        description
                          "Mask length in RP hash calculation. The value is an integer ranging from 0 to 32.";
                      }
    
                      leaf fsm-state {
                        type bsr-state;
                        description
                          "Status of a C-BSR.";
                      }
    
                      leaf valid-flag {
                        type c-bsr-valid-type;
                        description
                          "Whether the current C-BSR is valid (0: valid; 1: invalid).";
                      }
                    }  // list c-bsr
                  }  // container c-bsrs
    
                  container elected-bsr-rps {
                    config false;
                    description
                      "List of RP information about elected BSRs.";
                    list elected-bsr-rp {
                      key "type rp-addr";
                      description
                        "Elected BSR RP state.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf rp-addr {
                        type inet:ip-address-no-zone;
                        description
                          "RP address.";
                      }
    
                      leaf is-local-addr {
                        type boolean;
                        description
                          "Whether the RP address is a local address.";
                      }
    
                      leaf group-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast group address. In IPv4, the value ranges from 239.0.0.0 to 239.255.255.255. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                      }
    
                      leaf group-mask-length {
                        type uint32 {
                          range "0..32";
                        }
                        description
                          "Mask length. In IPv4, the value ranges from 4 to 32. In IPv6, the value ranges from 8 to 128.";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "0..255";
                        }
                        description
                          "Priority of an RP. The greater the value, the higher the priority. The value is an integer ranging from 0 to 255. The default value is 0.";
                      }
    
                      leaf up-time {
                        type pub-type:time-tick;
                        units "s";
                        description
                          "Time since the C-RP was elected as the RP.";
                      }
    
                      leaf expiry-time {
                        type pub-type:time-tick;
                        units "s";
                        description
                          "Time after which an RP will expire, in seconds.";
                      }
    
                      leaf bidir-enable {
                        type boolean;
                        description
                          "Whether BIDIR-PIM is enabled on the RP.";
                      }
                    }  // list elected-bsr-rp
                  }  // container elected-bsr-rps
                }  // container rp
    
                container protocol {
                  description "Configure PIM.";
                  container instances {
                    description
                      "List of PIM configurations in the instance.";
                    list instance {
                      key "type";
                      description
                        "Configure PIM instance.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf assert-holdtime {
                        type uint32 {
                          range "7..65535";
                        }
                        units "s";
                        default "180";
                        description
                          "Timeout period during which PIM interfaces wait to receive Assert messages from the forwarder.";
                      }
    
                      leaf jp-holdtime {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "210";
                        description
                          "Holdtime for a Join/Prune message sent by a PIM interface. Commonly, the holdtime is 3.5 times longer than the interval for all the interfaces to send Join/Prune messages.";
                      }
    
                      leaf probe-interval {
                        type uint32 {
                          range "1..1799";
                        }
                        units "s";
                        must
                          "(../probe-interval<../reg-suppress-interval*0.5)";
                        default "5";
                        description
                          "Interval at which Probe messages are sent to an RP.";
                      }
    
                      leaf jp-timer-interval {
                        type uint32 {
                          range "1..18000";
                        }
                        units "s";
                        default "60";
                        description
                          "Interval at which Join/Prune messages are sent. It must be shorter than the holdtime of Join/Prune messages.";
                      }
    
                      leaf dr-priority {
                        type uint32 {
                          range "0..4294967295";
                        }
                        default "1";
                        description
                          "DR election priority for a router. The greater the value, the higher the priority. The value is an integer ranging from 0 to 4294967295. The default value is 1.";
                      }
    
                      leaf hello-holdtime {
                        type uint16 {
                          range "1..65535";
                        }
                        units "s";
                        default "105";
                        description
                          "Timeout period during which a PIM interface waits to receive Hello messages from its neighbors. It must be longer than the interval for PIM neighbors to send Hello messages.";
                      }
    
                      leaf hello-landelay {
                        type uint16 {
                          range "1..32767";
                        }
                        units "ms";
                        default "500";
                        description
                          "Delay for transmitting Prune messages on a shared network segment.";
                      }
    
                      leaf hello-interval {
                        type uint32 {
                          range "1..18000";
                        }
                        units "s";
                        default "30";
                        description
                          "Specifies the interval at which Hello messages are sent. It must be shorter than the timeout period of PIM neighbors.";
                      }
    
                      leaf hello-override {
                        type uint16 {
                          range "1..65535";
                        }
                        units "ms";
                        default "2500";
                        description
                          "Interval at which the prune action in a Hello message is overridden.";
                      }
    
                      leaf reg-checksum {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable a router to calculate the checksum based on all contents of a Register message. By default, the checksum is calculated based on the header of a Register message only.";
                      }
    
                      leaf reg-suppress-interval {
                        type uint32 {
                          range "11..3600";
                        }
                        units "s";
                        default "60";
                        description
                          "Timeout period during which a router remains in the registration suppression state.";
                      }
    
                      leaf embedded-rp {
                        when
                          "../type='ipv6unicast'";
                        type boolean;
                        default "true";
                        description
                          "Enable/disable the PIM neighbor check function to check whether received Join/Prune and Assert messages are sent from a PIM neighbor. If not, these messages are discarded.
    By default, the PIM neighbor check function is disabled.";
                      }
    
                      leaf nbr-check-when-recv {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the PIM neighbor check function to check whether received Join/Prune and Assert messages are sent from a PIM neighbor. If not, these messages are discarded.
    By default, the PIM neighbor check function is disabled.";
                      }
    
                      leaf nbr-check-when-send {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the PIM neighbor check function to check whether Join/Prune and Assert messages are to be sent to an IPv4/v6 PIM neighbor. If not, these messages are not sent. By default, the PIM neighbor check function is disabled for Join/Prune and Assert messages to be sent.";
                      }
    
                      leaf reg-policy-name {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Policy for filtering Register messages. The value is an integer ranging from 3000 to 3999, or a string.";
                      }
    
                      leaf reg-policy-name6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                        description
                          "Policy for filtering Register messages.";
                      }
    
                      leaf ssm-policy-name {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        description
                          "Policy for limiting the range of valid SSM group addresses. The value is an integer ranging from 2000 to 2999, or a string.";
                      }
    
                      leaf ssm-policy-name6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Range of SSM group addresses.";
                      }
    
                      leaf src-policy-name {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Policy for filtering multicast entries based on source addresses or based on both source and group addresses.";
                      }
    
                      leaf src-policy-name6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                        description
                          "Policy for filtering multicast entries based on source addresses or based on both source and group addresses.";
                      }
    
                      leaf embedded-rp-policy-name {
                        when
                          "../embedded-rp='true'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Policy for limiting the range of multicast groups to which an embedded-RP applies.";
                      }
    
                      leaf source-life-time {
                        type uint32 {
                          range "60..65535";
                        }
                        units "s";
                        default "210";
                        description
                          "Timeout period for (S, G) entries on a router.";
                      }
    
                      leaf spt-switch-check-interval {
                        type uint32 {
                          range "15..65535";
                        }
                        units "s";
                        default "15";
                        description
                          "Interval for checking the multicast message rate is configured. When the multicast message rate reaches the specified threshold, a switchover from the RPT to the SPT is performed. The value is an integer ranging from 15 to 65535, in seconds.";
                      }
    
                      leaf packaging-jp-disable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the Join/Prune message packaging function. The efficiency for sending PIM Join/Prune messages in a package is higher than that for separately sending a large number of PIM Join/Prune messages. By default, a device sends PIM Join/Prune messages in a package.";
                      }
    
                      leaf ipsec-name {
                        type string {
                          length "1..15";
                        }
                        description
                          "Description of an SA.";
                      }
    
                      leaf ipsec-type {
                        when "../ipsec-name";
                        type ipsec-type;
                        default "for-all";
                        description
                          "Hello options based on the IPsec type.";
                      }
    
                      leaf unicast-ipsec-name {
                        type string {
                          length "1..15";
                        }
                        description
                          "Description of an SA.";
                      }
    
                      leaf register-source-interface {
                        when
                          "../type='ipv4unicast'";
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        must
                          "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                        description
                          "Source address of register packets.";
                      }
    
                      leaf register-source-addr {
                        when
                          "../type='ipv6unicast'";
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 global address of register packets.";
                      }
    
                      leaf state-refresh-interval {
                        when
                          "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                        type uint32 {
                          range "1..255";
                        }
                        units "s";
                        default "60";
                        description
                          "The state-refresh-interval command sets the interval for sending PIM State-Refresh messages.";
                      }
    
                      leaf state-refresh-rate-limit {
                        when
                          "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "30";
                        description
                          "The state-refresh-rate-limit command sets the minimum period to wait before receiving the next PIM State-Refresh message.";
                      }
    
                      leaf state-refresh-ttl {
                        when
                          "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                        type uint32 {
                          range "1..255";
                        }
                        default "255";
                        description
                          "The state-refresh-ttl command sets the TTL value for sending PIM State-Refresh messages.";
                      }
    
                      leaf fast-reroute {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        must
                          "../pim:fast-reroute='false' or (../../../../../l3mc:multicast/l3mc:ipv4/l3mc:global/l3mc:load-splitting!='balance' and ../../../../../l3mc:multicast/l3mc:ipv4/l3mc:global/l3mc:load-splitting!='balance-ucmp')";
                        default "false";
                        description
                          "Enable/disable PIM fast reroute.";
                      }
    
                      leaf fast-reroute-policy {
                        when
                          "../fast-reroute='true'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Policy for limiting the range of multicast entries for which PIM fast reroute is enabled.";
                      }
    
                      leaf hello-join-attr-enable {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable all PIM interfaces to send PIM Hello messages that carry the join attribute.";
                      }
    
                      leaf clone-inherit-enable {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        must
                          "../clone-inherit-enable='false' or ../fast-reroute='true'";
                        default "false";
                        description
                          "Enable/disable cloned PIM (S, G) entries to inherit the outbound interfaces of (*, G) entries.";
                      }
    
                      leaf clone-inherit-policy {
                        when
                          "../clone-inherit-enable='true'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Enable cloned PIM (S, G) entries to inherit the outbound interface policies of (*, G) entries.";
                      }
    
                      leaf gen-id-chang-enable {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable hello nsr genid-change.";
                      }
    
                      leaf rpf-prune-holdtime {
                        when
                          "../type='ipv4unicast'";
                        type uint16 {
                          range "1..300";
                        }
                        units "s";
                        description
                          "Set a delay in sending Prune messages to upstream devices.";
                      }
    
                      leaf rpf-prune-policy-ipv4 {
                        when
                          "../rpf-prune-holdtime";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Indicate a matching policy for multicast entries to be pruned.";
                      }
    
                      leaf backup-rpf-switch-holdtime {
                        when
                          "../type='ipv4unicast'";
                        type uint16 {
                          range "1..300";
                        }
                        must
                          "../is-backup-rpf-switch-flow-based='false'";
                        description
                          "Allow new interfaces connected to backup upstream devices to generate forwarding entries only after the specified delay expires.";
                      }
    
                      leaf is-backup-rpf-switch-flow-based {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function of allowing new interfaces connected to backup upstream devices to generate forwarding entries only after they receive multicast traffic from the backup upstream devices.";
                      }
    
                      leaf backup-rpf-switch-policy-ipv4 {
                        when
                          "../backup-rpf-switch-holdtime or ../is-backup-rpf-switch-flow-based='true'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Indicate a matching policy for multicast entries.";
                      }
    
                      container spt-switchs {
                        when
                          "../type='ipv4unicast'";
                        description
                          "List of SPT switchover configurations.";
                        container spt-switch-no-acl {
                          description
                            "Configure SPT switchover configuration.";
                          leaf spt-threshold-no-acl {
                            type uint32 {
                              ext:value-meaning {
                                ext:item "4294967295" {
                                  ext:meaning "infinity";
                                }
                              }
                              range
                                "1..4194304 | 4294967295";
                            }
                            units "kbit/s";
                            description
                              "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT. This threshold for all group that doesn't match any group policy.";
                          }
                        }  // container spt-switch-no-acl
    
                        list spt-switch {
                          key "group-policy";
                          ordered-by user;
                          description
                            "Configure SPT switchover configuration.";
                          leaf group-policy {
                            type acl:acl4-identity;
                            must
                              "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                            must
                              "/acl:acl/acl:groups/acl:group[acl:identity=current()] or not(../../spt-switch[group-policy=/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:identity])";
                            must
                              "/acl:acl/acl:groups/acl:group[acl:number=number(current())] or not(/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:number) or not(../../spt-switch[group-policy=string(/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:number)])";
                            description
                              "Name of a named ACL. If the parameter is not set, the threshold is applied to all multicast groups.";
                          }
    
                          leaf spt-threshold {
                            type uint32 {
                              ext:value-meaning {
                                ext:item "4294967295" {
                                  ext:meaning "infinity";
                                }
                              }
                              range
                                "1..4194304 | 4294967295";
                            }
                            units "kbit/s";
                            mandatory true;
                            description
                              "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT.";
                          }
                        }  // list spt-switch
                      }  // container spt-switchs
    
                      container ipv6-spt-switchs {
                        when
                          "../type='ipv6unicast'";
                        description
                          "List of SPT6 switchover configurations.";
                        container spt-switch-no-acl {
                          description
                            "Configure SPT6 switchover configuration.";
                          leaf spt-threshold-no-acl {
                            type uint32 {
                              ext:value-meaning {
                                ext:item "4294967295" {
                                  ext:meaning "infinity";
                                }
                              }
                              range
                                "1..4194304 | 4294967295";
                            }
                            units "kbit/s";
                            description
                              "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT6. This threshold for all group that doesn't match any group policy.";
                          }
                        }  // container spt-switch-no-acl
    
                        list ipv6-spt-switch {
                          key "group-policy";
                          ordered-by user;
                          description
                            "Configure rate threshold of multicast packets that can trigger a receiver's DR to send a Join message to a multicast source to set up an SPT6. By default, the receiver's DR performs the switchover from the RPT to the SPT6 after receiving the first multicast data packet.";
                          leaf group-policy {
                            type leafref {
                              path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                            }
                            must
                              "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                            description
                              "Name of a named ACL. f the parameter is not set, the threshold is applied to all multicast groups.";
                          }
    
                          leaf spt-threshold {
                            type uint32 {
                              ext:value-meaning {
                                ext:item "4294967295" {
                                  ext:meaning "infinity";
                                }
                              }
                              range
                                "1..4194304 | 4294967295";
                            }
                            units "kbit/s";
                            mandatory true;
                            description
                              "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT6.";
                          }
                        }  // list ipv6-spt-switch
                      }  // container ipv6-spt-switchs
    
                      container anycast-rps {
                        description
                          "List of Anycast-RPs.";
                        list anycast-rp {
                          key "rp-addr";
                          max-elements 4;
                          description
                            "Configure Anycast-RP.";
                          leaf rp-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Address of an Anycast-RP. This address must be a valid unicast IP address.
    In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
    In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                          }
    
                          leaf local-addr {
                            type inet:ip-address-no-zone;
                            description
                              "The Anycast-RP address is a local Address. This address must be a valid unicast IP address.
    In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
    In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                          }
    
                          container rp-peers {
                            description
                              "List of Anycast-RP peers.";
                            list rp-peer {
                              key "peer-ip-addr";
                              max-elements 16;
                              description
                                "Configure Anycast-RP peer.";
                              leaf peer-ip-addr {
                                type inet:ip-address-no-zone;
                                description
                                  "Address of an Anycast-RP peer. This address must be a valid unicast IP address.
    In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
    In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                              }
    
                              leaf forward-sa-msg {
                                when
                                  "../../../../../type='ipv4unicast'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the function of forwarding to Anycast-RP peers source information learned through SA messages.";
                              }
    
                              leaf forward-policy {
                                when
                                  "../forward-sa-msg='true'";
                                type acl:acl4-identity;
                                must
                                  "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                                description
                                  "Policy for filtering SA messages to be forwarded to Anycast-RP peers.";
                              }
                            }  // list rp-peer
                          }  // container rp-peers
                        }  // list anycast-rp
                      }  // container anycast-rps
    
                      container p2mp {
                        when
                          "../type='ipv4unicast'";
                        description
                          "Configure P2MP configuration.";
                        leaf rpf-disable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the RPF check for multicast entries. A policy can be configured to limit the range of multicast entries for which the RPF check is disabled. If a policy is not configured, the RPF check is disabled for all multicast entries. By default, the RPF check is enabled for all multicast entries.";
                        }
    
                        leaf rpf-disable-policy {
                          when
                            "../rpf-disable='true'";
                          type acl:acl4-identity;
                          must
                            "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                          description
                            "Policy for limiting the range of multicast entries for which the RPF check is disabled.";
                        }
    
                        leaf source-proxy-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable multicast source proxy.";
                        }
    
                        leaf source-proxy-policy {
                          when
                            "../source-proxy-enable='true'";
                          type acl:acl4-identity;
                          must
                            "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                          description
                            "Policy for limiting the range of multicast entries for which multicast source proxy is enabled.";
                        }
                      }  // container p2mp
    
                      container vector {
                        when
                          "../type='ipv4unicast'";
                        description
                          "Configure Vector configuration.";
                        leaf compatible-standard-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable a device to use the standard format to encapsulate Hello or Join/Prune messages carrying vector attributes. By default, a private format is used to encapsulate Hello or Join/Prune messages carrying vector attributes.";
                        }
                      }  // container vector
    
                      container p2mp-tunnels {
                        when
                          "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                        description
                          "List of relation of P2MP Tunnel and VPN configurations.";
                        list p2mp-tunnel {
                          key "p2mp-root-ip tunnel-id";
                          description
                            "Configure relation of P2MP Tunnel and VPN configuration.";
                          leaf p2mp-root-ip {
                            type inet:ipv4-address-no-zone {
                              pattern
                                '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                            }
                            description
                              "P2MP Tunnel Root Ipaddress.";
                          }
    
                          leaf tunnel-id {
                            type uint16 {
                              range "1..65535";
                            }
                            description
                              "P2MP Tunnel ID.";
                          }
                        }  // list p2mp-tunnel
                      }  // container p2mp-tunnels
    
                      container clone-joins {
                        when
                          "../type='ipv4unicast'";
                        description
                          "List of the join cloning configuration of multicast sources.";
                        list clone-join {
                          must
                            "../../fast-reroute='true'";
                          key "source-addr mask-len";
                          description
                            "Configure join cloning of multicast sources.";
                          leaf source-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Multicast source address.";
                          }
    
                          leaf mask-len {
                            type uint32 {
                              range "1..32";
                            }
                            description
                              "Mask length.";
                          }
    
                          leaf primary-join-src-addr {
                            type inet:ip-address-no-zone;
                            mandatory true;
                            description
                              "Cloned multicast source address.";
                          }
    
                          leaf backup-join-src-addr {
                            type inet:ip-address-no-zone;
                            mandatory true;
                            description
                              "Backup for a cloned multicast source address.";
                          }
                        }  // list clone-join
                      }  // container clone-joins
    
                      container clone-sources {
                        when
                          "../type='ipv4unicast'";
                        description
                          "List of the traffic cloning configuration of multicast sources.";
                        list clone-source {
                          key "source-addr mask-len";
                          description
                            "Configure traffic cloning of multicast sources.";
                          leaf source-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Multicast source address.";
                          }
    
                          leaf mask-len {
                            type uint32 {
                              range "1..32";
                            }
                            description
                              "Mask length.";
                          }
    
                          leaf primary-src-addr {
                            type inet:ip-address-no-zone;
                            mandatory true;
                            description
                              "Cloned multicast source address.";
                          }
    
                          leaf backup-src-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Backup for a cloned multicast source address.";
                          }
                        }  // list clone-source
                      }  // container clone-sources
    
                      container destination-addr-paths {
                        when
                          "../type='ipv4unicast'";
                        description
                          "List of paths configuration to destination addresses.";
                        list destination-addr-path {
                          key "destination-addr path-name mask-len";
                          max-elements 512;
                          description
                            "Configure paths to destination addresses.";
                          leaf destination-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Multicast source address.";
                          }
    
                          leaf path-name {
                            type leafref {
                              path "/mc:multicast/pim:rpf-vector-paths/pim:rpf-vector-path/pim:path-name";
                            }
                            description
                              "Path name.";
                          }
    
                          leaf mask-len {
                            type uint32 {
                              range "0..32";
                            }
                            description
                              "Mask length.";
                          }
                        }  // list destination-addr-path
                      }  // container destination-addr-paths
                    }  // list instance
                  }  // container instances
    
                  container interfaces {
                    description
                      "List of interface configurations.";
                    list interface {
                      key "type if-name";
                      description
                        "Configure PIM configuration on the interface.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf if-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        must
                          "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                        description
                          "Interface name.";
                      }
    
                      leaf sm-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable PIM on an interface.";
                      }
    
                      leaf dr-priority {
                        type uint32 {
                          range "0..4294967295";
                        }
                        default "1";
                        description
                          "DR priority. The greater the value, the higher the priority.";
                      }
    
                      leaf hello-interval {
                        type uint32 {
                          range "1..18000";
                        }
                        units "s";
                        default "30";
                        description
                          "Interval at which Hello messages are sent. It must be shorter than the timeout period of PIM neighbors.";
                      }
    
                      leaf hello-holdtime {
                        type uint16 {
                          range "1..65535";
                        }
                        units "s";
                        default "105";
                        description
                          "Timeout period during which a router waits for Hello messages sent from its PIM neighbors. It must be longer than the interval for PIM neighbors to send Hello messages.";
                      }
    
                      leaf hello-override {
                        type uint16 {
                          range "1..65535";
                        }
                        units "ms";
                        default "2500";
                        description
                          "Interval at which the prune action in a Hello message is overridden.";
                      }
    
                      leaf hello-lan-delay {
                        type uint16 {
                          range "1..32767";
                        }
                        units "ms";
                        default "500";
                        description
                          "Period from the time when a router receives a Prune message from a downstream device to the time when the router performs the prune action.";
                      }
    
                      leaf jp-timer-interval {
                        type uint32 {
                          range "1..18000";
                        }
                        units "s";
                        default "60";
                        description
                          "Interval at which Join/Prune messages are sent. The interval must be shorter than the holdtime of Join/Prune messages.";
                      }
    
                      leaf jp-holdtime {
                        type uint32 {
                          range "1..65535";
                        }
                        units "s";
                        default "210";
                        description
                          "Holdtime for Join/Prune messages sent by a router. The holdtime must be longer than the interval at which Join/Prune messages are sent.";
                      }
    
                      leaf jp-policy {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Policy for filtering Join/Prune messages.";
                      }
    
                      leaf jp-policy-ipv6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                        description
                          "Policy for filtering Join/Prune messages.";
                      }
    
                      leaf jp-asm-policy {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "not(../jp-policy) or not(../jp-asm-policy)";
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        description
                          "Policy for filtering ASM Join/Prune messages.";
                      }
    
                      leaf jp-asm-policy-ipv6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "not(../jp-policy-ipv6) or not(../jp-asm-policy-ipv6)";
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Policy for filtering ASM Join/Prune messages.";
                      }
    
                      leaf jp-ssm-policy {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "not(../jp-policy) or not(../jp-ssm-policy)";
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                        description
                          "Policy for filtering SSM Join/Prune messages.";
                      }
    
                      leaf jp-ssm-policy-ipv6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "not(../jp-policy-ipv6) or not(../jp-ssm-policy-ipv6)";
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                        description
                          "Policy for filtering SSM Join/Prune messages.";
                      }
    
                      leaf nbr-policy {
                        when
                          "../type='ipv4unicast'";
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        description
                          "Policy for filtering PIM neighbors.";
                      }
    
                      leaf nbr-policy-ipv6 {
                        when
                          "../type='ipv6unicast'";
                        type leafref {
                          path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                        }
                        must
                          "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                        description
                          "Policy for filtering PIM neighbors.";
                      }
    
                      leaf assert-holdtime {
                        type uint32 {
                          range "7..65535";
                        }
                        units "s";
                        default "180";
                        description
                          "Timeout period during which PIM interfaces wait to receive Assert messages from the forwarder.";
                      }
    
                      leaf require-gen-id {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable a PIM interface to deny Hello messages that do not carry generation IDs. By default, a PIM interface receives Hello messages that do not carry generation IDs.";
                      }
    
                      leaf bsr-boundary {
                        type bsr-boundary;
                        default "none";
                        description
                          "Boundary for a PIM domain. The value can be:
    0: no boundary; 1: bidirectional domain boundary; 2: inbound unidirectional domain boundary.";
                      }
    
                      leaf bfd-enable {
                        type boolean;
                        must
                          "../bfd-enable='false' or (../sm-enable='true' and ../is-silent='false')";
                        default "false";
                        description
                          "Enable/disable PIM BFD on an interface. By default, PIM BFD is not enabled on an interface.";
                      }
    
                      leaf bfd-min-tx {
                        ext:dynamic-default;
                        type uint32 {
                          range "3..1000";
                        }
                        description
                          "Minimum interval at which BFD messages are sent.";
                      }
    
                      leaf bfd-min-rx {
                        ext:dynamic-default;
                        type uint32 {
                          range "3..1000";
                        }
                        description
                          "Minimum interval at which BFD messages are received.";
                      }
    
                      leaf bfd-multiplier {
                        type uint32 {
                          range "3..50";
                        }
                        default "3";
                        description
                          "Local detect multiplier for BFD messages. The value is an integer ranging from 3 to 50. The default value is 3.";
                      }
    
                      leaf is-silent {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the PIM silent function on an interface. By default, PIM silent is disabled on an interface.";
                      }
    
                      leaf dr-swt-delay-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable DR switchover delay on an interface. By default, this function is disabled on an interface.";
                      }
    
                      leaf dr-swt-delay-interval {
                        when
                          "../dr-swt-delay-enable='true'";
                        type uint32 {
                          range "10..3600";
                        }
                        units "s";
                        default "10";
                        description
                          "Delay for a DR switchover. The setting is ineffective if the DR switchover delay function is not enabled.";
                      }
    
                      leaf ipsec-name {
                        type string {
                          length "1..15";
                        }
                        description
                          "Description of an SA.";
                      }
    
                      leaf ipsec-type {
                        when "../ipsec-name";
                        type ipsec-type;
                        default "for-all";
                        description
                          "Hello options based on the IPsec type.";
                      }
    
                      leaf mode {
                        ext:operation-exclude "update" {
                          description "The node cannot be modified.";
                        }
                        type pim-mode;
                        must
                          "../mode='sparse' or (../../../../../ni:name='_public_' and ../is-silent='false' and ../dr-swt-delay-enable='false')";
                        must
                          "not(../../interface[mode!=current()])";
                        default "sparse";
                        description
                          "PIM enable mode.";
                      }
    
                      leaf state-refresh-capable {
                        when
                          "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                        type boolean;
                        default "true";
                        description
                          "Enable/disable state-refresh.";
                      }
    
                      leaf graft-retry {
                        when
                          "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                        type uint32 {
                          range "1..65535";
                        }
                        default "3";
                        description
                          "The pim timer graft-retry command sets the interval for retransmitting Graft messages on an interface.";
                      }
    
                      leaf ignore-dr {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        must
                          "../ignore-dr='false' or (../is-silent='false' and ../dr-swt-delay-enable='false')";
                        default "false";
                        description
                          "Enable/disable the function of ignoring the DR state of PIM.";
                      }
    
                      leaf ignore-assert {
                        when
                          "../type='ipv4unicast'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function of ignoring the ASSERT state of PIM.";
                      }
    
                      leaf single-tag-fwd-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function of forwarding PIM Hello, Join/Prune, and Assert messages received on QinQ/dot1q termination sub-interfaces. This function can be enabled only on the sub-interfaces configured with single Q pair QinQ encapsulation or single VLAN dot1q encapsulation.";
                      }
    
                      container if-infos {
                        config false;
                        description
                          "Operational state of PIM interface.";
                        leaf pim-version {
                          type uint32 {
                            range "1..2";
                          }
                          description
                            "Version of the PIM running on an interface.";
                        }
    
                        leaf state {
                          type interface-state;
                          description
                            "Status of an interface: Up or Down.";
                        }
    
                        leaf nbr-count {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of PIM neighbors on an interface.";
                        }
    
                        leaf dr-priority {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "DR priority.";
                        }
    
                        leaf dr-addr {
                          type inet:ip-address-no-zone;
                          description
                            "DR address.";
                        }
    
                        leaf hello-interval {
                          type uint32 {
                            range "1..18000";
                          }
                          units "s";
                          description
                            "Interval at which Hello messages are sent.";
                        }
    
                        leaf hello-holdtime {
                          type uint16 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Timeout period during which a router waits to receive Hello messages from its neighbors.";
                        }
    
                        leaf assert-holdtime {
                          type uint32 {
                            range
                              "7..2147483647";
                          }
                          units "s";
                          description
                            "Timeout period during which PIM interfaces wait to receive Assert messages from the forwarder.";
                        }
    
                        leaf jp-interval {
                          type uint32 {
                            range
                              "1..2147483647";
                          }
                          units "s";
                          description
                            "Interval at which Join/Prune messages are sent.";
                        }
    
                        leaf jp-holdtime {
                          type uint32 {
                            range "1..65535";
                          }
                          units "s";
                          description
                            "Holdtime for Join/Prune messages sent by a router.";
                        }
    
                        leaf negotiated-msg-delay {
                          type uint16 {
                            range "1..32767";
                          }
                          units "ms";
                          description
                            "Negotiated delay of the messages transmitted on an interface.";
                        }
    
                        leaf negotiated-override-interval {
                          type uint16 {
                            range "1..65535";
                          }
                          units "ms";
                          description
                            "Negotiated overriding interval on an interface.";
                        }
    
                        leaf gen-id {
                          type pub-type:hex-binary;
                          description
                            "Generation ID on an interface.";
                        }
    
                        leaf non-dr-nbr-count {
                          type uint32;
                          description
                            "Number of non-DR neighbors.";
                        }
    
                        leaf non-landelay-nbr-count {
                          type uint32;
                          description
                            "Number of neighbors that do not use LAN delay.";
                        }
    
                        leaf non-join-attribute-nbr-sount {
                          type uint32;
                          description
                            "Number of neighbors that do not use the Join attribute.";
                        }
    
                        leaf join-attribute {
                          type boolean;
                          description
                            "Negotiated Join attribute of the messages transmitted on an interface.";
                        }
    
                        leaf offer-interval {
                          type uint32 {
                            range
                              "1..2147483647";
                          }
                          units "ms";
                          description
                            "Interval at which Offer messages are sent.";
                        }
    
                        leaf election-robust-count {
                          type uint32 {
                            range
                              "1..2147483647";
                          }
                          description
                            "DF election robustness.";
                        }
    
                        leaf backoff-interval {
                          type uint32 {
                            range
                              "1..2147483647";
                          }
                          units "s";
                          description
                            "Interval at which backoff messages are sent.";
                        }
    
                        leaf ipsec-name {
                          type string {
                            length "1..15";
                          }
                          description
                            "Description of an SA. The value is a string of 1 to 15 characters.";
                        }
    
                        leaf ipsec-type {
                          type ipsec-type;
                          description
                            "Hello options based on the IPsec type.";
                        }
    
                        leaf pim-mode {
                          type pim-mode;
                          description
                            "PIM mode.";
                        }
    
                        leaf state-refresh-enable {
                          type boolean;
                          description
                            "State-refresh enable.";
                        }
    
                        leaf state-refresh-interval {
                          type uint32 {
                            range "1..255";
                          }
                          units "s";
                          description
                            "The state-refresh-interval command sets the interval for sending PIM State-Refresh messages.";
                        }
    
                        leaf graft-retry {
                          type uint32 {
                            range "1..65535";
                          }
                          description
                            "The pim timer graft-retry command sets the interval for retransmitting Graft messages on an interface.";
                        }
    
                        leaf negotiated-state-refresh {
                          type boolean;
                          description
                            "Negotiation state-refresh capability.";
                        }
    
                        leaf ignore-dr-state {
                          type boolean;
                          description
                            "Ignores the DR state of PIM.";
                        }
    
                        leaf ignore-assert {
                          type boolean;
                          description
                            "Does not trigger the ASSERT state of PIM.";
                        }
    
                        leaf snooping-enable {
                          type boolean;
                          description
                            "Whether to enable Pim Snooping.";
                        }
                      }  // container if-infos
    
                      container nbrs {
                        config false;
                        description
                          "List of PIM neighbor information.";
                        list nbr {
                          key "nbr-addr";
                          description
                            "PIM neighbor state.";
                          leaf nbr-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Address of a PIM neighbor.";
                          }
    
                          leaf up-time {
                            type pub-type:time-tick;
                            description
                              "Time since the PIM neighbor relationship was established.";
                          }
    
                          leaf expire-time {
                            type pub-type:time-tick;
                            description
                              "Time when a PIM neighbor relationship expires.";
                          }
    
                          leaf dr-priority-existence {
                            type boolean;
                            description
                              "Whether a DR priority exists.";
                          }
    
                          leaf dr-priority {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "DR priority.";
                          }
    
                          leaf gen-id-existence {
                            type boolean;
                            description
                              "Whether a generation ID exists.";
                          }
    
                          leaf gen-id {
                            type pub-type:hex-binary;
                            description
                              "Random number of the PIM neighbor status.";
                          }
    
                          leaf holdtime {
                            type uint16 {
                              range "1..65535";
                            }
                            units "s";
                            description
                              "TTL of a PIM neighbor relationship. The value 65535 indicates that the PIM neighbor relationship never times out.";
                          }
    
                          leaf lan-delay-existence {
                            type boolean;
                            description
                              "Whether a LAN delay for transmitting Prune messages exists.";
                          }
    
                          leaf lan-delay {
                            type uint16 {
                              range "1..32767";
                            }
                            units "ms";
                            description
                              "LAN delay for transmitting Prune messages.";
                          }
    
                          leaf override-interval {
                            type uint32 {
                              range "1..65535";
                            }
                            units "ms";
                            description
                              "Interval for overriding the Prune action.";
                          }
    
                          leaf join-attribute {
                            type boolean;
                            description
                              "Whether the Join attribute function is enabled on a PIM neighbor.";
                          }
    
                          leaf bidir-enable {
                            type boolean;
                            description
                              "Whether BIDIR-PIM is enabled on the neighbor.";
                          }
    
                          leaf state-refresh-interval {
                            type uint32 {
                              range "1..255";
                            }
                            units "s";
                            description
                              "The state-refresh-interval command sets the interval for sending PIM State-Refresh messages.";
                          }
    
                          container second-addrs {
                            when
                              "../../../type='ipv6unicast'";
                            description
                              "List of secondary address information.";
                            list second-addr {
                              key "address";
                              description
                                "Secondary address state.";
                              leaf address {
                                type inet:ip-address-no-zone;
                                description
                                  "Secondary address of a PIM neighbor.";
                              }
                            }  // list second-addr
                          }  // container second-addrs
                        }  // list nbr
                      }  // container nbrs
    
                      container bfd-sessions {
                        config false;
                        description
                          "List of PIM BFD session information.";
                        list bfd-session {
                          key "nbr-addr";
                          description
                            "Operational state of a PIM BFD session.";
                          leaf nbr-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Address of a neighbor.";
                          }
    
                          leaf actual-minimum-tx-interval {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            units "ms";
                            description
                              "Actual minimum interval at which BFD packets are sent.";
                          }
    
                          leaf actual-minimum-rx-interval {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            units "ms";
                            description
                              "Actual minimum interval at which BFD packets are received.";
                          }
    
                          leaf actual-multiplier {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Actual local detection multiplier.";
                          }
    
                          leaf local-port {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Local discriminator of a BFD session.";
                          }
    
                          leaf remote-port {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Remote discriminator of a BFD session.";
                          }
    
                          leaf bfd-status {
                            type bfd-status;
                            description
                              "Status of a PIM BFD session.";
                          }
                        }  // list bfd-session
                      }  // container bfd-sessions
    
                      container invalid-messages {
                        config false;
                        description
                          "Statistics of invalid PIM messages on interfaces.";
                        container invalid-assert-cnt {
                          description
                            "Statistics of invalid assert messages.";
                          leaf destination-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages with invalid destination addresses.";
                          }
    
                          leaf ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages with invalid IP source addresses.";
                          }
    
                          leaf multicast-source {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages with invalid multicast source addresses.";
                          }
    
                          leaf multicast-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages with invalid multicast group addresses.";
                          }
    
                          leaf fault-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages with invalid lengths.";
                          }
                        }  // container invalid-assert-cnt
    
                        container invalid-bsr-cnt {
                          description
                            "Statistics of invalid BSR messages.";
                          leaf bad-payload {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages with invalid payloads.";
                          }
    
                          leaf fault-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages with invalid lengths.";
                          }
    
                          leaf invalid-scope-mask {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages with invalid scope masks.";
                          }
    
                          leaf invalid-multicast-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages with invalid multicast group addresses.";
                          }
    
                          leaf recv-by-non-c-bsr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages received by non-C-BSRs.";
                          }
    
                          leaf invalid-bsr-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages invalid BSR addresses.";
                          }
    
                          leaf fault-hash-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages with invalid hash lengths.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages with invalid IP source addresses.";
                          }
                        }  // container invalid-bsr-cnt
    
                        container invalid-hello-cnt {
                          description
                            "Statistics of invalid Hello messages.";
                          leaf invalid-addr-list {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "List of invalid addresses for Hello messages.";
                          }
    
                          leaf invalid-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid lengths.";
                          }
    
                          leaf invalid-holdtime-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid holdtime lengths.";
                          }
    
                          leaf invalid-lan-prune-delay-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid LAN prune delay lengths.";
                          }
    
                          leaf invalid-dr-priority-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid DR priority lengths.";
                          }
    
                          leaf invalid-gen-id-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid generation ID lengths.";
                          }
    
                          leaf invalid-destination-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid destination addresses.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages with invalid IP source addresses.";
                          }
                        }  // container invalid-hello-cnt
    
                        container invalid-join-prune-cnt {
                          description
                            "Statistics of invalid Join/Prune messages.";
                          leaf invalid-multicast-source {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages with invalid multicast source addresses.";
                          }
    
                          leaf invalid-multicast-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages with invalid multicast group addresses.";
                          }
    
                          leaf invalid-upstream-nbr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages with invalid Upstream neighbors.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages with invalid IP source addresses.";
                          }
    
                          leaf invalid-destination-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages with invalid destination addresses.";
                          }
    
                          leaf fault-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of messages with invalid lengths.";
                          }
                        }  // container invalid-join-prune-cnt
    
                        container invalid-graft-cnt {
                          when
                            "../../../../../../ni:name='_public_' and ../../type='ipv4unicast'";
                          description
                            "Statistics of invalid PIM Graft messages.";
                          leaf invalid-multicast-source {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages with invalid multicast source addresses.";
                          }
    
                          leaf invalid-multicast-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages with invalid multicast group addresses.";
                          }
    
                          leaf invalid-up-nbr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages with invalid upstream neighbor information.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages with invalid IP source addresses.";
                          }
    
                          leaf fault-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages with invalid lengths.";
                          }
                        }  // container invalid-graft-cnt
    
                        container invalid-graft-ack-cnt {
                          when
                            "../../../../../../ni:name='_public_' and ../../type='ipv4unicast'";
                          description
                            "Statistics of invalid PIM GraftAck messages.";
                          leaf invalid-multicast-source {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages with invalid multicast source addresses.";
                          }
    
                          leaf invalid-multicast-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages with invalid multicast group addresses.";
                          }
    
                          leaf invalid-up-nbr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages with invalid upstream neighbor information.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages with invalid IP source addresses.";
                          }
    
                          leaf fault-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages with invalid lengths.";
                          }
                        }  // container invalid-graft-ack-cnt
    
                        container invalid-state-refresh-cnt {
                          when
                            "../../../../../../ni:name='_public_' and ../../type='ipv4unicast'";
                          description
                            "Statistics of invalid PIM State-Refresh messages.";
                          leaf invalid-multicast-source {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of State-Refresh messages with invalid multicast source addresses.";
                          }
    
                          leaf invalid-multicast-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of State-Refresh messages with invalid multicast group addresses.";
                          }
    
                          leaf invalid-originator {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of State-Refresh messages with invalid Originator source addresses.";
                          }
    
                          leaf fault-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of State-Refresh messages with invalid lengths.";
                          }
                        }  // container invalid-state-refresh-cnt
    
                        container invalid-auto-rp-announce-cnt {
                          when
                            "../../type='ipv4unicast'";
                          description
                            "Statistics of invalid PIM Auto-RP Announcement messages.";
                          leaf invalid-destination-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages with invalid destination addresses.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages with invalid source IP addresses.";
                          }
    
                          leaf invalid-ttl {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages with invalid TTL Value.";
                          }
    
                          leaf invalid-source-port {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages with invalid source port.";
                          }
                        }  // container invalid-auto-rp-announce-cnt
    
                        container invalid-auto-rp-discovery-cnt {
                          when
                            "../../type='ipv4unicast'";
                          description
                            "Statistics of invalid PIM Auto-RP Discovery messages.";
                          leaf invalid-length {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages with invalid lengths.";
                          }
    
                          leaf invalid-rp {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages with invalid RP.";
                          }
    
                          leaf invalid-ip-source-addr {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages with invalid source IP addresses.";
                          }
    
                          leaf invalid-group {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages with invalid Group addresses.";
                          }
    
                          leaf invalid-ttl {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages with invalid TTL Value.";
                          }
    
                          leaf invalid-source-port {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages with invalid source port.";
                          }
                        }  // container invalid-auto-rp-discovery-cnt
                      }  // container invalid-messages
                    }  // list interface
                  }  // container interfaces
    
                  container message-statistics {
                    config false;
                    description
                      "List of control messages Statistics for a VPN instance.";
                    list message-statistic {
                      key "type";
                      description
                        "Statistics of control messages for a VPN instance.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf register-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Register messages received.";
                      }
    
                      leaf register-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Register messages sent.";
                      }
    
                      leaf invalid-register-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Register messages received.";
                      }
    
                      leaf filtered-register-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Register messages filtered.";
                      }
    
                      leaf register-stop-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Register-Stop messages received.";
                      }
    
                      leaf register-stop-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Register-Stop messages sent.";
                      }
    
                      leaf invalid-register-stop-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Register-Stop messages received.";
                      }
    
                      leaf filtered-register-stop-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Register-Stop messages filtered.";
                      }
    
                      leaf probe-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of null Register messages received.";
                      }
    
                      leaf probe-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of the null Register messages sent.";
                      }
    
                      leaf invalid-probe-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of the invalid null Register messages.";
                      }
    
                      leaf filtered-probe-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of null Register messages filtered.";
                      }
    
                      leaf c-rp-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of C-RP messages received.";
                      }
    
                      leaf c-rp-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of C-RP messages sent.";
                      }
    
                      leaf invalid-c-rp-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid C-RP messages.";
                      }
    
                      leaf filtered-c-rp-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of C-RP messages filtered.";
                      }
    
                      leaf anycast-rp-register-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Anycast-RP Register messages received.";
                      }
    
                      leaf anycast-rp-register-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Anycast-RP Register messages sent.";
                      }
    
                      leaf invalid-anycast-rp-register-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Anycast-RP Register messages received.";
                      }
    
                      leaf filtered-anycast-rp-register-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Anycast-RP Register messages filtered.";
                      }
    
                      leaf anycast-rp-probe-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Anycast-RP null Register messages received.";
                      }
    
                      leaf anycast-rp-probe-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Anycast-RP null Register messages sent.";
                      }
    
                      leaf invalid-anycast-rp-probe-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Anycast-RP null Register messages received.";
                      }
    
                      leaf filtered-anycast-rp-probe-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Anycast-RP null Register messages filtered.";
                      }
    
                      container if-message-statistics {
                        description
                          "List of control message statistics for an interface.";
                        list if-message-statistic {
                          key "if-name";
                          description
                            "Statistics of control messages for an instance.";
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Name of the interface to which the control message statistics belong.";
                          }
    
                          leaf assert-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages received on the current interface.";
                          }
    
                          leaf assert-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages sent on the current interface.";
                          }
    
                          leaf invalid-assert-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Assert messages.";
                          }
    
                          leaf filtered-assert-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Assert messages filtered on the current interface.";
                          }
    
                          leaf hello-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages received on the current interface.";
                          }
    
                          leaf hello-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages sent on the current interface.";
                          }
    
                          leaf invalid-hello-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Hello messages.";
                          }
    
                          leaf filtered-hello-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Hello messages filtered on the current interface.";
                          }
    
                          leaf jp-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages received on the current interface.";
                          }
    
                          leaf jp-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages sent on the current interface.";
                          }
    
                          leaf invalid-jp-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Join/Prune messages.";
                          }
    
                          leaf filtered-jp-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Join/Prune messages filtered on the current interface.";
                          }
    
                          leaf bsr-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages received on the current interface.";
                          }
    
                          leaf bsr-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages sent on the current interface.";
                          }
    
                          leaf invalid-bsr-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid BSR messages.";
                          }
    
                          leaf filtered-bsr-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of BSR messages filtered on the current interface.";
                          }
    
                          leaf offer-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Offer messages received on the current interface.";
                          }
    
                          leaf offer-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Offer messages sent on the current interface.";
                          }
    
                          leaf invalid-offer-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Offer messages.";
                          }
    
                          leaf filtered-offer-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Offer messages filtered on the current interface.";
                          }
    
                          leaf backoff-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Backoff messages received on the current interface.";
                          }
    
                          leaf backoff-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Backoff messages sent on the current interface.";
                          }
    
                          leaf invalid-backoff-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid backoff messages.";
                          }
    
                          leaf filtered-backoff-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Backoff messages filtered on the current interface.";
                          }
    
                          leaf win-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Win messages received on the current interface.";
                          }
    
                          leaf win-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Win messages sent on the current interface.";
                          }
    
                          leaf invalid-win-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Win messages.";
                          }
    
                          leaf filtered-win-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Win messages filtered on the current interface.";
                          }
    
                          leaf pass-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Pass messages received on the current interface.";
                          }
    
                          leaf pass-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Pass messages sent on the current interface.";
                          }
    
                          leaf invalid-pass-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Pass messages.";
                          }
    
                          leaf filtered-pass-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Pass messages filtered on the current interface.";
                          }
    
                          leaf graft-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages received on the current interface.";
                          }
    
                          leaf graft-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages sent on the current interface.";
                          }
    
                          leaf invalid-graft-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Graft messages.";
                          }
    
                          leaf filtered-graft-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages filtered on the current interface.";
                          }
    
                          leaf graft-ack-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Graft messages received on the current interface.";
                          }
    
                          leaf graft-ack-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages sent on the current interface.";
                          }
    
                          leaf invalid-graft-ack-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid GraftAck messages.";
                          }
    
                          leaf filtered-graft-ack-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages filtered on the current interface.";
                          }
    
                          leaf state-refresh-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages received on the current interface.";
                          }
    
                          leaf state-refresh-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of GraftAck messages sent on the current interface.";
                          }
    
                          leaf invalid-state-refresh-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid State-Refresh messages.";
                          }
    
                          leaf filtered-state-refresh-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of State-Refresh messages filtered on the current interface.";
                          }
    
                          leaf announce-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages received on the current interface.";
                          }
    
                          leaf announce-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages sent on the current interface.";
                          }
    
                          leaf invalid-announce-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Auto-RP Announcement messages.";
                          }
    
                          leaf filtered-announce-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Announcement messages filtered on the current interface.";
                          }
    
                          leaf discovery-recv-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages received on the current interface.";
                          }
    
                          leaf discovery-send-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages sent on the current interface.";
                          }
    
                          leaf invalid-discovery-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of invalid Auto-RP Discovery messages.";
                          }
    
                          leaf filtered-discovery-num {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "Number of Auto-RP Discovery messages filtered on the current interface.";
                          }
                        }  // list if-message-statistic
                      }  // container if-message-statistics
                    }  // list message-statistic
                  }  // container message-statistics
    
                  container routings {
                    config false;
                    description
                      "List of PIM routing information.";
                    list routing {
                      key "type src-addr grp-addr";
                      description
                        "PIM routing state.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf src-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast source address.";
                      }
    
                      leaf grp-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast group address.";
                      }
    
                      leaf protocol {
                        type sg-mode;
                        description
                          "PIM protocol type.";
                      }
    
                      leaf rp-mode-type {
                        type rp-type;
                        description "RP type.";
                      }
    
                      leaf rp-addr {
                        type inet:ip-address-no-zone;
                        description
                          "RP address.";
                      }
    
                      leaf rp-is-local-addr {
                        type boolean;
                        description
                          "Whether the RP address is a local address.";
                      }
    
                      leaf dg-flag {
                        type string {
                          length "0..49";
                        }
                        description
                          "Flag of the PIM (S, G) entry.";
                      }
    
                      leaf sg-uptime {
                        type pub-type:time-tick;
                        description
                          "Time since the PIM (S, G) entry was generated.";
                      }
    
                      leaf inbound-interface {
                        type pub-type:if-name;
                        description
                          "Inbound interface of the (S, G) entry.";
                      }
    
                      leaf src-vrf-name {
                        type pub-type:vrf-name;
                        description
                          "RPF Source VPN Instance.";
                      }
    
                      leaf rpf-vector-rd {
                        type string {
                          length "3..21";
                        }
                        description
                          "RD of the RPF vector.";
                      }
    
                      leaf rpf-vector-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Address of the RPF vector.";
                      }
    
                      leaf elected-vector-rd {
                        type string {
                          length "3..21";
                        }
                        description
                          "RD of the elected vector.";
                      }
    
                      leaf elected-vector-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Address of elected Vector.";
                      }
    
                      leaf up-nbr-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Upstream neighbor address of the (S, G) entry.";
                      }
    
                      leaf rpf-addr {
                        type inet:ip-address-no-zone;
                        description
                          "RPF address of the (S, G) entry.";
                      }
    
                      leaf reference-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Reference address of the (S, G) entry.";
                      }
    
                      leaf rpf-mask-len {
                        type uint32 {
                          range "0..32";
                        }
                        description
                          "Mask length of an RPF route.";
                      }
    
                      leaf rpf-metric {
                        type uint32 {
                          range "0..65535";
                        }
                        description
                          "Metric of an RPF route.";
                      }
    
                      leaf rpf-metric-priority {
                        type uint32 {
                          range "0..65535";
                        }
                        description
                          "Metric priority of an RPF route.";
                      }
    
                      leaf backup-inbound-if {
                        type string {
                          length "0..48";
                        }
                        description
                          "Backup inbound interface of the (S, G) entry.";
                      }
    
                      leaf backup-nbr-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Backup upstream neighbor address of the (S, G) entry.";
                      }
    
                      leaf backup-rpf-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Backup RPF address of the (S, G) entry.";
                      }
    
                      leaf up-status {
                        type sg-up-state;
                        description
                          "Upstream Up status of the (S, G) entry.";
                      }
    
                      leaf upstream-expiration-time {
                        type pub-type:time-tick;
                        description
                          "Wait time before Join messages are sent to the upstream interface.";
                      }
    
                      leaf rpt-status {
                        type rpt-up-state;
                        description
                          "RPT status.";
                      }
    
                      leaf rpt-timeout-period {
                        type pub-type:time-tick;
                        description
                          "RPT timeout period.";
                      }
    
                      leaf registration-status {
                        type dr-register-state;
                        description
                          "Registration status.";
                      }
    
                      leaf registration-stop-time {
                        type pub-type:time-tick;
                        description
                          "Time when the registration stops.";
                      }
    
                      leaf graft-retry-expiration-time {
                        type pub-type:time-tick;
                        description
                          "Graft retry expiration time of the (S, G) entry.";
                      }
    
                      leaf prune-limit-expiration-time {
                        type pub-type:time-tick;
                        description
                          "Prune limit expiration time of the (S, G) entry.";
                      }
    
                      leaf override-expiration-time {
                        type pub-type:time-tick;
                        description
                          "Override expiration time of the (S, G) entry.";
                      }
    
                      leaf backup-upstream-expiration-time {
                        type pub-type:time-tick;
                        description
                          "Wait time before Join messages are sent to the backup upstream interface.";
                      }
    
                      leaf user-id {
                        type uint32;
                        description "User ID.";
                      }
    
                      leaf original-src-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Original source information.";
                      }
    
                      container downstreams {
                        description
                          "List of downstream information.";
                        list downstream {
                          key "if-name";
                          description
                            "Downstream statistics.";
                          leaf if-name {
                            type string {
                              length "0..48";
                            }
                            description
                              "Name of the downstream interface.";
                          }
    
                          leaf protocol-type {
                            type string {
                              length "0..48";
                            }
                            description
                              "Type of PIM protocol configured on the downstream interface.";
                          }
    
                          leaf up-time {
                            type pub-type:time-tick;
                            description
                              "Time since the interface was added to the downstream interface list.";
                          }
    
                          leaf timeout-period {
                            type pub-type:time-tick {
                            }
                            description
                              "Timeout period of the downstream interface.";
                          }
    
                          leaf dr-status {
                            type boolean;
                            description
                              "DR status.";
                          }
    
                          leaf downstream {
                            type sg-down-state;
                            description
                              "Downstream status.";
                          }
    
                          leaf downstream-ppt {
                            type pub-type:time-tick;
                            description
                              "Timeout period of the downstream PPT.";
                          }
    
                          leaf assert-state-machine {
                            type assert-state;
                            description
                              "Assert state machine.";
                          }
    
                          leaf assert-timeout-period {
                            type pub-type:time-tick;
                            description
                              "Assert timeout period.";
                          }
    
                          leaf assert-winner-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Address of an assert winner.";
                          }
    
                          leaf assert-winner-metric {
                            type uint32 {
                              range "0..65535";
                            }
                            description
                              "Metric of an assert winner.";
                          }
    
                          leaf assert-winner-metric-priority {
                            type uint32 {
                              range "0..65535";
                            }
                            description
                              "Metric priority of an assert winner.";
                          }
    
                          leaf local-receiver-exist {
                            type boolean;
                            description
                              "Whether local receivers exist.";
                          }
    
                          leaf rpt-status {
                            type sg-rpt-ds-state;
                            description
                              "RPT status.";
                          }
    
                          leaf rpt-state-machine-ppt {
                            type pub-type:time-tick;
                            description
                              "PPT time of the RPT state machine.";
                          }
    
                          leaf rpt-timeout-period {
                            type pub-type:time-tick;
                            description
                              "RPT timeout period.";
                          }
    
                          leaf vector-attribute-status {
                            type rt-attribute-state;
                            description
                              "Downstream vector attribute state.";
                          }
    
                          leaf elected-vector {
                            type inet:ip-address-no-zone;
                            description
                              "Downstream elected vector.";
                          }
    
                          leaf elected-vector-nbr {
                            type inet:ip-address-no-zone;
                            description
                              "Downstream elected vector neighbor address.";
                          }
    
                          leaf vector-num {
                            type uint32 {
                              range "0..65535";
                            }
                            description
                              "Number of vectors.";
                          }
    
                          leaf ignore-dr-status {
                            type boolean;
                            default "false";
                            description
                              "Ignores DR status.";
                          }
    
                          container vectors {
                            description
                              "List of vector state.";
                            list vector {
                              key "nbr-addr vector-addr";
                              description
                                "Vector state.";
                              leaf nbr-addr {
                                type inet:ip-address-no-zone;
                                description
                                  "Neighbor Address.";
                              }
    
                              leaf vector-addr {
                                type inet:ip-address-no-zone;
                                description
                                  "Address of a neighbor's elected vector.";
                              }
    
                              leaf vector-rd {
                                type string {
                                  length "3..21";
                                }
                                description
                                  "Vector RDs of neighbors.";
                              }
    
                              leaf timeout-period {
                                type pub-type:time-tick;
                                description
                                  "Timeout period of the vector.";
                              }
    
                              container vector-hop-addrs {
                                description
                                  "List of hop addresses of vectors.";
                                list vector-hop-addr {
                                  key "vector-addr";
                                  description
                                    "Statistics of hop address.";
                                  leaf vector-addr {
                                    type inet:ip-address-no-zone;
                                    description
                                      "Each hop address of a vector.";
                                  }
    
                                  leaf sequence-num {
                                    type uint32;
                                    description
                                      "Sequence number.";
                                  }
                                }  // list vector-hop-addr
                              }  // container vector-hop-addrs
                            }  // list vector
                          }  // container vectors
                        }  // list downstream
                      }  // container downstreams
    
                      container recv-vrfs {
                        description
                          "List of receiver VPN instance information.";
                        list recv-vrf {
                          key "vrf-name";
                          description
                            "Statistics of receiver VPN instance.";
                          leaf vrf-name {
                            type pub-type:vrf-name;
                            description
                              "Receiver VPN instance.";
                          }
                        }  // list recv-vrf
                      }  // container recv-vrfs
                    }  // list routing
                  }  // container routings
    
                  container claim-routings {
                    config false;
                    description
                      "List of claim routing state.";
                    list claim-routing {
                      key "type destination-addr if-name rpf-neighbour";
                      description
                        "Claim routing state.";
                      leaf type {
                        type addr-family-type;
                        description
                          "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                      }
    
                      leaf destination-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Destination address.";
                      }
    
                      leaf if-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an RPF interface.";
                      }
    
                      leaf rpf-neighbour {
                        type inet:ip-address-no-zone;
                        description
                          "RPF neighbor.";
                      }
    
                      leaf referenced-route {
                        type inet:ip-address-no-zone;
                        description
                          "Referenced route.";
                      }
    
                      leaf referenced-route-mask {
                        type uint32;
                        description
                          "Mask of the referenced route.";
                      }
    
                      leaf referenced-route-type {
                        type rpf-route-type;
                        description
                          "Type of the referenced route.";
                      }
    
                      leaf global-administrator {
                        type inet:ip-address-no-zone;
                        description
                          "Global Administrator field.";
                      }
    
                      leaf local-administrator {
                        type uint32;
                        description
                          "Local Administrator field.";
                      }
    
                      leaf as-number {
                        type uint32;
                        description "AS number.";
                      }
    
                      leaf backup-rpf-nbr {
                        type inet:ip-address-no-zone;
                        description
                          "Back RPF neighbor.";
                      }
    
                      leaf backup-global-administrator {
                        type inet:ip-address-no-zone;
                        description
                          "Back Global Administrator field.";
                      }
    
                      leaf backup-local-administrator {
                        type uint32;
                        description
                          "Back Local Administrator field.";
                      }
    
                      leaf backup-as-number {
                        type uint32;
                        description
                          "Back as number.";
                      }
    
                      container claim-routing-entrys {
                        description
                          "List of claim routing entries.";
                        list claim-routing-entry {
                          key "src-addr grp-addr";
                          description
                            "Operational data of a claim routing entry.";
                          leaf src-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Multicast source address.";
                          }
    
                          leaf grp-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Multicast group address.";
                          }
                        }  // list claim-routing-entry
                      }  // container claim-routing-entrys
                    }  // list claim-routing
                  }  // container claim-routings
    
                  container invalid-messages {
                    config false;
                    description
                      "Statistics of invalid PIM messages.";
                    container general-cnts {
                      description
                        "List of statistics of invalid general PIM messages.";
                      list general-cnt {
                        key "type";
                        description
                          "Statistics of invalid general PIM messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-version {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Invalid version.";
                        }
    
                        leaf invalid-type {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Invalid type.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Invalid message length.";
                        }
    
                        leaf bad-checksum {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Invalid message checksum.";
                        }
                      }  // list general-cnt
                    }  // container general-cnts
    
                    container invalid-register-cnts {
                      description
                        "List of statistics of invalid PIM Register messages.";
                      list invalid-register-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Register messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Register messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Register messages with invalid multicast group addresses.";
                        }
    
                        leaf invalid-destination-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Register messages with invalid destination addresses.";
                        }
                      }  // list invalid-register-cnt
                    }  // container invalid-register-cnts
    
                    container invalid-register-stop-cnts {
                      description
                        "List of statistics of invalid PIM Register-Stop messages.";
                      list invalid-register-stop-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Register-Stop messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Register-Stop messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Register-Stop messages with invalid multicast group addresses.";
                        }
    
                        leaf invalid-destination-sddr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Register-Stop messages with invalid destination addresses.";
                        }
    
                        leaf source-addr-not-rp {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of PIM messages in which the source addresses are not the RP address.";
                        }
                      }  // list invalid-register-stop-cnt
                    }  // container invalid-register-stop-cnts
    
                    container invalid-c-rp-cnts {
                      description
                        "List of statistics of invalid PIM C-RP messages.";
                      list invalid-c-rp-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM C-RP messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-destination-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of C-RP messages with invalid destination addresses.";
                        }
    
                        leaf invalid-group-address {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of C-RP messages with invalid group addresses.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of C-RP messages with invalid lengths.";
                        }
    
                        leaf adv-fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of C-RP messages with invalid Adv field lengths.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of C-RP messages with invalid multicast group addresses.";
                        }
                      }  // list invalid-c-rp-cnt
                    }  // container invalid-c-rp-cnts
    
                    container invalid-assert-cnts {
                      description
                        "List of statistics of invalid PIM Assert messages.";
                      list invalid-assert-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Assert messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-destination-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Assert messages with invalid destination addresses.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Assert messages with invalid IP source addresses.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Assert messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Assert messages with invalid multicast group addresses.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Assert messages with invalid lengths.";
                        }
                      }  // list invalid-assert-cnt
                    }  // container invalid-assert-cnts
    
                    container invalid-bsr-cnts {
                      description
                        "List of statistics of invalid PIM BSR messages.";
                      list invalid-bsr-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM BSR messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf bad-payload {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages with invalid payloads.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages with invalid lengths.";
                        }
    
                        leaf invalid-scope-mask {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages with invalid scope masks.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages with invalid multicast group addresses.";
                        }
    
                        leaf recv-by-non-c-bsr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages received by non-C-BSRs.";
                        }
    
                        leaf invalid-bsr-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages invalid BSR addresses.";
                        }
    
                        leaf fault-hash-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages with invalid hash lengths.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of BSR messages with invalid IP source addresses.";
                        }
                      }  // list invalid-bsr-cnt
                    }  // container invalid-bsr-cnts
    
                    container invalid-hello-cnts {
                      description
                        "List of statistics of invalid PIM Hello messages.";
                      list invalid-hello-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Hello messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-addr-list {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "List of invalid addresses for Hello messages.";
                        }
    
                        leaf invalid-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid lengths.";
                        }
    
                        leaf invalid-holdtime-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid holdtime lengths.";
                        }
    
                        leaf invalid-lan-prune-delay-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid LAN prune delay lengths.";
                        }
    
                        leaf invalid-dr-priority-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid DR priority lengths.";
                        }
    
                        leaf invalid-gen-id-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid generation ID lengths.";
                        }
    
                        leaf invalid-destination-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid destination addresses.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Hello messages with invalid IP source addresses.";
                        }
                      }  // list invalid-hello-cnt
                    }  // container invalid-hello-cnts
    
                    container invalid-join-prune-cnts {
                      description
                        "List of statistics of invalid PIM Join/Prune messages.";
                      list invalid-join-prune-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Join/Prune messages.";
                        leaf type {
                          type addr-family-type;
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Join/Prune messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Join/Prune messages with invalid multicast group addresses.";
                        }
    
                        leaf invalid-upstream-nbr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Join/Prune messages with invalid Upstream neighbors.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Join/Prune messages with invalid IP source addresses.";
                        }
    
                        leaf invalid-destination-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Join/Prune messages with invalid destination addresses.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of messages with invalid lengths.";
                        }
                      }  // list invalid-join-prune-cnt
                    }  // container invalid-join-prune-cnts
    
                    container invalid-graft-cnts {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "List of statistics of invalid PIM Graft messages.";
                      list invalid-graft-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Graft messages.";
                        leaf type {
                          type addr-family-type;
                          must
                            "../type='ipv4unicast'";
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Graft messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Graft messages with invalid multicast group addresses.";
                        }
    
                        leaf invalid-up-nbr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Graft messages with invalid upstream neighbor information.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Graft messages with invalid IP source addresses.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Graft messages with invalid lengths.";
                        }
                      }  // list invalid-graft-cnt
                    }  // container invalid-graft-cnts
    
                    container invalid-graft-ack-cnts {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "List of statistics of invalid PIM GraftAck messages.";
                      list invalid-graft-ack-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM GraftAck messages.";
                        leaf type {
                          type addr-family-type;
                          must
                            "../type='ipv4unicast'";
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of GraftAck messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of GraftAck messages with invalid multicast group addresses.";
                        }
    
                        leaf invalid-up-nbr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of GraftAck messages with invalid upstream neighbor information.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of GraftAck messages with invalid IP source addresses.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of GraftAck messages with invalid lengths.";
                        }
                      }  // list invalid-graft-ack-cnt
                    }  // container invalid-graft-ack-cnts
    
                    container invalid-state-refresh-cnts {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "List of statistics of invalid PIM State-Refresh messages.";
                      list invalid-state-refresh-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM State-Refresh messages.";
                        leaf type {
                          type addr-family-type;
                          must
                            "../type='ipv4unicast'";
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-multicast-source {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of State-Refresh messages with invalid multicast source addresses.";
                        }
    
                        leaf invalid-multicast-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of State-Refresh messages with invalid multicast group addresses.";
                        }
    
                        leaf invalid-originator {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of State-Refresh messages with invalid Originator source addresses.";
                        }
    
                        leaf fault-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of State-Refresh messages with invalid lengths.";
                        }
                      }  // list invalid-state-refresh-cnt
                    }  // container invalid-state-refresh-cnts
    
                    container invalid-auto-rp-announce-cnts {
                      description
                        "List of statistics of invalid PIM Auto-RP Announcement messages.";
                      list invalid-auto-rp-announce-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Auto-RP Announcement messages.";
                        leaf type {
                          type addr-family-type;
                          must
                            "../type='ipv4unicast'";
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-destination-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Announcement messages with invalid destination addresses.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Announcement messages with invalid source IP addresses.";
                        }
    
                        leaf invalid-ttl {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Announcement messages with invalid TTL Value.";
                        }
    
                        leaf invalid-source-port {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Announcement messages with invalid source port.";
                        }
                      }  // list invalid-auto-rp-announce-cnt
                    }  // container invalid-auto-rp-announce-cnts
    
                    container invalid-auto-rp-discovery-cnts {
                      description
                        "List of statistics of invalid PIM Auto-RP Discovery messages.";
                      list invalid-auto-rp-discovery-cnt {
                        key "type";
                        description
                          "Statistics of invalid PIM Auto-RP Discovery messages.";
                        leaf type {
                          type addr-family-type;
                          must
                            "../type='ipv4unicast'";
                          description
                            "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                        }
    
                        leaf invalid-length {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Discovery messages with invalid lengths.";
                        }
    
                        leaf invalid-rp {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Discovery messages with invalid RP.";
                        }
    
                        leaf invalid-ip-source-addr {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Discovery messages with invalid source IP addresses.";
                        }
    
                        leaf invalid-group {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Discovery messages with invalid Group addresses.";
                        }
    
                        leaf invalid-ttl {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Discovery messages with invalid TTL Value.";
                        }
    
                        leaf invalid-source-port {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of Auto-RP Discovery messages with invalid source port.";
                        }
                      }  // list invalid-auto-rp-discovery-cnt
                    }  // container invalid-auto-rp-discovery-cnts
                  }  // container invalid-messages
                }  // container protocol
              }  // container pim
    
              container rip {
                when
                  "../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                description
                  "Configure RIP component.";
                container processs {
                  description
                    "List of RIP process.";
                  list process {
                    key "id";
                    description
                      "Configure RIP process.";
                    leaf id {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Specify a RIP process ID.";
                    }
    
                    leaf description {
                      type string {
                        length "1..80";
                      }
                      description
                        "Specify a description for a RIP process. The description is used to identify a RIP process. You can configure a meaningful name, which helps understanding the configuration.";
                    }
    
                    leaf verify-source {
                      type rip-enable-flag;
                      default "enable";
                      description
                        "You can enable a device to validate the source IP address of the incoming RIP route updates. For all received RIP updates, you can check whether the originator and the receiver belong to the same subnet.
    It is recommended not to disable this feature in normal circumstances.";
                    }
    
                    leaf threshold-percent {
                      type uint8 {
                        range "0..100";
                      }
                      default "80";
                      description
                        "Specify the percentage of the maximum number of routes after which an alarm is generated. Once RIP learns the maximum number of routes, it will stop learning any new route till the number of routes falls to a value below the threshold-value percentage of the maximum number.";
                    }
    
                    leaf summary {
                      type rip-summ-enable-flag;
                      default "enable";
                      description
                        "You can enable RIP summarization.
    When RIP summarization is enabled, the router summarizes subnet routes to a classful route. The summarization is invalid when the split horizon or poison reverse feature is enabled. Therefore, when the summarized routes are sent to the natural network segment.";
                    }
    
                    leaf host-route {
                      type rip-enable-flag;
                      default "enable";
                      description
                        "In RIPv1 advertisements, there is no subnet information associated with the routes. When routes are learned through RIPv1 packets, the subnet mask is used as follows:
    1. Classful subnet mask, when the major net of the learned route and that of the received interface do not match.
    2. Interface's subnet mask, when the major net of the route matches that of the interface.
    In the second case, when the major net matches, and there is some non-zero part in the route advertisement after applying the interface mask, it will use a host-route mask when the host-route is enabled.";
                    }
    
                    leaf check-zero {
                      type rip-enable-flag;
                      default "enable";
                      description
                        "In general, RIPv1-enabled routers will reject all the packets containing non-zero bits in the MBZ fields of the RIP packets.
    This configuration is applied only for RIPv1 packets. If the version applicable on the interface is RIP version 2 (RIPv2), then the packets are not checked for MBZ fields.
    If the version is V2-broadcast, then the configuration is applied to any received version 1 packets. And if the version is V1, then the configuration is applied to received RIPv1 packets.";
                    }
    
                    leaf version {
                      type uint8 {
                        range "1..2";
                      }
                      description
                        "If the configured version is 1, only RIPv1 packets will be sent and received, and RIPv2 packets will be rejected.
    If the configured version is 2, only RIPv2 multicast packets will be sent, and only RIPv2 (multicast/broadcast) packets will be received.
    If the RIP version is changed from version 1 to version 2, or from version 2 to version 1, then all the routes will be deleted from the routing table.";
                    }
    
                    leaf mib-binding {
                      type rip-enable-flag;
                      default "disable";
                      description
                        "You can run the RIP mib binding command to set binding between the MIB and RIP process ID. All configurations that will be done through SNMP manager will be reflected in this RIP process.
    In the RIP MIB table, there is no way to specify a RIP process ID. Hence the configurations that are done using SNMP, cannot be resolved to the intended process. To facilitate this, run the rip mib-binding command.";
                    }
    
                    leaf maximum-load-balancing {
                      ext:dynamic-default;
                      type uint8 {
                        range "1..128";
                      }
                      description
                        "You can configure the maximum number of equal cost routes for load balancing. This does not limit the number of equal-cost routes that RIP can learn. RIP will store all the received ECMP routes.
    The default value of the number of equal-cost routes may vary with products and licenses. You can adjust the default value by purchasing a new license. If the value is configured twice, the second one overrides the first one.";
                    }
    
                    leaf zero-metric-check {
                      type rip-enable-flag;
                      default "enable";
                      description
                        "Some vendors support the metric of a route as zero. This means a route update packet from other vendors' routers can contain routes with metric field value as zero.";
                    }
    
                    leaf default-cost {
                      type uint8 {
                        range "0..15";
                      }
                      default "0";
                      description
                        "The default cost is used when RIP imports routes from other routing protocols, and no cost is specified through a route-policy or the cost parameter in the import-route command.
    Triggered update will be sent if the cost of any of the imported route changes due to the default cost configuration.";
                    }
    
                    leaf silent-interface-all {
                      type rip-enable-flag;
                      default "disable";
                      description
                        "Specify all the RIP enabled interfaces in the process as silent interfaces. A silent RIP interface can receive updates but cannot send any update. If on a silent interface, unicast neighbors are configured, then updates can be sent to those unicast neighbors. A request received from a configured unicast neighbor that falls on a silent interface will be responded with a response message.";
                    }
    
                    leaf max-routes {
                      type uint32 {
                        range "1..300000";
                      }
                      default "150000";
                      description
                        "A RIP process must have been created before you configure the maximum number of routes.
    On reaching the maximum number of routes, RIP cannot add any further routes into the routing table. By configuring a threshold, the user can get a warning message indicating that the maximum number of routes is being added. On reaching the maximum number of routes even if routes are deleted, no new routes can be added to RIP until the number of routes drops to the threshold value.
    The upper limit on the number of routes that RIP can handle is to ensure that RIP performs within its memory constraints and meets its performance requirements.";
                    }
    
                    container networks {
                      description
                        "List of networks for each RIP process.";
                      list network {
                        key "address";
                        description
                          "Configure the network.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Specified address must be major net address without any subnets.";
                        }
                      }  // list network
                    }  // container networks
    
                    container filter-imports {
                      description
                        "List of the filter policies. There can be multiple filter policies for each RIP process.";
                      list filter-import {
                        key "interface";
                        description
                          "Configure the filter policies.";
                        leaf interface {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Specify the name of the interface on which the imported routes are filtered. The specified interface must be bound to the process for which the filter-policy is configured.";
                        }
    
                        choice policy-type {
                          mandatory true;
                          description
                            "Mode of the policy used for import route.";
                          case ip-prefix {
                            description
                              "Set a name of the IP prefix list.";
                            leaf ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the name of the IP prefix list to be configured along with metricin.";
                            }
    
                            leaf gataway {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the name of the gateway IP prefix list that is used to filter routes.";
                            }
                          }  // case ip-prefix
    
                          case acl-number {
                            description
                              "Set a number of the basic ACL.";
                            leaf acl-number {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              must
                                "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                              description
                                "Specify the number of the basic ACL to be configured along with metricin.";
                            }
                          }  // case acl-number
    
                          case acl-name {
                            description
                              "Set a name of an basic ACL.";
                            leaf acl-name {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              must
                                "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                              description
                                "Specify the name of an basic ACL to be configured along with metricin.";
                            }
                          }  // case acl-name
                        }  // choice policy-type
                      }  // list filter-import
                    }  // container filter-imports
    
                    container filter-exports {
                      description
                        "List of the filter policies. There can be multiple filter policies for each RIP process.";
                      list filter-export {
                        key "protocol process-id interface";
                        description
                          "Configure the filter policy.";
                        leaf protocol {
                          type rip-proto-type;
                          must
                            "../protocol='none' or ../interface='NULL0'";
                          description
                            "Specify the imported external routing protocol. It can be static, direct, BGP, RIP, OSPF, or ISIS.";
                        }
    
                        leaf process-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "../process-id=1 or (../protocol='ospfv2' or ../protocol='isis' or ../protocol='rip')";
                          description
                            "Specify the process ID. Process-id is required when the imported protocol is RIP, OSPF, or ISIS.";
                        }
    
                        leaf interface {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Specify the name of the interface on which the imported routes are filtered. The specified interface must be bound to the process for which the filter-policy is configured.";
                        }
    
                        choice policy-type {
                          mandatory true;
                          description
                            "Mode of the policy used for import route.";
                          case ip-prefix {
                            description
                              "Set a name of the IP prefix list.";
                            leaf ip-prefix {
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Specify the name of the IP prefix list to be configured along with metricin.";
                            }
                          }  // case ip-prefix
    
                          case acl-number {
                            description
                              "Set a number of the basic ACL.";
                            leaf acl-number {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              must
                                "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                              description
                                "Specify the number of the basic ACL to be configured along with metricin.";
                            }
                          }  // case acl-number
    
                          case acl-name {
                            description
                              "Set a name of an basic ACL.";
                            leaf acl-name {
                              type leafref {
                                path "/acl:acl/acl:groups/acl:group/acl:identity";
                              }
                              must
                                "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                              description
                                "Specify the name of an basic ACL to be configured along with metricin.";
                            }
                          }  // case acl-name
                        }  // choice policy-type
                      }  // list filter-export
                    }  // container filter-exports
    
                    container import-routes {
                      description
                        "List of import routes from multiple protocols.";
                      list import-route {
                        key "protocol process-id";
                        description
                          "Configure import routes from a specified protocol.";
                        leaf protocol {
                          type rip-imp-prototype;
                          description
                            "Specify the protocol from which routes are imported.";
                        }
    
                        leaf process-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "(../protocol!='ospfv2' and ../protocol!='isis' and ../protocol!='rip' and ../process-id=1) or not(../protocol!='ospfv2' and ../protocol!='isis' and ../protocol!='rip' or ../protocol='bgp' or ../protocol='direct' or ../protocol='static' or ../protocol='unr')";
                          description
                            "Specify the process ID of the protocol from which routes are imported. The value can be RIP, OSPFv2, or ISIS.";
                        }
    
                        choice policy-type {
                          description
                            "Mode of the policy used for import route.";
                          case route-policy-name {
                            description
                              "Set a route-policy name.";
                            leaf route-policy-name {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Specify the name of the route policy to be used during route import.
    Redistributing routes from other protocols will import even the direct routes of the source protocol.
    The prerequisites for the import route command are as follows:
    1. A RIP process has been created.
    2. The policy to be applied has been configured.
    Reconfiguration of this command with a new value of process-id or protocol will not affect previous configurations. Reconfiguration of this command with the existing protocol and process-id, regardless of the policy configuration, will overwrite previous configurations. The policy used in the redistribution command can be deleted only when no other configuration is using the policy.";
                            }
                          }  // case route-policy-name
    
                          case route-filter-name {
                            description
                              "Set a route policy name.";
                            leaf route-filter-name {
                              type string {
                                length "1..1809";
                              }
                              description
                                "Name of a routing Filter The value is a string of 1 to 585 characters.";
                            }
                          }  // case route-filter-name
                        }  // choice policy-type
    
                        leaf cost {
                          type uint16 {
                            range "0..15";
                          }
                          description
                            "Specify the cost used for the imported route.
    The cost and the tag value of the routes imported to RIP may be specified in the policy. If no cost is specified in the policy, the routes are imported into RIP with the cost specified in the command. If no cost is specified either in the command or policy, the configured default cost is used. If no tag value is specified in the policy, the tag value specified by the RM module is used. If the route tag specified by the RM module overflows 2 bytes, zero is used as the route tag.";
                        }
    
                        leaf transparent {
                          type rip-enable-flag;
                          must
                            "(../transparent='enable' and ../protocol='bgp') or ../transparent='disable'";
                          default "disable";
                          description
                            "This is used in case of importing routes from BGP. If this option is selected, the BGP route cost will be directly applied to these imported routes. The configured import route cost will not be considered in this case. If the BGP cost is more than 16, RIP will advertise these routes with cost 16 only.";
                        }
    
                        leaf permit-ibgp {
                          when
                            "../../../../../../ni:name='_public_'";
                          type rip-enable-flag;
                          must
                            "(../permit-ibgp='enable' and ../protocol='bgp') or ../permit-ibgp='disable'";
                          default "disable";
                          description
                            "IBGP routes will be imported to the RIP process.";
                        }
                      }  // list import-route
                    }  // container import-routes
    
                    container timer {
                      description
                        "Configure a timer for a process.";
                      leaf garbage {
                        type uint32 {
                          range "1..86400";
                        }
                        units "s";
                        default "120";
                        description
                          "Specify the interval for the device to delete a route from the routing table after detecting that the route is unreachable.";
                      }
    
                      leaf periodic {
                        type uint32 {
                          range "1..86400";
                        }
                        units "s";
                        default "30";
                        description
                          "Specify the periodic timer in seconds. RIP will send route updates periodically at this configured interval.";
                      }
    
                      leaf age {
                        type uint32 {
                          range "1..86400";
                        }
                        units "s";
                        default "180";
                        description
                          "Specify the age timer. Routes will be considered unreachable after this interval. In most cases, the age timer is three times the update timer.";
                      }
    
                      leaf suppress {
                        type uint32 {
                          range "0..86400";
                        }
                        units "s";
                        default "0";
                        description
                          "A route is suppressed after it ages and becomes unreachable. During the suppression time, no route update is accepted to prevent route flapping.
    The values of these timers should follow the rule: update < age and suppress < garbage-collect. For example, when the update timer is longer than the age timer, the router cannot inform its neighbors of the change in time if a RIP route changes during the update timer.
    This configuration should be used carefully as any parameter change can cause route flapping and can increase the convergence time considerably. If the network is quite stable, you can increase the timer values.";
                      }
    
                      leaf triggered-flag {
                        type rip-enable-flag;
                        default "disable";
                        description
                          "Enable the triggered timer.";
                      }
    
                      leaf triggered-min-interval {
                        type uint32 {
                          range "100..5000";
                        }
                        must
                          "../triggered-min-interval='200' or ../triggered-flag='enable'";
                        default "200";
                        description
                          "Specify the minimum interval after which the triggered update can be sent.";
                      }
    
                      leaf triggered-max-interval {
                        type uint32 {
                          range "200..5000";
                        }
                        must
                          "../triggered-max-interval='5000' or ../triggered-flag='enable'";
                        default "5000";
                        description
                          "Specify the maximum interval after which the triggered update has to be sent, even if the route is still changing.";
                      }
    
                      leaf triggered-incr-value {
                        type uint32 {
                          range "100..1000";
                        }
                        must
                          "../triggered-incr-value='100' or ../triggered-flag='enable'";
                        default "100";
                        description
                          "Specify the value by which the triggered timer will be incremented in case of frequent route changes.";
                      }
                    }  // container timer
    
                    container peers {
                      description
                        "List of the unicast neighbors. There can be multiple unicast neighbors configured for each RIP process.";
                      list peer {
                        key "address";
                        description
                          "Configure the unicast neighbor.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Display the address of a neighbor. The neighbor configuration is used when you do not want to send the RIP routing information as broadcast or multicast messages. This is particularly useful on broadcast and multicast networks when we want to send messages to few neighbors. If unicast neighbors are configured on silent interfaces, then updates will be sent to those unicast neighbors.
    This configuration will cause RIP to send unicast packets to some destinations. As a result, all the routers on that interface will not be able to hear the advertisement.
    If neighbor-address is same as one of the addresses configured on the interface, then the updates are not sent to neighbors.";
                        }
                      }  // list peer
                    }  // container peers
    
                    container neighbor-infos {
                      config false;
                      description
                        "List of the information for the unicast neighbor.";
                      list neighbor-info {
                        key "address interface-name";
                        description
                          "Operational data of the information for the unicast neighbor.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description
                            "The address of a neighbor.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "The interface information of a neighbor.";
                        }
    
                        leaf version {
                          type rip-version-type;
                          description
                            "The version of a neighbor.";
                        }
    
                        leaf last-heard-time-hours {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The hours of the last heard time.";
                        }
    
                        leaf last-heard-time-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The minutes of the last heard time.";
                        }
    
                        leaf last-heard-time-seconds {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The seconds of the last heard time.";
                        }
    
                        leaf active-routes-number {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The number of active RIP routes.";
                        }
    
                        leaf holddown-routes-number {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The number of holddown routes.";
                        }
    
                        leaf garbage-routes-number {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The number of garbage routes.";
                        }
    
                        leaf last-receive-sequence {
                          type string {
                            length "1..12";
                          }
                          description
                            "The last receive sequence.";
                        }
                      }  // list neighbor-info
                    }  // container neighbor-infos
    
                    container neighbor-packets-statisticss {
                      config false;
                      description
                        "List of the updates and packets statisticss for neighbor.";
                      list neighbor-packets-statistics {
                        key "address interface-name";
                        description
                          "Statistics of the updates and packets for neighbor.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description
                            "The address of a neighbor.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "The interface information of a neighbor.";
                        }
    
                        leaf request-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are received by the neighbor.";
                        }
    
                        leaf request-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are received by the neighbor.";
                        }
    
                        leaf request-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are received by the neighbor.";
                        }
    
                        leaf request-packets-ignored-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are ignored by the neighbor.";
                        }
    
                        leaf request-packets-ignored-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are ignored by the neighbor.";
                        }
    
                        leaf request-packets-ignored-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are ignored by the neighbor.";
                        }
    
                        leaf response-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are received by the neighbor.";
                        }
    
                        leaf response-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are received by the neighbor.";
                        }
    
                        leaf response-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are received by the neighbor.";
                        }
    
                        leaf response-packets-ignored-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are ignored by the neighbor.";
                        }
    
                        leaf response-packets-ignored-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are ignored by the neighbor.";
                        }
    
                        leaf response-packets-ignored-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are ignored by the neighbor.";
                        }
    
                        leaf bad-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad packets within the last 1 minute that are received by the neighbor.";
                        }
    
                        leaf bad-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad packets within the last 5 minute that are received by the neighbor.";
                        }
    
                        leaf bad-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total bad packets that are received by the neighbor.";
                        }
    
                        leaf bad-routes-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad routes within the last 1 minute that are received by the neighbor.";
                        }
    
                        leaf bad-routes-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad routes within the last 5 minute that are received by the neighbor.";
                        }
    
                        leaf bad-routes-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total bad routes that are received by the neighbor.";
                        }
    
                        leaf authentication-failed-packets-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 1 minute that fail to be authenticated on the neighbor.";
                        }
    
                        leaf authentication-failed-packets-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 5 minute that fail to be authenticated on the neighbor.";
                        }
    
                        leaf authentication-failed-packets-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total packets that fail to be authenticated on the neighbor.";
                        }
                      }  // list neighbor-packets-statistics
                    }  // container neighbor-packets-statisticss
    
                    container neighbor-last-downs {
                      config false;
                      description
                        "List of the reason why a neighbor went Down.";
                      list neighbor-last-down {
                        key "index";
                        description
                          "Operational data of the reason why a neighbor went Down.";
                        leaf index {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Index of the neighbor that went Down.";
                        }
    
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of a neighbor.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Interface on which a neighbor was present.";
                        }
    
                        leaf down-reason {
                          type rip-nbr-down-reason;
                          description
                            "Reason why a neighbor went Down.";
                        }
    
                        leaf down-time {
                          type yang:date-and-time;
                          description
                            "Time when a neighbor went Down.";
                        }
                      }  // list neighbor-last-down
                    }  // container neighbor-last-downs
    
                    container silent-interfaces {
                      when
                        "(../silent-interface-all='disable')";
                      description
                        "List of silent interfaces. There can be multiple silent interfaces configured for each RIP process.";
                      list silent-interface {
                        key "if-name";
                        description
                          "Configure the silent interface.";
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                          description
                            "The silent interface configuration is used when you do not want to send the RIP routing information on a specific multicast interface. If neighbor-address is configured on the interface, then the updates are sent to neighbors.";
                        }
                      }  // list silent-interface
                    }  // container silent-interfaces
    
                    container undo-silent-interfaces {
                      when
                        "(../silent-interface-all='enable')";
                      description
                        "List of silent interfaces disabled. There can be multiple silent interfaces configured for each RIP process.";
                      list undo-silent-interface {
                        key "if-name";
                        description
                          "Configure the silent interface disable.";
                        leaf if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                          description
                            "The silent interface configuration is used when you do not want to send the RIP routing information on a specific multicast interface. If neighbor address is configured on the interface, then the updates are sent to neighbors.";
                        }
                      }  // list undo-silent-interface
                    }  // container undo-silent-interfaces
    
                    container default-route {
                      presence
                        "Enable default-route.";
                      description
                        "Configure a default route.";
                      leaf cost {
                        type uint8 {
                          range "0..15";
                        }
                        default "0";
                        description
                          "Specify the cost to be used while generating a default route. If a metric out value is applicable on the interface, then the advertised metric value is the sum of the cost (specified in the default-route originate command) and the metric out value.";
                      }
    
                      leaf tag {
                        type uint16;
                        default "0";
                        description
                          "Specify the tag value to be used while generating a default route.";
                      }
    
                      leaf avoid-learning {
                        type rip-enable-flag;
                        must
                          "../avoid-learning='disable' or not(../always)";
                        default "disable";
                        description
                          "Prevent the default route from being learned from neighbors.";
                      }
    
                      choice default-route-mode {
                        mandatory true;
                        description
                          "Mode for default route.";
                        case always {
                          description
                            "Set always.";
                          leaf always {
                            type empty;
                            description
                              "The router configured with the always parameter does not calculate the default routes of other routers.";
                          }
                        }  // case always
    
                        case match-default {
                          description
                            "Match default route.";
                          leaf match-default {
                            type empty;
                            description
                              "Advertises the default routes (if any) in the routing table generated by other routing protocols or RIP processes to neighbors.";
                          }
                        }  // case match-default
    
                        case route-policy-name {
                          description
                            "Specify the name of a route-policy.";
                          leaf route-policy-name {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "Name of a routing policy. Through the routing policy, the device matches the default routing entry generated by the device that does not run RIP in the routing table, and advertises the default route according to the parameters set through the routing policy.";
                          }
    
                          leaf advertise-tag {
                            type rip-enable-flag;
                            must
                              "../advertise-tag='disable' or ../route-policy-name";
                            default "disable";
                            description
                              "Inherit tag applied through route-policy.";
                          }
                        }  // case route-policy-name
    
                        case route-filter-name {
                          description
                            "Specify the name of a route-filter.";
                          leaf route-filter-name {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Name of a routing Filter The value is a string of 1 to 585 characters.";
                          }
                        }  // case route-filter-name
                      }  // choice default-route-mode
                    }  // container default-route
    
                    container bfd {
                      description
                        "Configure BFD for the process.";
                      leaf enable {
                        type rip-enable-flag;
                        default "disable";
                        description
                          "Enable BFD for the given RIP process.";
                      }
    
                      leaf min-tx {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..4294967295";
                        }
                        units "ms";
                        description
                          "Minimum interval for sending BFD packets to the neighbor. The value range and default value are controlled by the PAF.";
                      }
    
                      leaf min-rx {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..4294967295";
                        }
                        units "ms";
                        description
                          "Minimum interval for receiving BFD packets from the neighbor. The value range and default value are controlled by the PAF.";
                      }
    
                      leaf detect-multiplier {
                        type uint32 {
                          range "3..50";
                        }
                        default "3";
                        description
                          "Local detection multiplier.";
                      }
    
                      leaf min-tx-val {
                        type uint32 {
                          range "1..4294967295";
                        }
                        config false;
                        description
                          "Minimum interval for sending BFD packets to the neighbor. The value range and default value are controlled by the PAF.";
                      }
    
                      leaf min-rx-val {
                        type uint32 {
                          range "1..4294967295";
                        }
                        config false;
                        description
                          "Minimum interval for receiving BFD packets from the neighbor. The value range and default value are controlled by the PAF.";
                      }
                    }  // container bfd
    
                    container bfd-states {
                      config false;
                      description
                        "List of the BFD state for the current process.";
                      list bfd-state {
                        key "interface-name local-ip remote-ip";
                        description
                          "Statistics of the BFD state for the current process.";
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Interface from which a local router advertises BFD sessions.";
                        }
    
                        leaf local-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Local IP address.";
                        }
    
                        leaf remote-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Remote IP address.";
                        }
    
                        leaf state {
                          type rip-bfd-state;
                          description
                            "BFD session status.";
                        }
                      }  // list bfd-state
                    }  // container bfd-states
    
                    container preference {
                      description
                        "Configure a preference value.";
                      leaf value {
                        type uint8 {
                          range "1..255";
                        }
                        default "100";
                        description
                          "The configured priority applies to the routes to be delivered to the RM module. If RIP has added a route to the RM module, and then the priority is changed, RIP re-adds it with the new priority.
    The prerequisites for the priority configuration are as follows:
    1. A RIP process has been created.
    2. The policy to be applied has been configured.";
                      }
    
                      choice policy-type {
                        description
                          "Mode of the policy used for import route.";
                        case route-policy {
                          description
                            "Set a route policy name.";
                          leaf route-policy {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "You can set a priority for the routes that match the policy, and the result is displayed in the routing table of the RM module.
    The prerequisites for the priority configuration are as follows:
    1. A RIP process has been created.
    2. The policy to be applied has been configured.";
                          }
                        }  // case route-policy
    
                        case route-filter {
                          description
                            "Set a route policy name.";
                          leaf route-filter {
                            type string {
                              length "1..1809";
                            }
                            description
                              "Name of a routing Filter The value is a string of 1 to 585 characters.";
                          }
                        }  // case route-filter
                      }  // choice policy-type
                    }  // container preference
    
                    container interfaces {
                      description
                        "List of the interface. There can be multiple interfaces on which RIP is enabled.";
                      list interface {
                        key "name";
                        description
                          "Configure the interface.";
                        leaf name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                          description
                            "Specify the name of an interface on which RIP is to be configured.";
                        }
    
                        choice max-packet-length {
                          default "value";
                          description
                            "Configure max packet length information.";
                          case value {
                            description
                              "Max packet length value.";
                            leaf value {
                              type uint16 {
                                range
                                  "32..65535";
                              }
                              default "512";
                              description
                                "If max packet length is more than the interface MTU, the interface MTU is used.
    The maximum size of RIP packets is 512 bytes. Using this packet size is not very efficient as it leads to wastage of some bandwidth. If the neighbor on the other side supports RIP packets of a greater size, then you can increase the packet size so that more routes can be sent in one packet.
    This configuration can increase the RIP packet size. After the packet size is increased, the router may fail to communicate with non-Huawei routers. Therefore, exercise caution when using this command. This command can be configured only if the other side can accept RIP packets of a size greater that 512 bytes.";
                            }
                          }  // case value
    
                          case mtu {
                            description
                              "Configure inteface MTU as max packet length.";
                            leaf mtu {
                              type empty;
                              description
                                "Specify that the maximum length of packets is equal to the interface MTU.If this is set, interface MTU configuration will be preferred to RIP configuration.";
                            }
                          }  // case mtu
                        }  // choice max-packet-length
    
                        leaf input {
                          type rip-enable-flag;
                          default "enable";
                          description
                            "If the input is disabled, then no RIP packets will be received on that interface regardless of the unicast neighbor and silent configuration on that interface. When input is disabled and then enabled, it will send full table request packets.";
                        }
    
                        leaf output {
                          type rip-enable-flag;
                          default "enable";
                          description
                            "If output is disabled, then no RIP packets will be sent on that interface regardless of the unicast neighbor and silent configuration on that interface. But if the max-route configuration changes, RIP requests may be sent regardless of the silent configuration on that interface.";
                        }
    
                        leaf version {
                          type rip-version-type;
                          default
                            "rip-version-default";
                          description
                            "The version configuration can be done on an interface to receive and advertise RIPv1 and RIPv2 packets. If the user wants to receive both RIPv1 and RIPv2 packets, then RIPv2 broadcast should be configured. But only RIPv2 broadcast packets will be sent. Configure the version based on the version of the neighbors on that interface.";
                        }
    
                        leaf split-horizon {
                          type rip-enable-flag;
                          default "enable";
                          description
                            "Split horizon prevents a route from being advertised back on the interface from which was learned. Split horizon is not enabled on NBMA or P2MP interfaces because they have multiple neighbors.";
                        }
    
                        leaf poison-reverse {
                          type rip-enable-flag;
                          default "disable";
                          description
                            "Poison reverse is disabled by default. Poison reverse can be enabled to advertise routes with infinite metric (16) on the interface from which the routes were learned. When both split horizon and poison reverse is configured, poison reverse will have a higher priority.";
                        }
    
                        leaf pkt-transmit-interval {
                          type uint16 {
                            range "50..500";
                          }
                          default "200";
                          description
                            "Interval at which packets are transmitted.";
                        }
    
                        leaf pkt-transmit-bandwidth {
                          type uint8 {
                            range "1..99";
                          }
                          default "99";
                          description
                            "Specify the percentage of the interface bandwidth to be used to send RIP updates.";
                        }
    
                        leaf pkt-transmit-number {
                          type uint8 {
                            range "25..100";
                          }
                          default "50";
                          description
                            "Number of packets that can be sent from an interface each time.";
                        }
    
                        container authentication {
                          description
                            "Configure the authentication type on the interface.";
                          leaf mode {
                            type rip-auth;
                            default "none";
                            description
                              "Specify the authentication type configured on this interface.
    Authentication password mismatch between sending and receiving side can cause packet drops on the receiving side.
    While RIP is using keychain authentication, if no valid password exist in keychain, then RIP packets will be sent and received without any authentication. The configuration on an interface has a higher priority over the configuration in a process.
    Before running the ripng authentication-mode command, a RIP process or an interface has been created.";
                          }
    
                          leaf simple {
                            when
                              "(../mode='simple') or (../mode='usual')";
                            type pub-type:password;
                            mandatory true;
                            description
                              "Specify the password authentication. The password is a string ranging from 1 to 16 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                          }
    
                          leaf key-id {
                            when
                              "(../mode='md5-keyid') or (../mode='hmac-sha256')";
                            type uint32 {
                              range "0..255";
                            }
                            mandatory true;
                            description
                              "Specify the ID to identify the key when encrypted authentication is used.";
                          }
    
                          leaf md5 {
                            when
                              "(../mode='md5-keyid') or (../mode='hmac-sha256')";
                            type pub-type:password-extend;
                            mandatory true;
                            description
                              "Specify the password string when encrypted authentication is used.";
                          }
    
                          leaf keychain {
                            ext:case-sensitivity "lower-only";
                            when
                              "(../mode='md5-keychain')";
                            type string {
                              length "1..47";
                              pattern '[^A-Z]+';
                            }
                            mandatory true;
                            description
                              "Keychain name.";
                          }
                        }  // container authentication
    
                        container metricin {
                          description
                            "Configure the metricin on the interface.";
                          leaf value {
                            type uint8 {
                              range "0..15";
                            }
                            default "0";
                            description
                              "Metricin is the mechanism to increase the incoming metric of routes learned through RIP.
    When RIP receives a route, the metric value configured on that interface is added before adding it to the RIP routing table. After the metric is added, if the metric is greater than 16, 16 is used as the metric.";
                          }
    
                          choice policy-type {
                            description
                              "Mode of the policy used for import route.";
                            case ip-prefix {
                              description
                                "Set a name of the IP prefix list.";
                              leaf ip-prefix {
                                when
                                  "../value>0";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the name of the IP prefix list to be configured along with metricin.";
                              }
                            }  // case ip-prefix
    
                            case acl-number {
                              description
                                "Set a number of the basic ACL.";
                              leaf acl-number {
                                when
                                  "../value>0";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Specify the number of the basic ACL to be configured along with metricin.";
                              }
                            }  // case acl-number
    
                            case acl-name {
                              description
                                "Set a name of an basic ACL.";
                              leaf acl-name {
                                when
                                  "../value>0";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Specify the name of an basic ACL to be configured along with metricin.";
                              }
                            }  // case acl-name
                          }  // choice policy-type
                        }  // container metricin
    
                        container metricout {
                          description
                            "Configure the metricout on the interface.";
                          leaf value {
                            type uint8 {
                              range "1..15";
                            }
                            default "1";
                            description
                              "When RIP advertises a route, the metric value configured on an interface is added before sending the route. After the metric is added, if the value is greater than 16, 16 is used as the metric.
    When an ACL or IP prefix list is configured in the metricout command, the metric is applied only to those routes that match the ACL or IP prefix list. All other routes are sent with the default cost (1).";
                          }
    
                          choice policy-type {
                            description
                              "Mode of the policy used for import route.";
                            case ip-prefix {
                              description
                                "Set a name of the IP prefix list.";
                              leaf ip-prefix {
                                when
                                  "../value>1";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the name of the IP prefix list to be configured along with metric out.";
                              }
                            }  // case ip-prefix
    
                            case acl-number {
                              description
                                "Set a number of the basic ACL.";
                              leaf acl-number {
                                when
                                  "../value>1";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Specify the number of the basic ACL to be configured along with metric out.";
                              }
                            }  // case acl-number
    
                            case acl-name {
                              description
                                "Set a name of the basic ACL.";
                              leaf acl-name {
                                when
                                  "../value>1";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Specify the name of the basic ACL to be configured along with metric out.";
                              }
                            }  // case acl-name
                          }  // choice policy-type
                        }  // container metricout
    
                        container bfd {
                          description
                            "Configure the BFD configuration on the interface.";
                          leaf type {
                            type rip-bfd-type;
                            default "none";
                            description
                              "Specify the type of BFD on the interface, dynamic, static, or block.";
                          }
    
                          leaf min-tx {
                            ext:dynamic-default;
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            units "ms";
                            description
                              "Minimum interval for sending BFD packets to the neighbor. The value range vary with the product.";
                          }
    
                          leaf min-rx {
                            ext:dynamic-default;
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            units "ms";
                            description
                              "Minimum interval for receiving BFD packets from the neighbor. The value range vary with the product.";
                          }
    
                          leaf detect-multiplier {
                            type uint32 {
                              range "3..50";
                            }
                            default "3";
                            description
                              "Local detection multiplier.";
                          }
                        }  // container bfd
    
                        container summarys {
                          description
                            "List of summary addresses configured for the interface.";
                          list summary {
                            key "address network-mask";
                            max-elements 128;
                            description
                              "Configure a summary class.";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Route summarization improves the scalability and efficiency of routers on large networks and reduces the routing table size. Instead of sending many routes to neighbors, a router sends only the route to the specified summarized address.";
                            }
    
                            leaf network-mask {
                              type inet:ipv4-address-no-zone;
                              description
                                "Specify the mask for the summary address.";
                            }
    
                            leaf avoid-feedback {
                              type rip-enable-flag;
                              default "disable";
                              description
                                "Prevent summarized routes from being sent back to the interface.";
                            }
                          }  // list summary
                        }  // container summarys
                      }  // list interface
                    }  // container interfaces
    
                    container interface-packets-statisticss {
                      config false;
                      description
                        "List of Updates and packets statistics for interface.";
                      list interface-packets-statistics {
                        key "interface-name";
                        description
                          "Statistics of Updates and packets statistics for interface.";
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Collect statistics on packets on the interface.";
                        }
    
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the interface.";
                        }
    
                        leaf periodic-updates-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of periodic Update packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf periodic-updates-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of periodic Update packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf periodic-updates-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total periodic Update packets that are sent by the interface.";
                        }
    
                        leaf triggered-updates-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of triggered Update packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf triggered-updates-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of triggered Update packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf triggered-updates-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total triggered Update packets that are sent by the interface.";
                        }
    
                        leaf response-packets-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf response-packets-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf response-packets-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are sent by the interface.";
                        }
    
                        leaf response-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are received by the interface.";
                        }
    
                        leaf response-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are received by the interface.";
                        }
    
                        leaf response-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are received by the interface.";
                        }
    
                        leaf response-packets-ignored-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are ignored by the interface.";
                        }
    
                        leaf response-packets-ignored-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are ignored by the interface.";
                        }
    
                        leaf response-packets-ignored-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are ignored by the interface.";
                        }
    
                        leaf request-packets-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf request-packets-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf request-packets-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are sent by the interface.";
                        }
    
                        leaf request-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are received by the interface.";
                        }
    
                        leaf request-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are received by the interface.";
                        }
    
                        leaf request-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are received by the interface.";
                        }
    
                        leaf request-packets-ignored-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are ignored by the interface.";
                        }
    
                        leaf request-packets-ignored-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are ignored by the interface.";
                        }
    
                        leaf request-packets-ignored-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are ignored by the interface.";
                        }
    
                        leaf bad-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad packets within the last 1 minute that are received by the interface.";
                        }
    
                        leaf bad-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad packets within the last 5 minute that are received by the interface.";
                        }
    
                        leaf bad-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total bad packets that are received by the interface.";
                        }
    
                        leaf routes-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 1 minute that are received by the interface.";
                        }
    
                        leaf routes-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 5 minute that are received by the interface.";
                        }
    
                        leaf routes-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total routes that are received by the interface.";
                        }
    
                        leaf routes-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf routes-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf routes-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total routes that are sent by the interface.";
                        }
    
                        leaf bad-routes-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad routes within the last 1 minute that are received by the interface.";
                        }
    
                        leaf bad-routes-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad routes within the last 5 minute that are received by the interface.";
                        }
    
                        leaf bad-routes-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total bad routes that are received by the interface.";
                        }
    
                        leaf authentication-failed-packets-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 1 minute that fail to be authenticated.";
                        }
    
                        leaf authentication-failed-packets-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 5 minute that fail to be authenticated.";
                        }
    
                        leaf authentication-failed-packets-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total packets that fail to be authenticated.";
                        }
    
                        leaf sent-failed-packets-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 1 minute that fail to be sent.";
                        }
    
                        leaf sent-failed-packets-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 5 minute that fail to be sent.";
                        }
    
                        leaf sent-failed-packets-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total packets that fail to be sent.";
                        }
                      }  // list interface-packets-statistics
                    }  // container interface-packets-statisticss
    
                    container ecmp-groups {
                      config false;
                      description
                        "List of ecmp group information of the process.";
                      list ecmp-group {
                        key "group-id";
                        description
                          "Operational data of ecmp group statistics for the process.";
                        leaf group-id {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "ID of an ECMP group.";
                        }
    
                        leaf flag {
                          type ecmp-group-flag;
                          description
                            "Route attribute:- D: Direct route ;- URT: Unicast route;- URT6: Unicast IPv6 route.";
                        }
    
                        leaf reference-count {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes using the ECMP group ID.";
                        }
    
                        container nexthops {
                          description
                            "List of ecmp group nexthop information.";
                          list nexthop {
                            key "nexthop-address";
                            description
                              "Operational data of the nexthop for the ecmp group.";
                            leaf nexthop-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Next hop of route using the ECMP group ID.";
                            }
                          }  // list nexthop
                        }  // container nexthops
                      }  // list ecmp-group
                    }  // container ecmp-groups
    
                    container routes {
                      config false;
                      description
                        "List of information about all the routes on the peer.";
                      list route {
                        key "destination mask-length nexthop interface-name";
                        description
                          "Operational data of the route on the peer.";
                        leaf destination {
                          type inet:ipv4-address-no-zone;
                          description
                            "Destination IP address.";
                        }
    
                        leaf mask-length {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Mask length of the route.";
                        }
    
                        leaf nexthop {
                          type inet:ipv4-address-no-zone;
                          description
                            "Next hop of the route.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Interface on which a neighbor was present.";
                        }
    
                        leaf peer-address {
                          ext:support-filter "true";
                          type inet:ipv4-address-no-zone;
                          description
                            "Neighbor that is connected to the interface.";
                        }
    
                        leaf cost {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Cost of the route.";
                        }
    
                        leaf tag {
                          type uint16 {
                            range "0..65535";
                          }
                          description
                            "Tag of the route.";
                        }
    
                        leaf flags {
                          type string {
                            length "1..4";
                          }
                          description
                            "First character to distinguish RIP routes from TRIP routes and the second character to indicate the route state.";
                        }
    
                        leaf state-time {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          units "s";
                          description
                            "Time during which a route remains in a specific state, Unit: second.";
                        }
                      }  // list route
                    }  // container routes
    
                    container database-routes {
                      config false;
                      description
                        "List of information about all the database routes on the peer.";
                      list database-route {
                        key "destination mask-length nexthop";
                        description
                          "Operational data of the database route on the peer.";
                        leaf destination {
                          type inet:ipv4-address-no-zone;
                          description
                            "Destination IP address.";
                        }
    
                        leaf mask-length {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Mask length of the route.";
                        }
    
                        leaf nexthop {
                          type inet:ipv4-address-no-zone;
                          description
                            "Next hop of the route.";
                        }
    
                        leaf cost {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Cost of the route.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Interface on which a neighbor was present.";
                        }
    
                        leaf tag {
                          type uint16 {
                            range "0..65535";
                          }
                          description
                            "Tag of the route.";
                        }
    
                        leaf source-type {
                          type rip-route-source-type;
                          description
                            "Route source.";
                        }
                      }  // list database-route
                    }  // container database-routes
    
                    container statistics {
                      config false;
                      description
                        "Statistics of then major information for the process.";
                      leaf routes-in-database {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of routes in the database.";
                      }
    
                      leaf interfaces-enabled {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of the interfaces on which is enabled.";
                      }
    
                      leaf vrrp-interfaces {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of VRRP-capable interfaces.";
                      }
    
                      leaf trigger-updates-sent {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of sent triggered updates.";
                      }
    
                      leaf route-changes {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Statistics on the routes that have been changed in the database.";
                      }
    
                      leaf replies-to-queries {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of response packets to RIP queries.";
                      }
    
                      leaf routes-sendable-periodic {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of routes that can be sent in each update.";
                      }
    
                      leaf routes-send-last-periodic {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of routes that were sent in the last update.";
                      }
                    }  // container statistics
                  }  // list process
                }  // container processs
    
                container gtsm {
                  description
                    "Configure RIP GTSM.";
                  leaf hops {
                    type uint8 {
                      range "1..255";
                    }
                    description
                      "Specify the TTL value.";
                  }
                }  // container gtsm
              }  // container rip
    
              container srv6 {
                when "../ni:name='_public_'";
                description
                  "Configure segment routing IPv6.";
                leaf enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable segment routing IPv6.";
                }
    
                leaf te-frr-enable {
                  type boolean;
                  must
                    "../te-frr-enable='false' or ../enable='true'";
                  default "false";
                  description
                    "Enable/disable SR TE FRR.";
                }
    
                leaf te-frr-enable-downgrade {
                  when "../te-frr-enable='true'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable fast re-route mode.";
                }
    
                leaf end-x-delay-time {
                  when "../enable='true'";
                  type uint32 {
                    range "0..600000";
                  }
                  units "ms";
                  default "0";
                  description
                    "End.X delay time.";
                }
    
                leaf path-mtu {
                  when "../enable='true'";
                  type uint32 {
                    range "1280..9600";
                  }
                  must
                    "(../path-mtu-reserved and (../path-mtu)-(../path-mtu-reserved)>=1280) or not(../path-mtu-reserved)";
                  default "9600";
                  description "Path MTU value.";
                }
    
                leaf path-mtu-reserved {
                  when "../enable='true'";
                  type uint32 {
                    range "1..9600";
                  }
                  must
                    "(../path-mtu)-(../path-mtu-reserved)>=1280";
                  description
                    "Path MTU reserved value.";
                }
    
                leaf proxy-peer-sid {
                  when "../enable='true'";
                  type inet:ipv6-address-no-zone;
                  description
                    "Peer SID of SFC for anycast.";
                }
    
                leaf reduce-srh-enable {
                  when "../enable='true'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable reduce SRH.";
                }
    
                container encapsulation {
                  when "../enable='true'";
                  description
                    "Configure IPv6 encapsulation configuation.";
                  leaf source-address {
                    type inet:ipv6-address-no-zone;
                    description
                      "SRv6 VPN encapsulation source address.";
                  }
    
                  leaf hop-limit {
                    when "../source-address";
                    type uint8 {
                      range "1..255";
                    }
                    default "255";
                    description
                      "Encapsulation IPv6 header TTL value.";
                  }
                }  // container encapsulation
    
                container locators {
                  when "../enable='true'";
                  description
                    "List of SRv6 locator configuration.";
                  list locator {
                    key "name";
                    unique "prefix";
                    description
                      "Configure SRv6 locator configuration.";
                    leaf name {
                      type string {
                        length "1..31";
                      }
                      description
                        "Locator name.";
                    }
    
                    leaf prefix {
                      ext:operation-exclude "update";
                      type inet:ipv6-address-no-zone;
                      mandatory true;
                      description "IPv6 prefix.";
                    }
    
                    leaf prefix-length {
                      ext:operation-exclude "update";
                      type uint8 {
                        range "32..120";
                      }
                      must
                        "../prefix-length+../static-length+../args-length<=128";
                      mandatory true;
                      description
                        "Mask length. The maximum sum value of the mask length, static segment length, and argument segment length is 128.";
                    }
    
                    leaf static-length {
                      ext:operation-exclude "update";
                      type uint8 {
                        range "0..96";
                      }
                      must
                        "../prefix-length+../static-length+../args-length<=128";
                      default "0";
                      description
                        "The static segment length determines the range of opcode. The maximum sum value of the mask length, static segment length, and argument segment length is 128.";
                    }
    
                    leaf args-length {
                      ext:operation-exclude "update";
                      type uint8 {
                        range "0..64";
                      }
                      must
                        "../prefix-length+../static-length+../args-length<=128";
                      default "0";
                      description
                        "Argument segment length. The maximum sum value of the mask length, static segment length, and argument segment length is 128.";
                    }
    
                    leaf compress-block-length {
                      ext:operation-exclude "update";
                      type uint8 {
                        range "1..88";
                      }
                      must
                        "((../compress-block-length mod 4)=0) and (../compress-block-length>=4) and (../compress-block-length<=128) and (../prefix-length - ../compress-block-length>=1) and (../prefix-length - ../compress-block-length<=31)";
                      description
                        "Block segment length. The block segment length is within the range of prefix length.";
                    }
    
                    leaf compress-static-length {
                      ext:operation-exclude "update|delete";
                      when
                        "../compress-block-length";
                      type uint8 {
                        range "1..32";
                      }
                      must
                        "../compress-static-length<=(32-(../prefix-length - ../compress-block-length))";
                      description
                        "Compress static segment length. The compress static segment length is within the range of compress length.";
                    }
    
                    leaf flex-algo {
                      ext:operation-exclude "update|delete";
                      type uint8 {
                        range "0|128..255";
                      }
                      default "0";
                      description
                        "Flexible algorithm.";
                    }
    
                    container opcodes {
                      when "../static-length>0";
                      description
                        "Configure SRv6 opcodes configuration.";
                      container ends {
                        description
                          "List of End type opcode configuration.";
                        list end {
                          key "value";
                          max-elements 1;
                          description
                            "Configure End type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf compress {
                            ext:operation-exclude "update|delete";
                            type boolean;
                            must
                              "(../compress = 'true' and (../../../../compress-block-length>0) and (../../../../compress-static-length>0)) or ../compress = 'false'";
                            default "false";
                            description
                              "Enable/disable compress function.";
                          }
                        }  // list end
                      }  // container ends
    
                      container end-psps {
                        description
                          "List of End psp type opcode configuration.";
                        list end-psp {
                          key "value";
                          max-elements 1;
                          description
                            "Configure End psp type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf compress {
                            ext:operation-exclude "update|delete";
                            type boolean;
                            must
                              "(../compress = 'true' and (../../../../compress-block-length>0) and (../../../../compress-static-length>0)) or ../compress = 'false'";
                            default "false";
                            description
                              "Enable/disable compress function.";
                          }
                        }  // list end-psp
                      }  // container end-psps
    
                      container end-psp-usp-usds {
                        description
                          "List of End psp-usp-usd type opcode configuration.";
                        list end-psp-usp-usd {
                          key "value";
                          max-elements 1;
                          description
                            "Configure End psp-usp-usd type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf compress {
                            ext:operation-exclude "update|delete";
                            type boolean;
                            must
                              "(../compress = 'true' and (../../../../compress-block-length>0) and (../../../../compress-static-length>0)) or ../compress = 'false'";
                            default "false";
                            description
                              "Enable/disable compress function.";
                          }
                        }  // list end-psp-usp-usd
                      }  // container end-psp-usp-usds
    
                      container end-psp-usp-usd-cocs {
                        description
                          "List of End psp-usp-usd-coc type opcode configuration.";
                        list end-psp-usp-usd-coc {
                          must
                            "../../../compress-block-length>0";
                          key "value";
                          max-elements 1;
                          description
                            "Configure End psp-usp-usd-coc type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
                        }  // list end-psp-usp-usd-coc
                      }  // container end-psp-usp-usd-cocs
    
                      container end-ops {
                        description
                          "List of End.OP type opcode configuration.";
                        list end-op {
                          key "value";
                          max-elements 1;
                          description
                            "Configure End.OP type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
                        }  // list end-op
                      }  // container end-ops
    
                      container end-xs {
                        description
                          "List of End.X type opcode configuration.";
                        list end-x {
                          key "value if-name next-hop";
                          description
                            "Configure End.X type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Interface name.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "Nexthop address.";
                          }
    
                          leaf compress {
                            ext:operation-exclude "update|delete";
                            type boolean;
                            must
                              "(../compress = 'true' and (../../../../compress-block-length>0) and (../../../../compress-static-length>0)) or ../compress = 'false'";
                            default "false";
                            description
                              "Enable/disable compress function.";
                          }
                        }  // list end-x
                      }  // container end-xs
    
                      container end-x-psps {
                        description
                          "List of End.X psp type opcode configuration.";
                        list end-x-psp {
                          key "value if-name next-hop";
                          description
                            "Configure End.X psp type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Interface name.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "NextHop address.";
                          }
    
                          leaf compress {
                            ext:operation-exclude "update|delete";
                            type boolean;
                            must
                              "(../compress = 'true' and (../../../../compress-block-length>0) and (../../../../compress-static-length>0)) or ../compress = 'false'";
                            default "false";
                            description
                              "Enable/disable compress function.";
                          }
                        }  // list end-x-psp
                      }  // container end-x-psps
    
                      container end-x-psp-usp-usds {
                        description
                          "List of End.X psp-usp-usd type opcode configuration.";
                        list end-x-psp-usp-usd {
                          key "value if-name next-hop";
                          description
                            "Configure End.X psp-usp-usd type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Interface name.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "NextHop address.";
                          }
    
                          leaf compress {
                            ext:operation-exclude "update|delete";
                            type boolean;
                            must
                              "(../compress = 'true' and (../../../../compress-block-length>0) and (../../../../compress-static-length>0)) or ../compress = 'false'";
                            default "false";
                            description
                              "Enable/disable compress function.";
                          }
                        }  // list end-x-psp-usp-usd
                      }  // container end-x-psp-usp-usds
    
                      container end-x-psp-usp-usd-cocs {
                        description
                          "List of End.X psp-usp-usd-coc type opcode configuration.";
                        list end-x-psp-usp-usd-coc {
                          must
                            "../../../compress-block-length>0";
                          key "value if-name next-hop";
                          description
                            "Configure End.X psp-usp-usd-coc type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Interface name.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "NextHop address.";
                          }
                        }  // list end-x-psp-usp-usd-coc
                      }  // container end-x-psp-usp-usd-cocs
    
                      container end-dt2us {
                        description
                          "List of End.DT2U type opcode configuration.";
                        list end-dt2u {
                          key "value";
                          unique "bd-id";
                          description
                            "Configure End.DT2U type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf bd-id {
                            ext:operation-exclude "update";
                            ext:support-filter "true";
                            type leafref {
                              path "/bd:bd/bd:instances/bd:instance/bd:id";
                            }
                            mandatory true;
                            description
                              "Bridge domain ID.";
                          }
                        }  // list end-dt2u
                      }  // container end-dt2us
    
                      container end-dt2uls {
                        description
                          "List of End.DT2UL type opcode configuration.";
                        list end-dt2ul {
                          key "value";
                          unique "bd-id";
                          description
                            "Configure End.DT2UL type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf bd-id {
                            ext:operation-exclude "update";
                            ext:support-filter "true";
                            type leafref {
                              path "/bd:bd/bd:instances/bd:instance/bd:id";
                            }
                            mandatory true;
                            description
                              "Bridge domain ID.";
                          }
                        }  // list end-dt2ul
                      }  // container end-dt2uls
    
                      container end-dt2ms {
                        description
                          "List of End.DT2M type opcode configuration.";
                        list end-dt2m {
                          key "value";
                          unique "bd-id";
                          description
                            "Configure End.DT2M type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf bd-id {
                            ext:operation-exclude "update";
                            ext:support-filter "true";
                            type leafref {
                              path "/bd:bd/bd:instances/bd:instance/bd:id";
                            }
                            mandatory true;
                            description
                              "Bridge domain ID.";
                          }
                        }  // list end-dt2m
                      }  // container end-dt2ms
    
                      container end-dx2s {
                        description
                          "List of End.DX2 type opcode configuration.";
                        list end-dx2 {
                          key "value";
                          unique "evpl-id";
                          description
                            "Configure End.DX2 type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf evpl-id {
                            ext:operation-exclude "update";
                            type leafref {
                              path "/evpl:evpl/evpl:instances/evpl:instance/evpl:id";
                            }
                            must
                              "((/evpl:evpl/evpl:instances/evpl:instance[evpl:id=current()]/evpl:mode='mpls-mode') or (/evpl:evpl/evpl:instances/evpl:instance[evpl:id=current()]/evpl:mode='srv6-mode') or (/evpl:evpl/evpl:instances/evpl:instance[evpl:id=current()]/evpl:mode='none'))";
                            mandatory true;
                            description
                              "EVPL instance ID.";
                          }
                        }  // list end-dx2
                      }  // container end-dx2s
    
                      container end-dx2ls {
                        description
                          "List of End.DX2L type opcode configuration.";
                        list end-dx2l {
                          key "value";
                          unique "evpl-id";
                          description
                            "Configure End.DX2L type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf evpl-id {
                            ext:operation-exclude "update";
                            type leafref {
                              path "/evpl:evpl/evpl:instances/evpl:instance/evpl:id";
                            }
                            must
                              "((/evpl:evpl/evpl:instances/evpl:instance[evpl:id=current()]/evpl:mode='mpls-mode') or (/evpl:evpl/evpl:instances/evpl:instance[evpl:id=current()]/evpl:mode='srv6-mode') or (/evpl:evpl/evpl:instances/evpl:instance[evpl:id=current()]/evpl:mode='none'))";
                            mandatory true;
                            description
                              "EVPL instance ID.";
                          }
                        }  // list end-dx2l
                      }  // container end-dx2ls
    
                      container end-dt4s {
                        description
                          "List of End.DT4 type opcode configuration.";
                        list end-dt4 {
                          key "value";
                          unique "vpn-name";
                          description
                            "Configure End.DT4 type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf vpn-name {
                            ext:operation-exclude "update";
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            default "_public_";
                            description
                              "VPN name.";
                          }
    
                          leaf protocol {
                            type protocol-type;
                            must
                              "not(../vpn-name='_public_' and (../protocol='evpn' or ../protocol='evpn-l3vpn'))";
                            default "l3vpn";
                            description
                              "Protocol type.";
                          }
                        }  // list end-dt4
                      }  // container end-dt4s
    
                      container end-dt6s {
                        description
                          "List of End.DT6 type opcode configuration.";
                        list end-dt6 {
                          key "value";
                          unique "vpn-name";
                          description
                            "Configure End.DT6 type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf vpn-name {
                            ext:operation-exclude "update";
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            default "_public_";
                            description
                              "VPN name.";
                          }
    
                          leaf protocol {
                            type protocol-type;
                            must
                              "not(../vpn-name='_public_' and (../protocol='evpn' or ../protocol='evpn-l3vpn'))";
                            default "l3vpn";
                            description
                              "Protocol type.";
                          }
                        }  // list end-dt6
                      }  // container end-dt6s
    
                      container end-ms {
                        description
                          "List of End.M type opcode configuration.";
                        list end-m {
                          must
                            "../../../flex-algo=0";
                          key "value mirror-prefix mirror-mask";
                          description
                            "Configure End.M type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf mirror-prefix {
                            type inet:ipv6-address-no-zone;
                            description
                              "Mirror locator prefix.";
                          }
    
                          leaf mirror-mask {
                            type uint8 {
                              range "32..120";
                            }
                            description
                              "Mirror locator mask.";
                          }
                        }  // list end-m
                      }  // container end-ms
    
                      container end-dx4s {
                        description
                          "List of End.DX4 type opcode configuration.";
                        list end-dx4 {
                          key "value vpn-name if-name next-hop";
                          description
                            "Configure End.DX4 type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf vpn-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            must
                              "../vpn-name!='_public_'";
                            description
                              "VPN name.";
                          }
    
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Interface name. Only support physical port.";
                          }
    
                          leaf next-hop {
                            type inet:ipv4-address-no-zone;
                            description
                              "NextHop address.";
                          }
    
                          leaf protocol {
                            type protocol-type;
                            mandatory true;
                            description
                              "Protocol type.";
                          }
                        }  // list end-dx4
                      }  // container end-dx4s
    
                      container end-dx6s {
                        description
                          "List of End.DX6 type opcode configuration.";
                        list end-dx6 {
                          key "value vpn-name if-name next-hop";
                          description
                            "Configure End.DX6 type opcode configuration.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf vpn-name {
                            type leafref {
                              path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                            }
                            must
                              "../vpn-name!='_public_'";
                            description
                              "VPN name.";
                          }
    
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Interface name. Only support physical port.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "Nexthop address.";
                          }
    
                          leaf protocol {
                            type protocol-type;
                            mandatory true;
                            description
                              "Protocol type.";
                          }
                        }  // list end-dx6
                      }  // container end-dx6s
    
                      container end-ass {
                        description
                          "List of End.AS type opcode.";
                        list end-as {
                          must
                            "(service-class and color) or (not(service-class) and not(color))";
                          key "value";
                          description
                            "Configure End.AS type opcode.";
                          leaf value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf backup-value {
                            type inet:ipv6-address-no-zone;
                            description
                              "Backup proxy SID function opcode value. The value ranges from ::1 to ::XX, in which XX is an IPv6 address translated from 2^static-length minus 1.";
                          }
    
                          leaf inner-type {
                            type inner-type;
                            default "null";
                            description
                              "Inner packet type.";
                          }
    
                          leaf bypass-enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable bypass function of SFC.";
                          }
    
                          leaf bypass-sid {
                            when
                              "../bypass-enable='true'";
                            type inet:ipv6-address-no-zone;
                            description
                              "Bypass SID, that must be a valid SID of other protection device in the SF group.";
                          }
    
                          choice service-mode {
                            default "uniform";
                            description
                              "Configure differenciated service mode.";
                            case pipe {
                              description
                                "Pipe mode.";
                              leaf service-class {
                                type service-class;
                                description
                                  "Class of service.";
                              }
    
                              leaf color {
                                type color;
                                description
                                  "Packet color.";
                              }
                            }  // case pipe
    
                            case uniform {
                              description
                                "Uniform mode.";
                              leaf diffserv-uniform {
                                type empty;
                                description
                                  "Uniform mode.";
                              }
                            }  // case uniform
                          }  // choice service-mode
    
                          choice ttl-mode {
                            default "uniform";
                            description
                              "Configure TTL mode.";
                            case pipe {
                              description
                                "Pipe mode.";
                              leaf ttl-value {
                                type uint8 {
                                  range "1..255";
                                }
                                description
                                  "TTL value.";
                              }
                            }  // case pipe
    
                            case uniform {
                              description
                                "Uniform mode.";
                              leaf ttl-uniform {
                                type empty;
                                description
                                  "Uniform mode.";
                              }
                            }  // case uniform
                          }  // choice ttl-mode
    
                          container l2-fwds {
                            description
                              "List of encapsulation for layer 2 packet forwarding.";
                            list l2-fwd {
                              key "out-ifname in-ifname out-vlan in-vlan out-ce-vlan in-ce-vlan";
                              max-elements 1;
                              description
                                "Configure encapsulation for layer 2 packet forwarding.";
                              leaf out-ifname {
                                type leafref {
                                  path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                }
                                must
                                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:l2-mode-enable='true'";
                                description
                                  "Outbound interface from SFF to SF, this interface must be exclusively used by SFC.";
                              }
    
                              leaf in-ifname {
                                type leafref {
                                  path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                }
                                must
                                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:l2-mode-enable='true'";
                                description
                                  "Inbound interface from SF to SFF, this interface must be exclusively used by SFC.";
                              }
    
                              leaf out-vlan {
                                type uint32 {
                                  ext:value-meaning {
                                    ext:item "0" {
                                      ext:meaning "no-set";
                                      description "Value 0 means that the VLAN ID is not set.";
                                    }
                                  }
                                  range
                                    "0..4094";
                                }
                                description
                                  "Outer VLAN ID of the outbound interface from SFF to SF.";
                              }
    
                              leaf in-vlan {
                                type uint32 {
                                  ext:value-meaning {
                                    ext:item "0" {
                                      ext:meaning "no-set";
                                      description "Value 0 means that the VLAN ID is not set.";
                                    }
                                  }
                                  range
                                    "0..4094";
                                }
                                description
                                  "Outer VLAN ID of the inbound interface from SF to SFF.";
                              }
    
                              leaf out-ce-vlan {
                                type uint32 {
                                  ext:value-meaning {
                                    ext:item "0" {
                                      ext:meaning "no-set";
                                      description "Value 0 means that the VLAN ID is not set.";
                                    }
                                  }
                                  range
                                    "0..4094";
                                }
                                must
                                  "../out-vlan!=0";
                                description
                                  "Inner VLAN ID of the outbound interface from SFF to SF.";
                              }
    
                              leaf in-ce-vlan {
                                type uint32 {
                                  ext:value-meaning {
                                    ext:item "0" {
                                      ext:meaning "no-set";
                                      description "Value 0 means that the VLAN ID is not set.";
                                    }
                                  }
                                  range
                                    "0..4094";
                                }
                                must
                                  "../in-vlan!=0";
                                description
                                  "Inner VLAN ID of the inbound interface from SF to SFF.";
                              }
    
                              leaf dest-mac {
                                type pub-type:mac-address;
                                description
                                  "MAC address of destination for the inbound interface, that is H-H-H.";
                              }
                            }  // list l2-fwd
                          }  // container l2-fwds
    
                          container l3-fwds {
                            description
                              "List of encapsulation for layer 3 packet forwarding.";
                            list l3-fwd {
                              key "next-hop in-ifname out-ifname";
                              description
                                "Configure encapsulation for layer 3 packet forwarding.";
                              leaf next-hop {
                                type inet:ipv4-address-no-zone;
                                description
                                  "IPv4 next hop address.";
                              }
    
                              leaf in-ifname {
                                type leafref {
                                  path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                }
                                must
                                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:type='Vbdif'";
                                description
                                  "Inbound interface from SF to SFF, this interface must be exclusively used by SFC.";
                              }
    
                              leaf out-ifname {
                                type leafref {
                                  path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                                }
                                must
                                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:type='Vbdif'";
                                description
                                  "Outbound interface from SFF to SF, this interface must be exclusively used by SFC.";
                              }
    
                              leaf symmetric-index {
                                type uint32 {
                                  range
                                    "1..4294967295";
                                }
                                description
                                  "Symmetric index for the forward and reverse traffic on the same VM.";
                              }
                            }  // list l3-fwd
                          }  // container l3-fwds
    
                          container cache {
                            description
                              "Configure SR information to be attached on the traffic coming back from SF.";
                            leaf source-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "IPv6 source address that encapsulated on the traffic coming back from SF.";
                            }
    
                            leaf sl-num {
                              type uint32 {
                                range "0..10";
                              }
                              config false;
                              description
                                "Number of route segments remaining.";
                            }
    
                            container ipv6addrs {
                              description
                                "List of IPv6 address for encapsulating on the traffic coming back from SF. The local End.AS SID must be in the address list except the first address.";
                              list ipv6addr {
                                key "ipv6-address";
                                max-elements
                                  11;
                                ordered-by
                                  user;
                                description
                                  "Configure the IPv6 address for encapsulating on the traffic coming back from SF.";
                                leaf ipv6-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Configure the IPv6 address for encapsulating on the traffic coming back from SF.";
                                }
                              }  // list ipv6addr
                            }  // container ipv6addrs
                          }  // container cache
                        }  // list end-as
                      }  // container end-ass
                    }  // container opcodes
    
                    container attribute {
                      config false;
                      description
                        "Operational data of locator.";
                      leaf block {
                        type inet:ipv6-address-no-zone;
                        description
                          "Block segment.";
                      }
    
                      leaf node-id {
                        type inet:ipv6-address-no-zone;
                        description
                          "NodeId segment.";
                      }
    
                      leaf node-id-length {
                        type uint8 {
                          range "0..255";
                        }
                        description
                          "Length of the NodeId segment.";
                      }
    
                      leaf reference {
                        type uint16 {
                          range "0..65535";
                        }
                        description
                          "Number of times the locator is referenced.";
                      }
    
                      leaf compress-dynamic-sid-pool-id {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "ID of a compressed dynamic SID pool.";
                      }
    
                      leaf compress-dynamic-length {
                        type uint8 {
                          range "0..255";
                        }
                        description
                          "Length of the compression dynamic segment.";
                      }
    
                      leaf compress-dynamic-sid-begin {
                        type inet:ipv6-address-no-zone;
                        description
                          "Start value in the range of compressed dynamic SIDs.";
                      }
    
                      leaf compress-dynamic-sid-end {
                        type inet:ipv6-address-no-zone;
                        description
                          "End value in the range of compressed dynamic SIDs.";
                      }
    
                      leaf compress-static-sid-begin {
                        type inet:ipv6-address-no-zone;
                        description
                          "Start value in the range of compressed static SIDs.";
                      }
    
                      leaf compress-static-sid-end {
                        type inet:ipv6-address-no-zone;
                        description
                          "End value in the range of compressed static SIDs.";
                      }
    
                      leaf dynamic-sid-pool-id {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "ID of a dynamic SID pool.";
                      }
    
                      leaf dynamic-length {
                        type uint8 {
                          range "0..255";
                        }
                        description
                          "Length of the dynamic segment.";
                      }
    
                      leaf dynamic-sid-begin {
                        type inet:ipv6-address-no-zone;
                        description
                          "Start value in the range of dynamic SIDs.";
                      }
    
                      leaf dynamic-sid-end {
                        type inet:ipv6-address-no-zone;
                        description
                          "End value in the range of dynamic SIDs.";
                      }
    
                      leaf static-sid-begin {
                        type inet:ipv6-address-no-zone;
                        description
                          "Start value in the range of static SIDs.";
                      }
    
                      leaf static-sid-end {
                        type inet:ipv6-address-no-zone;
                        description
                          "End value in the range of static SIDs.";
                      }
                    }  // container attribute
                  }  // list locator
                }  // container locators
    
                container remote-end-ops {
                  when "../enable='true'";
                  description
                    "List of remote End.OTP configuration.";
                  list remote-end-op {
                    key "sid";
                    description
                      "Configure remote End.OTP configuration.";
                    leaf sid {
                      type inet:ipv6-address-no-zone;
                      description
                        "Remote End.OTP SID.";
                    }
    
                    leaf prefix-length {
                      type uint8 {
                        range "1..128";
                      }
                      mandatory true;
                      description
                        "Remote End.OTP SID prefix length.";
                    }
                  }  // list remote-end-op
                }  // container remote-end-ops
    
                container local-sids {
                  config false;
                  description
                    "Statistics of segment routing IPv6 local SID list.";
                  container ends {
                    description
                      "List of segment routing IPv6 End local SID list.";
                    list end {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end
                  }  // container ends
    
                  container end-psps {
                    description
                      "List of segment routing IPv6 End psp local SID list.";
                    list end-psp {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End psp local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-psp
                  }  // container end-psps
    
                  container end-psp-usp-usds {
                    description
                      "List of segment routing IPv6 End psp-usp-usd local SID list.";
                    list end-psp-usp-usd {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End psp-usp-usd local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-psp-usp-usd
                  }  // container end-psp-usp-usds
    
                  container end-psp-usp-usd-cocs {
                    description
                      "List of segment routing IPv6 End psp-usp-usd-coc local SID list.";
                    list end-psp-usp-usd-coc {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End psp-usp-usd-coc local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End psp-usp-usd-coc SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-psp-usp-usd-coc
                  }  // container end-psp-usp-usd-cocs
    
                  container end-ops {
                    description
                      "List of segment routing IPv6 End.OP local SID list.";
                    list end-op {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.OP local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.OP SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-op
                  }  // container end-ops
    
                  container end-xs {
                    description
                      "List of segment routing IPv6 End.X local SID list.";
                    list end-x {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.X local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.X SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
    
                      container next-hops {
                        description
                          "List of next hop information.";
                        list next-hop {
                          key "if-name next-hop";
                          description
                            "Statistics of next hop information.";
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Exit interface.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "Next hop IPv6 address.";
                          }
                        }  // list next-hop
                      }  // container next-hops
                    }  // list end-x
                  }  // container end-xs
    
                  container end-x-psps {
                    description
                      "List of segment routing IPv6 End.X psp local SID list.";
                    list end-x-psp {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.X psp local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.X SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
    
                      container next-hops {
                        description
                          "List of next hop information.";
                        list next-hop {
                          key "if-name next-hop";
                          description
                            "Statistics of next hop information.";
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Exit interface.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "Next hop IPv6 address.";
                          }
                        }  // list next-hop
                      }  // container next-hops
                    }  // list end-x-psp
                  }  // container end-x-psps
    
                  container end-x-psp-usp-usds {
                    description
                      "List of segment routing IPv6 End.X psp-usp-usd local SID list.";
                    list end-x-psp-usp-usd {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.X psp-usp-usd local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.X SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
    
                      container next-hops {
                        description
                          "List of next hop information.";
                        list next-hop {
                          key "if-name next-hop";
                          description
                            "Statistics of next hop information.";
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Exit interface.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "Next hop IPv6 address.";
                          }
                        }  // list next-hop
                      }  // container next-hops
                    }  // list end-x-psp-usp-usd
                  }  // container end-x-psp-usp-usds
    
                  container end-x-psp-usp-usd-cocs {
                    description
                      "List of segment routing IPv6 End.X psp-usp-usd-coc local SID list.";
                    list end-x-psp-usp-usd-coc {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.X psp-usp-usd-coc local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.X psp-usp-usd-coc SID value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
    
                      container next-hops {
                        description
                          "List of next hop information.";
                        list next-hop {
                          key "if-name next-hop";
                          description
                            "Statistics of next hop information.";
                          leaf if-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Exit interface.";
                          }
    
                          leaf next-hop {
                            type inet:ipv6-address-no-zone;
                            description
                              "Next hop IPv6 address.";
                          }
                        }  // list next-hop
                      }  // container next-hops
                    }  // list end-x-psp-usp-usd-coc
                  }  // container end-x-psp-usp-usd-cocs
    
                  container end-dt2us {
                    description
                      "List of segment routing IPv6 End.DT2U local SID list.";
                    list end-dt2u {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DT2U local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DT2U SID value.";
                      }
    
                      leaf bd-id {
                        ext:support-filter "true";
                        type uint32 {
                          range "1..16777215";
                        }
                        description
                          "The Bridge-domain ID corresponding to the SID.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dt2u
                  }  // container end-dt2us
    
                  container end-dt2uls {
                    description
                      "List of segment routing IPv6 End.DT2UL local SID list.";
                    list end-dt2ul {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DT2UL local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DT2UL SID value.";
                      }
    
                      leaf bd-id {
                        ext:support-filter "true";
                        type uint32 {
                          range "1..16777215";
                        }
                        description
                          "The Bridge-domain ID corresponding to the SID.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dt2ul
                  }  // container end-dt2uls
    
                  container end-dt2ms {
                    description
                      "List of segment routing IPv6 End.DT2M local SID list.";
                    list end-dt2m {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DT2M local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DT2M SID value.";
                      }
    
                      leaf bd-id {
                        ext:support-filter "true";
                        type uint32 {
                          range "1..16777215";
                        }
                        description
                          "The Bridge-domain ID corresponding to the SID.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dt2m
                  }  // container end-dt2ms
    
                  container end-dx2s {
                    description
                      "List of segment routing IPv6 End.DX2 local SID list.";
                    list end-dx2 {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DX2 local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DX2 SID value.";
                      }
    
                      leaf evpl-id {
                        ext:support-filter "true";
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "EVPL ID mapped to the SID.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dx2
                  }  // container end-dx2s
    
                  container end-dx2ls {
                    description
                      "List of segment routing IPv6 End.DX2L local SID list.";
                    list end-dx2l {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DX2L local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DX2L SID value.";
                      }
    
                      leaf evpl-id {
                        ext:support-filter "true";
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "EVPL ID mapped to the SID.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dx2l
                  }  // container end-dx2ls
    
                  container end-dt4s {
                    description
                      "List of segment routing IPv6 End.DT4 local SID list.";
                    list end-dt4 {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DT4 local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DT4 SID value.";
                      }
    
                      leaf vpn-name {
                        type string {
                          length "1..31";
                        }
                        description "VPN name.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dt4
                  }  // container end-dt4s
    
                  container end-dt6s {
                    description
                      "List of segment routing IPv6 End.DT6 local SID list.";
                    list end-dt6 {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.DT6 local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.DT6 SID value.";
                      }
    
                      leaf vpn-name {
                        type string {
                          length "1..31";
                        }
                        description "VPN name.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-dt6
                  }  // container end-dt6s
    
                  container end-ms {
                    config false;
                    description
                      "List of segment routing IPv6 End.M local SID list.";
                    list end-m {
                      key "value";
                      config false;
                      description
                        "Statistics of segment routing IPv6 End.M local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        config false;
                        description
                          "End.M SID value.";
                      }
    
                      leaf flavor {
                        type string {
                          length "1..64";
                        }
                        config false;
                        description
                          "End SID flavor value.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        config false;
                        description
                          "Locator name.";
                      }
    
                      leaf mirror-locator-number {
                        type uint32;
                        config false;
                        description
                          "Mirror locator number.";
                      }
    
                      leaf mirror-locator-set {
                        type string {
                          length "1..360";
                        }
                        config false;
                        description
                          "Mirror locator address set.";
                      }
                    }  // list end-m
                  }  // container end-ms
    
                  container end-dx4s {
                    config false;
                    description
                      "List of segment routing IPv6 End.DX4 local SID list.";
                    list end-dx4 {
                      key "value";
                      config false;
                      description
                        "Statistics of segment routing IPv6 End.DX4 local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        config false;
                        description
                          "End.DX4 SID value.";
                      }
    
                      leaf vpn-name {
                        type string {
                          length "1..31";
                        }
                        config false;
                        description "VPN name.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        config false;
                        description
                          "Locator name.";
                      }
    
                      leaf if-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Exit interface.";
                      }
    
                      leaf next-hop {
                        type inet:ipv4-address-no-zone;
                        description
                          "Next hop IPv4 address.";
                      }
                    }  // list end-dx4
                  }  // container end-dx4s
    
                  container end-dx6s {
                    config false;
                    description
                      "List of segment routing IPv6 End.DX6 local SID list.";
                    list end-dx6 {
                      key "value";
                      config false;
                      description
                        "Statistics of segment routing IPv6 End.DX6 local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        config false;
                        description
                          "End.DX6 SID value.";
                      }
    
                      leaf vpn-name {
                        type string {
                          length "1..31";
                        }
                        config false;
                        description "VPN name.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        config false;
                        description
                          "Locator name.";
                      }
    
                      leaf if-name {
                        type string {
                          length "1..32";
                        }
                        description
                          "Exit interface.";
                      }
    
                      leaf next-hop {
                        type inet:ipv6-address-no-zone;
                        description
                          "Next hop IPv6 address.";
                      }
                    }  // list end-dx6
                  }  // container end-dx6s
    
                  container end-b6s {
                    description
                      "List of segment routing IPv6 End.B6 local SID list.";
                    list end-b6 {
                      key "value";
                      description
                        "Statistics of segment routing IPv6 End.B6 local SID list.";
                      leaf value {
                        type inet:ipv6-address-no-zone;
                        description
                          "End.B6 SID value.";
                      }
    
                      leaf tunnel-id {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description "Tunnel Id.";
                      }
    
                      leaf tunnel-type {
                        type string {
                          length "1..16";
                        }
                        description
                          "Tunnel type.";
                      }
    
                      leaf tunnel-vrf-id {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Tunnel VRF Id.";
                      }
    
                      leaf encapsulation-mode {
                        type encapsulation-type;
                        description
                          "Encapsulation mode.";
                      }
    
                      leaf slice-enable {
                        type boolean;
                        description
                          "Whether the slice is enabled.";
                      }
    
                      leaf locator-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "Locator name.";
                      }
                    }  // list end-b6
                  }  // container end-b6s
                }  // container local-sids
              }  // container srv6
    
              container qos-l3vpn {
                description
                  "Configure QoS application.";
                container policy-applys {
                  when
                    "not(../../ni:name='_public_')";
                  description
                    "List of traffic policy applications.";
                  list policy-apply {
                    key "direction";
                    max-elements 1;
                    description
                      "Configure traffic policy applications.";
                    leaf direction {
                      type qos:in-direction-type;
                      description "Direction.";
                    }
    
                    leaf policy-name {
                      ext:operation-exclude "update" {
                        description "After the configuration is created, the node cannot be modified.";
                      }
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:traffic-policys/qos:traffic-policy/qos:name";
                      }
                      mandatory true;
                      description "Policy name.";
                    }
                  }  // list policy-apply
                }  // container policy-applys
    
                container vxlan-car-disables {
                  must
                    "count(./vxlan-car-disable[exclude='exclude'])=0 or count(./vxlan-car-disable[exclude='no-exclude'])=0";
                  description
                    "List of traffic policy action CAR disable slot VXLAN mode.";
                  list vxlan-car-disable {
                    key "slot-id";
                    description
                      "Configure CAR operation.";
                    leaf slot-id {
                      type string {
                        length "0..32";
                        pattern
                          '(c[cl]c\d+/)?\d+';
                      }
                      description
                        "CAR disable slot.";
                    }
    
                    leaf exclude {
                      ext:operation-exclude "update" {
                        description "After the configuration is created, the node cannot be modified.";
                      }
                      type qos:exclude-type;
                      mandatory true;
                      description
                        "Exclude mode.";
                    }
                  }  // list vxlan-car-disable
                }  // container vxlan-car-disables
    
                container vxlan-phb {
                  presence "create vxlan-phb ";
                  description
                    "Enable/disable PHB operation.";
                  leaf diffserv-domain-name {
                    type leafref {
                      path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                    }
                    mandatory true;
                    description
                      "Name of a DS domain.";
                  }
                }  // container vxlan-phb
    
                container vxlan-mode-trusts {
                  description
                    "List of trust diffserv domain or 8021p.";
                  list vxlan-mode-trust {
                    key "trust-type";
                    description
                      "Configure trust diffserv domain or 8021p.";
                    leaf trust-type {
                      type qos:vxlan-trust-type;
                      description
                        "To select trusting diffserv domain or 8021p.";
                    }
    
                    leaf ds-name {
                      when
                        "../trust-type='upstream'";
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                      }
                      mandatory true;
                      description
                        "Name of a DS domain.";
                    }
                  }  // list vxlan-mode-trust
                }  // container vxlan-mode-trusts
              }  // container qos-l3vpn
    
              container segment-routing {
                when "../ni:name='_public_'";
                description
                  "Configure segment routing.";
                leaf enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable segment routing.";
                }
    
                leaf tunnel-prefer {
                  when "../enable='true'";
                  type enumeration {
                    enum "ldp" {
                      value 1;
                      description "LDP tunnel.";
                    }
                    enum "sr-be" {
                      value 2;
                      description
                        "SR BE tunnel.";
                    }
                  }
                  default "ldp";
                  description
                    "Prefer segment routing tunnel.";
                }
    
                container srlbs {
                  when "../enable='true'";
                  description
                    "List of segment routing local block.";
                  list srlb {
                    key "begin end";
                    max-elements 1;
                    description
                      "Configure segment routing local block. Currently only one configuration is supported.";
                    leaf begin {
                      type uint32 {
                        range "16..1048575";
                      }
                      description
                        "SRLB begin value. The value range is determined by the PAF file of the corresponding device.
    Special explanation:
    Range: The range comes from PAF.";
                    }
    
                    leaf end {
                      type uint32 {
                        range "16..1048575";
                      }
                      description
                        "SRLB begin value. The value range is determined by the PAF file of the corresponding device.
    Special explanation:
    Range: The range comes from PAF.";
                    }
    
                    leaf ignore-conflict {
                      ext:operation-exclude "update";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable flag indicating that a label conflict is ignored.";
                    }
                  }  // list srlb
                }  // container srlbs
    
                container bfds {
                  when "../enable='true'";
                  description
                    "List of SRBFDS configuration.";
                  list bfd {
                    key "type mode-type";
                    max-elements 1;
                    description
                      "Configure SRBFDS configuration.";
                    leaf type {
                      type bfd-type;
                      description
                        "Sets a BFD type.";
                    }
    
                    leaf mode-type {
                      type enumeration {
                        enum "tunnel" {
                          value 1;
                          description
                            "The type of session mode is tunnel.";
                        }
                      }
                      description
                        "Sets a session mode.";
                    }
    
                    leaf ip-prefix {
                      type leafref {
                        path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                      }
                      description
                        "Sets a policy name.";
                    }
    
                    leaf min-rx {
                      type uint32 {
                        range "3..20000";
                      }
                      units "ms";
                      default "10";
                      description
                        "Sets a minimum receive interval. Different products have different value ranges.";
                    }
    
                    leaf min-tx {
                      type uint32 {
                        range "3..20000";
                      }
                      units "ms";
                      default "10";
                      description
                        "Sets a minimum transmit interval. Different products have different value ranges.";
                    }
    
                    leaf detect-multiplier {
                      type uint32 {
                        range "3..50";
                      }
                      default "3";
                      description
                        "Sets a detect multiplier.";
                    }
    
                    leaf effect-sr-lsp {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable effect SR BE tunnel.";
                    }
    
                    leaf nil-fec {
                      when "../type='bfd'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable use nil FEC.";
                    }
                  }  // list bfd
                }  // container bfds
    
                container traffic-stats {
                  when "../enable='true'";
                  description
                    "Configure the stats of SR traffic.";
                  leaf mode {
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "SRBE traffic statistics are not enabled.";
                      }
                      enum "host" {
                        value 1;
                        description
                          "SRBE traffic statistics host mode.";
                      }
                      enum "ip-prefix" {
                        value 2;
                        description
                          "SRBE traffic statistics host IP prefix mode.";
                      }
                    }
                    must
                      "../mode!='ip-prefix' or ../prefix-name";
                    default "none";
                    description
                      "The stats mode of SR traffic.";
                  }
    
                  leaf prefix-name {
                    when "../mode='ip-prefix'";
                    type leafref {
                      path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                    }
                    description
                      "The name of prefix.";
                  }
                }  // container traffic-stats
    
                container adjacency-sid {
                  when "../enable='true'";
                  description
                    "Configure Segment Routing IPv4 static adjacency label.";
                  container globals {
                    description
                      "List of Segment Routing global linkage label.";
                    list global {
                      key "local-ip-address remote-ip-address absolute-sid";
                      description
                        "Configure Segment Routing global linkage label.";
                      leaf local-ip-address {
                        type inet:ipv4-address-no-zone;
                        description
                          "Specifies the ip address of the local interface.";
                      }
    
                      leaf remote-ip-address {
                        type inet:ipv4-address-no-zone;
                        must
                          "../local-ip-address!=../remote-ip-address";
                        description
                          "Remote ip address.";
                      }
    
                      leaf absolute-sid {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description
                          "Segment ID. The value range is determined by the PAF. The yang node is static-label-blocks of huawei-segment-routing.";
                      }
                    }  // list global
                  }  // container globals
                }  // container adjacency-sid
    
                container bindings {
                  when "../enable='true'";
                  description
                    "Configure bindings.";
                  container prefix-sid-mappings {
                    description
                      "List of address prefix mapping SID information.";
                    list prefix-sid-mapping {
                      must
                        "start-sid + range <= 65535";
                      key "ip-address mask-length algorithm";
                      description
                        "Configure address prefix mapping SID information.";
                      leaf ip-address {
                        type inet:ipv4-address-no-zone;
                        description
                          "Address prefix.";
                      }
    
                      leaf mask-length {
                        type uint8 {
                          range "32";
                        }
                        description
                          "Mask length of address, only the 32 bit mask length is supported currently.";
                      }
    
                      leaf algorithm {
                        type uint32 {
                          range "0";
                        }
                        description
                          "Prefix SID algorithm.";
                      }
    
                      leaf start-sid {
                        ext:operation-exclude "update";
                        type uint32 {
                          range "0..65534";
                        }
                        mandatory true;
                        description
                          "Start of SID index range.";
                      }
    
                      leaf range {
                        ext:operation-exclude "update";
                        type uint16 {
                          range "1..65535";
                        }
                        default "1";
                        description
                          "Number of allocated SIDs.";
                      }
    
                      leaf attach-flag {
                        ext:operation-exclude "update";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the attach flag.";
                      }
                    }  // list prefix-sid-mapping
                  }  // container prefix-sid-mappings
                }  // container bindings
    
                container flex-algo-sbfds {
                  when "../sr:enable='true'";
                  description
                    "Configure sr flexible algorithm seamless bfd.";
                  leaf flex-algo-id {
                    type pub-type:id-range {
                      pattern
                        '((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])?(-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))?(,((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])(-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))?))*)|((([\+|\-](12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))|([\+|\-]\((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])\)))?(,(([\+|\-](12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))|([\+|\-]\((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])\))))*)';
                    }
                    description
                      "Flexible algorithm identifier.";
                  }
                }  // container flex-algo-sbfds
    
                container flex-algo-traffic-statis {
                  when "../sr:enable='true'";
                  description
                    "Configure sr flexible algorithm traffic flow statistics.";
                  leaf flex-algo-id {
                    type pub-type:id-range {
                      pattern
                        '((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])?(-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))?(,((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])(-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))?))*)|((([\+|\-](12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))|([\+|\-]\((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])\)))?(,(([\+|\-](12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5]))|([\+|\-]\((12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])-(12[8-9]|1[3-9][0-9]|2[0-4][0-9]|25[0-5])\))))*)';
                    }
                    description
                      "Flexible algorithm identifier.";
                  }
                }  // container flex-algo-traffic-statis
    
                container static-label-blocks {
                  config false;
                  description
                    "List of segment routing global block.";
                  list static-label-block {
                    key "lower-sid upper-sid";
                    config false;
                    description
                      "Statistics of segment routing global block. The range of global labels reserved by the local device for segment routing.";
                    leaf lower-sid {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Minimum SID available.";
                    }
    
                    leaf upper-sid {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Maximum SID available.";
                    }
    
                    leaf range {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Total number of SIDs available.";
                    }
                  }  // list static-label-block
                }  // container static-label-blocks
    
                container ipv4-state {
                  config false;
                  description
                    "Statistics of IPv4.";
                  container prefix-mpls-forwardings {
                    description
                      "List of label for transmission.";
                    list prefix-mpls-forwarding {
                      key "ip-address mask-length";
                      description
                        "Statistics of label for transmission.";
                      leaf ip-address {
                        type inet:ipv4-address-no-zone;
                        description
                          "The prefix IP address.";
                      }
    
                      leaf mask-length {
                        type uint8 {
                          range "1..32";
                        }
                        description
                          "The length of prefix mask.";
                      }
    
                      leaf flex-algo-id {
                        ext:support-filter "true";
                        type uint8 {
                          range "0|128..255";
                        }
                        description
                          "Flexible algorithm identifier.";
                      }
    
                      leaf in-label {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description "In label.";
                      }
    
                      leaf out-label {
                        type string {
                          length "1..20";
                        }
                        description "Out label.";
                      }
    
                      leaf if-name {
                        type string {
                          length "1..64";
                        }
                        description
                          "Local interface.";
                      }
    
                      leaf next-hop {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of next hop.";
                      }
    
                      leaf lsp-xc-role {
                        type string {
                          length "1..50";
                        }
                        description
                          "Label type.";
                      }
    
                      leaf mpls-mtu {
                        type string {
                          length "1..50";
                        }
                        units "Byte";
                        description
                          "MPLS maximum transmission unit (MTU).";
                      }
    
                      leaf mtu {
                        type uint32 {
                          range "1..4294967295";
                        }
                        units "Byte";
                        description "MTU.";
                      }
    
                      leaf state {
                        type string {
                          length "1..50";
                        }
                        description
                          "Lable state.";
                      }
                    }  // list prefix-mpls-forwarding
                  }  // container prefix-mpls-forwardings
    
                  container bfd-states {
                    config false;
                    description
                      "List of queries BFD session.";
                    list bfd-state {
                      key "type mode-type ip-address mask-length";
                      config false;
                      description
                        "Statistics of queries BFD session.";
                      leaf type {
                        type bfd-type;
                        description "BFD type.";
                      }
    
                      leaf mode-type {
                        type enumeration {
                          enum "tunnel" {
                            value 1;
                            description
                              "The type of session mode is tunnel.";
                          }
                        }
                        description
                          "Session mode.";
                      }
    
                      leaf ip-address {
                        type inet:ipv4-address-no-zone;
                        description
                          "Destination IP address.";
                      }
    
                      leaf mask-length {
                        type uint8 {
                          range "1..32";
                        }
                        description
                          "IP address mask length.";
                      }
    
                      leaf state {
                        type string {
                          length "1..64";
                        }
                        description
                          "Session state.";
                      }
    
                      leaf discriminator {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Local discriminator.";
                      }
    
                      leaf source {
                        type inet:ipv4-address-no-zone;
                        description
                          "Source IP address.";
                      }
                    }  // list bfd-state
                  }  // container bfd-states
    
                  container adjacency-mpls-forwardings {
                    config false;
                    description
                      "List of label for segment routing adjacency.";
                    list adjacency-mpls-forwarding {
                      key "label";
                      description
                        "Statistics of label for segment routing adjacency.";
                      leaf label {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description
                          "SID specified in the IPv4 adjacency command.";
                      }
    
                      leaf if-name {
                        type string {
                          length "1..50";
                        }
                        description
                          "Local interface.";
                      }
    
                      leaf next-hop {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the remote interface specified in the IPv4 adjacency command.";
                      }
    
                      leaf type {
                        type string {
                          length "1..50";
                        }
                        description
                          "Connection type.";
                      }
    
                      leaf mpls-mtu {
                        type string {
                          length "1..50";
                        }
                        units "Byte";
                        description
                          "MPLS maximum transmission unit (MTU).";
                      }
    
                      leaf mtu {
                        type uint32 {
                          range "1..4294967295";
                        }
                        units "Byte";
                        description
                          "Maximum transmission unit (MTU).";
                      }
                    }  // list adjacency-mpls-forwarding
                  }  // container adjacency-mpls-forwardings
                }  // container ipv4-state
    
                container traffic-statistics {
                  config false;
                  description
                    "List of SR LSP traffic statistics.";
                  list traffic-statistic {
                    key "ip-address mask-length lsp-type in-label out-label flex-algo-id";
                    description
                      "Statistics of traffic of SR LSP.";
                    leaf ip-address {
                      type inet:ipv4-address-no-zone;
                      description
                        "Specifies an interface IP address.";
                    }
    
                    leaf mask-length {
                      type uint32 {
                        range "0..32";
                      }
                      description
                        "Specifies a mask length.";
                    }
    
                    leaf lsp-type {
                      type segr-lsp-type;
                      description "LSR type.";
                    }
    
                    leaf in-label {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description "In label.";
                    }
    
                    leaf out-label {
                      type string {
                        length "1..20";
                      }
                      description "Out label.";
                    }
    
                    leaf flex-algo-id {
                      type uint8 {
                        range "0|128..255";
                      }
                      description
                        "Flexible algorithm identifier.";
                    }
    
                    leaf out-interface {
                      type string {
                        length "1..64";
                      }
                      description
                        "Outbound interface name.";
                    }
    
                    leaf next-hop {
                      type inet:ipv4-address-no-zone;
                      description
                        "IP address of next hop.";
                    }
    
                    leaf current-time {
                      type yang:date-and-time;
                      description
                        "Current time.";
                    }
    
                    leaf flow-period {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Traffic statistics period.";
                    }
    
                    leaf last-period-bit-rate {
                      type uint64;
                      units "bit/s";
                      description
                        "Out Bites Rate of the last period.";
                    }
    
                    leaf last-period-packet-rate {
                      type uint64;
                      units "pps";
                      description
                        "Out Packet Rate of the last period.";
                    }
    
                    leaf query-interval {
                      type uint64;
                      description
                        "Query interval.";
                    }
    
                    leaf interval-bit-rate {
                      type uint64;
                      units "bit/s";
                      description
                        "Realtime period output rate.";
                    }
    
                    leaf interval-packet-rate {
                      type uint64;
                      units "pps";
                      description
                        "Realtime period output packet rate.";
                    }
    
                    leaf output-bytes {
                      type uint64;
                      description
                        "Numbers of sent bytes.";
                    }
    
                    leaf output-packets {
                      type uint64;
                      description
                        "Numbers of sent packets.";
                    }
                  }  // list traffic-statistic
                }  // container traffic-statistics
              }  // container segment-routing
    
              container ipv4-ifs {
                status deprecated;
                description
                  "List of IPv4 configurations.";
                list ipv4-if {
                  key "name";
                  status deprecated;
                  description
                    "Configure IPv4. Capabilities supported by this node vary according to interface types.";
                  leaf name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    status deprecated;
                    description
                      "The textual name of the interface. It should be the name of the interface as assigned by the local device. It should be suitable for use in commands which entered at the device's 'console'. This might be a text name, such as 'Loopback0', depending on the interface naming syntax of the device.";
                  }
    
                  choice address {
                    mandatory true;
                    status deprecated;
                    description
                      "The IPv4 address can be specified as negotiated or unnumbered or ordinarily address.";
                    case config-address {
                      status deprecated;
                      description
                        "Config IPv4 address.";
                      container addresses {
                        must
                          "count(address)=0 or count(address[type='main'])=1";
                        status deprecated;
                        description
                          "List of IPv4 addresses. The IPv4 address of the DCN interface cannot be created, modified, or deleted.";
                        list address {
                          key "ip";
                          status deprecated;
                          description
                            "Configure an IPv4 address to the interface.";
                          leaf ip {
                            type inet:ipv4-address-no-zone;
                            must
                              "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']";
                            status deprecated;
                            description
                              "IPv4 address.";
                          }
    
                          leaf netmask {
                            type ipv4-netmask;
                            mandatory true;
                            status deprecated;
                            description
                              "IPv4 address mask.";
                          }
    
                          leaf type {
                            type ipv4-address-config-type;
                            mandatory true;
                            status deprecated;
                            description
                              "IPv4 address type.";
                          }
                        }  // list address
                      }  // container addresses
                    }  // case config-address
    
                    case unnumbered-address {
                      status deprecated;
                      description
                        "Unnumbered address.";
                      container unnumbered-if {
                        status deprecated;
                        description
                          "Configure unnumbered interface. The address borrowing relationship of the DCN interface cannot be created, modified, or deleted.";
                        leaf name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "../../if-ip:name!=../name and ../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast'] and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../if-ip:name]/ifm:vrf-name";
                          status deprecated;
                          description
                            "Name of an unnumbered interface.";
                        }
                      }  // container unnumbered-if
                    }  // case unnumbered-address
                  }  // choice address
                }  // list ipv4-if
              }  // container ipv4-ifs
    
              container ipv4-if-states {
                config false;
                status deprecated;
                description
                  "List of IPv4 address state.";
                list ipv4-if-state {
                  key "name";
                  config false;
                  status deprecated;
                  description
                    "Operational state of IPv4 addresses.";
                  leaf name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    config false;
                    status deprecated;
                    description
                      "The textual name of the interface. It should be the name of the interface as assigned by the local device. It should be suitable for use in commands which entered at the device's 'console'. This might be a text name, such as 'Loopback0', depending on the interface naming syntax of the device.";
                  }
    
                  container addresses {
                    config false;
                    status deprecated;
                    description
                      "List of IPv4 addresses.";
                    list address {
                      key "ip";
                      config false;
                      status deprecated;
                      description
                        "Operational state of IPv4 addresses.";
                      leaf ip {
                        type inet:ipv4-address-no-zone;
                        config false;
                        status deprecated;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type ipv4-netmask;
                        config false;
                        status deprecated;
                        description
                          "IPv4 address mask.";
                      }
    
                      leaf type {
                        type ipv4-address-state-type;
                        config false;
                        status deprecated;
                        description
                          "IPv4 address type.";
                      }
                    }  // list address
                  }  // container addresses
                }  // list ipv4-if-state
              }  // container ipv4-if-states
    
              container ipv6-ifs {
                status deprecated;
                description
                  "List of IPv6 configurations.";
                list ipv6-if {
                  key "name";
                  status deprecated;
                  description
                    "Configure IPv6. Capabilities supported by this node vary according to interface types.";
                  leaf name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    status deprecated;
                    description
                      "The textual name of the interface. It should be the name of the interface as assigned by the local device. It should be suitable for use in commands which entered at the device's 'console'. This might be a text name, such as 'Loopback0', depending on the interface naming syntax of the device.";
                  }
    
                  leaf mtu6 {
                    ext:dynamic-default;
                    type uint32 {
                      range "0..50000";
                    }
                    units "Byte";
                    status deprecated;
                    description
                      "IPv6 maximum transmission unit of an interface.
    Special explanation:
    Range: The server may restrict the allowed values for this leaf, depending on the interface's type.";
                  }
    
                  leaf spread-mtu-flag {
                    type boolean;
                    default "false";
                    status deprecated;
                    description
                      "Enable/disable the function of spreading the IPv6 MTU of main interface to subinterface.";
                  }
    
                  leaf auto-link-local {
                    type boolean;
                    must
                      "../auto-link-local = 'false' or (../auto-link-local = 'true' and ../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'])";
                    default "false";
                    status deprecated;
                    description
                      "Enable/disable an interface with the auto linklocal address function.";
                  }
    
                  container addresses {
                    status deprecated;
                    description
                      "List of IPv6 addresses.";
                    list address {
                      key "ip";
                      status deprecated;
                      description
                        "Configure an IPv6 address to the interface.";
                      leaf ip {
                        type inet:ipv6-address-no-zone;
                        must
                          "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                        status deprecated;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint32 {
                          range "1..128";
                        }
                        mandatory true;
                        status deprecated;
                        description
                          "Length of the IPv6 address prefix.";
                      }
    
                      leaf type {
                        type ipv6-address-config-type;
                        mandatory true;
                        status deprecated;
                        description
                          "IPv6 address type.";
                      }
    
                      leaf algorithm-type {
                        type ipv6-address-algorithm-type;
                        must
                          "(../type='global' and (../algorithm-type='none' or ../algorithm-type='cga' or ../algorithm-type='eui64') ) or (../type='link-local' and (../algorithm-type='none' or ../algorithm-type='cga') ) or (../type='anycast' and ../algorithm-type='none')";
                        default "none";
                        status deprecated;
                        description
                          "Address algorithm type.";
                      }
                    }  // list address
                  }  // container addresses
    
                  container nd-collection {
                    status deprecated;
                    description
                      "Configure ND interface configurations.";
                    container if-property {
                      status deprecated;
                      description
                        "Configure ND interface configurations.";
                      leaf retrans-timer {
                        type uint32 {
                          range
                            "1000..4294967295";
                        }
                        units "ms";
                        default "1000";
                        status deprecated;
                        description
                          "To set the retransmission timer of a router.";
                      }
    
                      leaf nud-reach-time {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Ip-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Pos' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Mp-group'";
                        type uint32 {
                          range "1..3600000";
                        }
                        units "ms";
                        default "1200000";
                        status deprecated;
                        description
                          "To set the reachable time of a neighbor.";
                      }
    
                      leaf attempts-value {
                        type uint32 {
                          range "0..600";
                        }
                        default "1";
                        status deprecated;
                        description
                          "To set the number of sent NS messages during DAD.";
                      }
    
                      leaf ns-mcast-flag {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination";
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "Flag of enabling multicast.";
                      }
    
                      leaf max-dyn-nb-num {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Ip-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Pos' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Mp-group'";
                        type uint64 {
                          range "0..65536";
                        }
                        default "0";
                        status deprecated;
                        description
                          "The maximum of limitation of dynamic neighbor.";
                      }
    
                      leaf dad-timeout {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination";
                        type uint32 {
                          range "1..60";
                        }
                        units "s";
                        default "1";
                        status deprecated;
                        description
                          "Timeout of DAD.";
                      }
    
                      leaf nud-attempts {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Ip-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Pos' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Mp-group'";
                        type uint8 {
                          range "1..10";
                        }
                        default "3";
                        status deprecated;
                        description
                          "ND entries NUD attempts.";
                      }
    
                      leaf na-glean {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Ip-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Pos' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='Mp-group'";
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "Flag of generating NB when receiving NA packet.";
                      }
    
                      leaf ma-flag {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "Flag of obtaining the routable address through state-based automatic configuration.";
                      }
    
                      leaf o-flag {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "To set state-based automatic configuration.";
                      }
    
                      leaf ra-halt-flag {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type nd-flag;
                        default "true";
                        status deprecated;
                        description
                          "To suppress the advertisement of RA packets.";
                      }
    
                      leaf max-interval {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type uint32 {
                          range "4..1800";
                        }
                        units "s";
                        default "600";
                        status deprecated;
                        description
                          "Maximum interval.";
                      }
    
                      leaf ra-preference {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type nd-route-preference;
                        default "MEDIUM";
                        status deprecated;
                        description
                          "RA router preference.";
                      }
    
                      leaf ra-prefix-flag {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type nd-flag;
                        default "true";
                        status deprecated;
                        description
                          "Flag of RA packet carry prefix information.";
                      }
    
                      leaf ra-mtu-flag {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type!='MEth'";
                        type nd-flag;
                        default "true";
                        status deprecated;
                        description
                          "Flag of RA Packet Carry MTU Option.";
                      }
    
                      leaf strict-flag {
                        type boolean;
                        default "false";
                        status deprecated;
                        description
                          "Enable/disable strict security mode.";
                      }
    
                      leaf ts-fuzz-factor {
                        type uint16 {
                          range "0..1000";
                        }
                        units "s";
                        default "1";
                        status deprecated;
                        description
                          "Fuzz factor for timestamp option.";
                      }
    
                      leaf ts-clock-drift {
                        type uint8 {
                          range "0..100";
                        }
                        default "1";
                        status deprecated;
                        description
                          "Drift for timestamp option.";
                      }
    
                      leaf ts-delta {
                        type uint16 {
                          range "0..1000";
                        }
                        units "s";
                        default "300";
                        status deprecated;
                        description
                          "Delta for timestamp option.";
                      }
    
                      leaf rsa-min-key-len {
                        type uint16 {
                          range "384..4096";
                        }
                        units "bit";
                        must
                          "(../rsa-min-key-len<=../rsa-max-key-len)";
                        default "512";
                        status deprecated;
                        description
                          "The minimum length of acceptable RSA key pair.";
                      }
    
                      leaf rsa-max-key-len {
                        type uint16 {
                          range "384..4096";
                        }
                        units "bit";
                        default "2048";
                        status deprecated;
                        description
                          "The maximum length of acceptable RSA key pair.";
                      }
                    }  // container if-property
    
                    container proxys {
                      when
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../if-ip:name]/ifm:type!='MEth' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../if-ip:name]/ifm:type!='Ip-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../if-ip:name]/ifm:type!='PW-VE'";
                      status deprecated;
                      description
                        "Configure list of ND proxy.";
                      leaf route-proxy {
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "Configure list of ND proxy.";
                      }
    
                      leaf inner-vlan-proxy {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:class='sub-interface' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type='Vlanif'";
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "InnerVLAN proxy.";
                      }
    
                      leaf inter-vlan-proxy {
                        when
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:class='sub-interface' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../if-ip:name]/ifm:type='Vlanif'";
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "InterVLAN proxy.";
                      }
    
                      leaf anyway-proxy {
                        type nd-flag;
                        default "false";
                        status deprecated;
                        description
                          "Anyway proxy.";
                      }
                    }  // container proxys
                  }  // container nd-collection
                }  // list ipv6-if
              }  // container ipv6-ifs
    
              container ipv6-if-states {
                config false;
                status deprecated;
                description
                  "List of IPv6 address state.";
                list ipv6-if-state {
                  key "name";
                  config false;
                  status deprecated;
                  description
                    "Operational state of IPv6 addresses.";
                  leaf name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    config false;
                    status deprecated;
                    description
                      "The textual name of the interface. It should be the name of the interface as assigned by the local device. It should be suitable for use in commands which entered at the device's 'console'. This might be a text name, such as 'Loopback0', depending on the interface naming syntax of the device.";
                  }
    
                  container addresses {
                    config false;
                    status deprecated;
                    description
                      "List of IPv6 addresses.";
                    list address {
                      key "ip";
                      config false;
                      status deprecated;
                      description
                        "Operational state of IPv6 addresses.";
                      leaf ip {
                        type inet:ipv6-address-no-zone;
                        config false;
                        status deprecated;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint32 {
                          range "1..128";
                        }
                        config false;
                        status deprecated;
                        description
                          "Length of the IPv6 address prefix.";
                      }
    
                      leaf type {
                        type ipv6-address-state-type;
                        config false;
                        status deprecated;
                        description
                          "IPv6 address type.";
                      }
    
                      leaf algorithm-type {
                        type ipv6-address-algorithm-type;
                        config false;
                        status deprecated;
                        description
                          "Address algorithm type.";
                      }
    
                      leaf collision-count {
                        type uint32 {
                          range "0..3";
                        }
                        config false;
                        status deprecated;
                        description
                          "Number of IPv6 address collisions.";
                      }
    
                      leaf is-block {
                        type boolean;
                        config false;
                        status deprecated;
                        description
                          "IPv6 address is blocked or not.";
                      }
    
                      leaf status {
                        type ipv6-status-type;
                        config false;
                        status deprecated;
                        description
                          "IPv6 address status.";
                      }
                    }  // list address
                  }  // container addresses
                }  // list ipv6-if-state
              }  // container ipv6-if-states
    
              container vaccess-interfaces {
                when
                  "/vaccess:vaccess/vaccess:global/vaccess:role='master'";
                description
                  "List of inner interface on master of virtual access.";
                list vaccess-interface {
                  key "name";
                  description
                    "Configure inner interface on master of virtual access.";
                  leaf name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name='_public_'";
                    must
                      "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    description
                      "Inner interface name on master of virtual access.";
                  }
                }  // list vaccess-interface
              }  // container vaccess-interfaces
    
              container isis {
                description
                  "Configure ISIS configurations.";
                container sites {
                  description
                    "List of ISIS instance.";
                  list site {
                    must
                      "../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast'] or ../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                    key "id";
                    description
                      "Configure ISIS instance.";
                    leaf id {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Set the process ID. If the process ID does not exist, you can create a process. Otherwise, the system fails to create a process.";
                    }
    
                    leaf description {
                      type string {
                        length "1..80";
                        pattern '([^?]*)';
                      }
                      description
                        "Set a description information text.";
                    }
    
                    leaf multi-iid {
                      type uint16 {
                        range "1..65535";
                      }
                      description
                        "Set the multi instance ID. The leafs of support iid only include p2pEnable, cost, incrCost, peerMaxCostIntv and tilfaDisable on interface.";
                    }
    
                    leaf level {
                      type level-type;
                      default "level-1-2";
                      description
                        "Set the level of a router.";
                    }
    
                    leaf shutdown {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable ISIS.";
                    }
    
                    leaf cost-style {
                      type cost-style;
                      default "narrow";
                      description
                        "Set the cost type for the ISIS router to receive and send routes.";
                    }
    
                    leaf relax-spf-limit {
                      when
                        "(../cost-style='transition' or ../cost-style='ntransition')";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the device to receive the routes with a cost greater than 1023.";
                    }
    
                    leaf is-name {
                      type string {
                        length "1..64";
                      }
                      description
                        "Set a dynamic host name for the local system.";
                    }
    
                    leaf direct-inherit {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable inherit the direct route property.";
                    }
    
                    leaf adv-one-intf-addr {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable advertise one interface address.";
                    }
    
                    leaf bfd-session-check {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable BFD session state check.";
                    }
    
                    container lsp-fragments-extend {
                      description
                        "Configure LSP fragment extension.";
                      leaf enable-level1 {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the level 1 LSP fragment extension.";
                      }
    
                      leaf enable-level2 {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the level 2 LSP fragment extension.";
                      }
    
                      leaf mode {
                        when
                          "(../enable-level1='true' or ../enable-level2='true')";
                        type lsp-frag-mode;
                        default "mode-1";
                        description
                          "Indicates a mode to enable LSP fragment extension.";
                      }
                    }  // container lsp-fragments-extend
    
                    container poi-tlv {
                      description
                        "Configure purge originator identification TLV.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable purge originator identification.";
                      }
    
                      leaf always {
                        when "../enable='true'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable purge originator identification always with POI TLV.";
                      }
                    }  // container poi-tlv
    
                    container lsdb-limit {
                      description
                        "Configure LSDB Limit.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable limit the number of the LSDBs.";
                      }
    
                      leaf max-number {
                        when "../enable='true'";
                        type uint32 {
                          range "1..100000";
                        }
                        default "100000";
                        description
                          "Maximum number of LSDBs.";
                      }
    
                      leaf threshold-upper {
                        when "../enable='true'";
                        type uint8 {
                          range "1..100";
                        }
                        must
                          "(../threshold-lower<=../threshold-upper)";
                        default "80";
                        description
                          "Threshold upper percentage of the maximum number of LSDBs, used to trigger an alarm.";
                      }
    
                      leaf threshold-lower {
                        when "../enable='true'";
                        type uint8 {
                          range "1..100";
                        }
                        must
                          "(../threshold-lower<=../threshold-upper)";
                        default "70";
                        description
                          "Threshold lower percentage of the maximum number of LSDBs, used to trigger a clear alarm.";
                      }
                    }  // container lsdb-limit
    
                    container suppress-flapping {
                      description
                        "Configure flapping suppression.";
                      container peer {
                        description
                          "Configure neighbor relationship flapping suppression.";
                        leaf enable {
                          type boolean;
                          default "true";
                          description
                            "Enable/disable the neighbor relationship flapping suppression function.";
                        }
                      }  // container peer
    
                      container lsp-flood {
                        description
                          "Configure the delay timer for LSP flood.";
                        choice lsp-flood {
                          default "timer";
                          description
                            "Set the delay timer for LSP flood.";
                          case disable {
                            description
                              "Disable suppress flapping for LSP.";
                            leaf disable {
                              type empty;
                              description
                                "Disable suppress flapping for LSP.";
                            }
                          }  // case disable
    
                          case timer {
                            description
                              "Set the ISIS suppress flapping timer.";
                            leaf interval {
                              type uint32 {
                                range "1..600";
                              }
                              units "s";
                              default "10";
                              description
                                "Set the maximum interval of delay timer.";
                            }
    
                            leaf threshold {
                              type uint16 {
                                range "3..100";
                              }
                              default "30";
                              description
                                "Set the Threshold of LSPs to be suppressed.";
                            }
                          }  // case timer
                        }  // choice lsp-flood
                      }  // container lsp-flood
    
                      container route-calculate {
                        description
                          "Configure the delay timer for LSP process.";
                        choice route-calculate {
                          default "timer";
                          description
                            "Set the delay timer for LSP process.";
                          case disable {
                            description
                              "Disable suppress flapping for LSP.";
                            leaf disable {
                              type empty;
                              description
                                "Disable suppress flapping for LSP.";
                            }
                          }  // case disable
    
                          case timer {
                            description
                              "Set the ISIS suppress flapping timer.";
                            leaf interval {
                              type uint32 {
                                range "1..600";
                              }
                              units "s";
                              default "10";
                              description
                                "Set the maximum interval of delay timer.";
                            }
    
                            leaf threshold {
                              type uint16 {
                                range "3..100";
                              }
                              default "30";
                              description
                                "Set the Threshold of LSPs to be suppressed.";
                            }
                          }  // case timer
                        }  // choice route-calculate
                      }  // container route-calculate
    
                      container lsp-generation {
                        description
                          "Configure the delay timer for LSP generation.";
                        choice lsp-generation {
                          default "timer";
                          description
                            "Set the delay timer for LSP generation.";
                          case disable {
                            description
                              "Disable suppress flapping for LSP.";
                            leaf disable {
                              type empty;
                              description
                                "Disable suppress flapping for LSP.";
                            }
                          }  // case disable
    
                          case timer {
                            description
                              "Set the ISIS suppress flapping timer.";
                            leaf interval {
                              type uint32 {
                                range "1..600";
                              }
                              units "s";
                              default "10";
                              description
                                "Set the maximum interval of delay timer.";
                            }
    
                            leaf threshold {
                              type uint16 {
                                range "3..100";
                              }
                              default "30";
                              description
                                "Set the Threshold of LSPs to be suppressed.";
                            }
                          }  // case timer
                        }  // choice lsp-generation
                      }  // container lsp-generation
                    }  // container suppress-flapping
    
                    container timer {
                      description
                        "Configure the timer of LSP.";
                      leaf lsp-max {
                        type uint32 {
                          range "2..65535";
                        }
                        units "s";
                        must
                          "(../lsp-max>../lsp-refresh)";
                        default "1200";
                        description
                          "Set the maximum validity period of the LSP generated by the current ISIS process.";
                      }
    
                      leaf lsp-refresh {
                        type uint32 {
                          range "1..65534";
                        }
                        units "s";
                        must
                          "(../lsp-max>../lsp-refresh)";
                        default "900";
                        description
                          "Set the period for refreshing LSPs.";
                      }
    
                      leaf purge-lsp-delay {
                        type uint32 {
                          range "0..65535";
                        }
                        units "s";
                        default "20";
                        description
                          "Set the delay time of routing calculation after receiving purge LSP.";
                      }
    
                      container spf {
                        description
                          "Configure time for route calculation.";
                        leaf spf-type {
                          type spf-type;
                          must
                            "../spf-type='intelligent-timer' or (../spf-type='no-incr-timer' and ../max and ../init) or (../spf-type='one-trigger-timer'and ../max)";
                          default
                            "intelligent-timer";
                          description
                            "Set the SPF timer type for route calculation. When SPF type is intelligent-timer, max, incr, and init can be configured. When SPF type is set to no-incr-timer, max and init can be configured. When SPF type is set to one-trigger-timer, only max can be configured.";
                        }
    
                        leaf max {
                          ext:dynamic-default {
                            ext:default-value "5" {
                              when "../spf-type = 'intelligent-timer'";
                              description "The default value is 5 when SPF type is intelligent-timer.";
                            }
                          }
                          type uint32 {
                            range "1..120";
                          }
                          units "s";
                          description
                            "Set the maximum delay time for route calculation.";
                        }
    
                        leaf init {
                          ext:dynamic-default {
                            ext:default-value "50" {
                              when "../spf-type = 'intelligent-timer'";
                              description "The default value is 50 when SPF type is intelligent-timer.";
                            }
                          }
                          when
                            "../spf-type!='one-trigger-timer'";
                          type uint32 {
                            range "1..60000";
                          }
                          units "ms";
                          must
                            "(../init<../max*1000)";
                          description
                            "Set the delay for the first route calculation.";
                        }
    
                        leaf incr {
                          when
                            "../spf-type='intelligent-timer'";
                          type uint32 {
                            range "1..60000";
                          }
                          units "ms";
                          must
                            "(../incr<../max*1000)";
                          default "200";
                          description
                            "Set the incremental delay between two route calculations. The delay doubles the previous one each time.";
                        }
                      }  // container spf
    
                      container lsp-generation {
                        description
                          "Configure an intelligent timer to generate LSPs.";
                        leaf max-level1 {
                          type uint32 {
                            range "1..120";
                          }
                          units "s";
                          default "2";
                          description
                            "Set the maximum delay for generating level 1 LSPs with the same LSP ID.";
                        }
    
                        leaf max-level2 {
                          type uint32 {
                            range "1..120";
                          }
                          default "2";
                          description
                            "Set the maximum delay for generating level 2 LSPs with the same LSP ID.";
                        }
    
                        leaf init-level1 {
                          type uint32 {
                            range "1..60000";
                          }
                          must
                            "(../init-level1<../max-level1*1000)";
                          description
                            "Set the delay for generating level 1 LSPs with the same LSP ID for the first time.";
                        }
    
                        leaf init-level2 {
                          type uint32 {
                            range "1..60000";
                          }
                          must
                            "(../init-level2<../max-level2*1000)";
                          description
                            "Set the delay for generating level 2 LSPs with the same LSP ID for the first time.";
                        }
    
                        leaf incr-level1 {
                          when
                            "../init-level1>0";
                          type uint32 {
                            range "1..60000";
                          }
                          must
                            "(../incr-level1<../max-level1*1000)";
                          description
                            "Set the incremental delay for generating two level 1 LSPs with the same LSP ID. The interval doubles the previous one each time.";
                        }
    
                        leaf incr-level2 {
                          when
                            "../init-level2>0";
                          type uint32 {
                            range "1..60000";
                          }
                          must
                            "(../incr-level2<../max-level2*1000)";
                          description
                            "Set the incremental delay for generating two level 2 LSPs with the same LSP ID. The interval doubles the previous one each time.";
                        }
                      }  // container lsp-generation
                    }  // container timer
    
                    container lsp-length {
                      description
                        "Configure LSPs length.";
                      leaf originate-level1 {
                        type uint32 {
                          range "512..16384";
                        }
                        must
                          "(../originate-level1<=../receive) and ((../originate-level1=../originate-level2))";
                        default "1497";
                        description
                          "Set the maximum size of the level 1 LSPs that are generated locally.";
                      }
    
                      leaf originate-level2 {
                        type uint32 {
                          range "512..16384";
                        }
                        must
                          "(../originate-level2<=../receive) and (../originate-level1=../originate-level2)";
                        default "1497";
                        description
                          "Set the maximum size of the level 2 LSPs that are generated locally.";
                      }
    
                      leaf receive {
                        type uint32 {
                          range "512..16384";
                        }
                        must
                          "(../originate-level1<=../receive) and (../originate-level2<=../receive)";
                        default "1497";
                        description
                          "Set the maximum size of the LSPs that can be received.";
                      }
                    }  // container lsp-length
    
                    container set-overload {
                      description
                        "Configure overload.";
                      leaf type {
                        type overload-type;
                        default "no-set";
                        description
                          "Set the router to notify others that it is overloaded.";
                      }
    
                      leaf wait-type {
                        when
                          "../type='on-startup'";
                        type wait-type;
                        default "no-wait";
                        description
                          "Set the overload type.";
                      }
    
                      leaf nbr-system-id {
                        when
                          "../wait-type='start-from-nbr'";
                        type string {
                          length "1..15";
                          pattern
                            '((([0-9]|[a-f]|[A-F]){4}\.){2}([0-9]|[a-f]|[A-F]){4})';
                        }
                        mandatory true;
                        description
                          "Set the system ID of the neighbor. The duration for the system to keep the overload bit is set according to the status of the neighbor specified by the system ID. The length of the value is 6 bytes, in the format of XXXX.XXXX.XXXX, in which X is a hexadecimal case-insensitive character.";
                      }
    
                      leaf timeout1 {
                        when
                          "../wait-type='start-from-nbr'";
                        type uint32 {
                          range "5..86400";
                        }
                        units "s";
                        default "1200";
                        description
                          "If the specified neighbor does not become up before the neighbor holdtime expires, the holdtime of the system overload flag is the neighbor holdtime.";
                      }
    
                      leaf timeout2 {
                        when
                          "../type='on-startup'";
                        type uint32 {
                          range "5..86400";
                        }
                        units "s";
                        default "600";
                        description
                          "If the specified neighbor becomes up before the neighbor holdtime expires, the system overload flag keeps the neighbor timeout period.";
                      }
    
                      leaf inter-level {
                        when
                          "not(../type='no-set')";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable determine whether a device can advertise the IP address prefixes learned from the ISIS routes at different levels.";
                      }
    
                      leaf external {
                        when
                          "not(../type='no-set')";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable determine whether a device can advertise the IP address prefixes learned from other protocols.";
                      }
    
                      leaf send-sa-bit {
                        when
                          "../type='on-startup'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the SA bit in Hello packets.";
                      }
    
                      leaf sa-bit-time {
                        when
                          "../send-sa-bit='true'";
                        type uint32 {
                          range "5..600";
                        }
                        units "s";
                        default "30";
                        description
                          "The SA bit advertisement period is carried in Hello packet.";
                      }
    
                      leaf rt-delay-time {
                        when
                          "../type='on-startup'";
                        type uint32 {
                          range "5..1000";
                        }
                        units "s";
                        must
                          "../rt-delay-time<=../timeout2";
                        description
                          "The route delay distribute period.";
                      }
    
                      leaf rt-max-metric {
                        when
                          "../type='on-startup'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable publish the metric of route to maximum.";
                      }
                    }  // container set-overload
    
                    container te-set-subtlv {
                      description
                        "Configure TE subtlv.";
                      leaf bw-constraint {
                        type uint8 {
                          range "19..254";
                        }
                        description
                          "Change the value of bandwidth constraints subtlv.";
                      }
    
                      leaf lo-multiplier {
                        type uint8 {
                          range "19..254";
                        }
                        description
                          "Change the value of local overbooking multipliers subtlv.";
                      }
    
                      leaf unresv-bw-sub-pool {
                        type uint8 {
                          range "19..254";
                        }
                        description
                          "Change the value of unreserved sub pool bandwidth subtlv.";
                      }
                    }  // container te-set-subtlv
    
                    container lsp-lifetime {
                      description
                        "Configure refresh the remaining lifetime field of a LSP.";
                      leaf enable {
                        type boolean;
                        default "true";
                        description
                          "Enable/disable refresh remaining lifetime field.";
                      }
    
                      choice refresh {
                        default "max-age";
                        description
                          "Set remaining lifetime refresh value.";
                        case max-age {
                          description
                            "Use max age as remaining lifetime refresh value.";
                          leaf max-age {
                            when
                              "../enable='true'";
                            type empty;
                            description
                              "Use max age as remaining lifetime refresh value.";
                          }
                        }  // case max-age
    
                        case value {
                          description
                            "Set remaining lifetime refresh value.";
                          leaf value {
                            when
                              "../enable='true'";
                            type uint16 {
                              range "2..65535";
                            }
                            must
                              "../value>=../../timer/lsp-max";
                            description
                              "Set remaining lifetime refresh value.";
                          }
                        }  // case value
                      }  // choice refresh
                    }  // container lsp-lifetime
    
                    container bgp-ls {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "Configure the BGP LS.";
                      leaf enable-level1 {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable Level 1 BGP LS.";
                      }
    
                      leaf enable-level2 {
                        type boolean;
                        must
                          "not(../ignore-level2-leak-level1='true' and ../enable-level2='true')";
                        default "false";
                        description
                          "Enable/disable Level 2 BGP LS.";
                      }
    
                      leaf enable-ipv6-level1 {
                        type boolean;
                        must
                          "../enable-ipv6-level1='false' or ../../afs/af[type='afipv6']";
                        default "false";
                        description
                          "Enable/disable IPv6 Level 1 BGP LS.";
                      }
    
                      leaf enable-ipv6-level2 {
                        type boolean;
                        must
                          "../enable-ipv6-level2='false' or ../../afs/af[type='afipv6']";
                        default "false";
                        description
                          "Enable/disable IPv6 Level 2 BGP LS.";
                      }
    
                      leaf identifier {
                        type uint64 {
                          range "2..65535";
                        }
                        description
                          "Set BGP LS identifier.";
                      }
    
                      leaf ignore-level2-leak-level1 {
                        when
                          "../enable-level1='true'";
                        type boolean;
                        must
                          "not(../enable-level2='true' and ../ignore-level2-leak-level1='true')";
                        default "false";
                        description
                          "Enable/disable the function of ignoring the routes that are leaked from the Level 2 to the Level 1 during IS-IS Level 1 topology information advertisement to BGP-LS.";
                      }
                    }  // container bgp-ls
    
                    container bier {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "Configure the bier.";
                      leaf enable {
                        type boolean;
                        must
                          "../enable='false' or (../../cost-style='wide' or ../../cost-style='transition' or ../../cost-style='wtransition')";
                        default "false";
                        description
                          "Enable/disable bier.";
                      }
                    }  // container bier
    
                    container intelligent-convergence {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "Configure the intelligent convergence.";
                      leaf enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable intelligent convergence.";
                      }
                    }  // container intelligent-convergence
    
                    container extern-ability {
                      description
                        "Configure expansibility.";
                      leaf adj-strict-check {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable strict check on the neighbor.";
                      }
    
                      leaf ecmp-prefer {
                        type ecmp-prefer-type;
                        default "none";
                        description
                          "Configure whether the routes with a TE tunnel interface as the outbound interface or the routes with an IPv4 interface as the outbound interface are preferentially selected to load balance ISIS traffic.";
                      }
    
                      leaf opt-checksum {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable option checksum.";
                      }
    
                      leaf virtual-cluster {
                        type boolean;
                        must
                          "../virtual-cluster='false'  or ((../../bgp-ls/enable-level1='false' and ../../bgp-ls/enable-level2='false' and ../../bgp-ls/enable-ipv6-level1='false' and ../../bgp-ls/enable-ipv6-level2='false') and not(../../afs/af/traffic-eng) and not(../../lsp-auths) and not(../../circuits/circuit/hello-auths))";
                        default "false";
                        description
                          "Enable/disable virtual cluster on the system. Conflict with segment routing MPLS and virtual access.";
                      }
    
                      leaf virtual-access {
                        type boolean;
                        must
                          "../virtual-access='false' or ((../../cost-style='wide' or ../../cost-style='wtransition') and (../../bgp-ls/enable-level1='false' and ../../bgp-ls/enable-level2='false' and ../../bgp-ls/enable-ipv6-level1='false' and ../../bgp-ls/enable-ipv6-level2='false') and not(../../afs/af/traffic-eng) and not(../../lsp-auths) and not(../../circuits/circuit/hello-auths))";
                        default "false";
                        description
                          "Enable/disable virtual access on the system. Conflict with segment routing MPLS and virtual cluster.";
                      }
                    }  // container extern-ability
    
                    container local-mt {
                      when
                        "../../../../ni:name='_public_'";
                      description
                        "Configure a local multicast topology.";
                      leaf enable {
                        type boolean;
                        must
                          "../enable='false' or ../../afs/af[type='afipv4']/traffic-eng/enable-level1='true' or ../../afs/af[type='afipv4']/traffic-eng/enable-level2='true'";
                        default "false";
                        description
                          "Enable/disable local multicast topology.";
                      }
    
                      choice policy-type {
                        description
                          "Mode of the policy used for local multicast topology.";
                        case basic-acl {
                          description
                            "Apply basic ACL name or ACL number.";
                          leaf name-or-num {
                            type leafref {
                              path "/acl:acl/acl:groups/acl:group/acl:identity";
                            }
                            must
                              "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                            description
                              "Apply basic ACL name or ACL number.";
                          }
                        }  // case basic-acl
    
                        case ip-prefix {
                          description
                            "Set the name of an IP prefix list.";
                          leaf ip-prefix {
                            type leafref {
                              path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                            }
                            description
                              "Set the name of an IP prefix list.";
                          }
                        }  // case ip-prefix
                      }  // choice policy-type
                    }  // container local-mt
    
                    container net-entitys {
                      description "List of NET.";
                      list net-entity {
                        key "value";
                        max-elements 3;
                        description
                          "Configure NET.";
                        leaf value {
                          type string {
                            length "0..83";
                            pattern
                              '\s*((([0-9a-f]\.?){2}){7,19}0\.?0)\s*';
                          }
                          description
                            "Set a NET. The NET is in the format of X...X.XXXX.XXXX.XXXX.00, in which X...X indicates the area address, the 12 Xs in the middle indicate the system ID, and the last 00 indicates the SEL. When configure multiple NET, must ensure that system IDs are the same.";
                        }
                      }  // list net-entity
                    }  // container net-entitys
    
                    container virtual-systems {
                      when
                        "../net-entitys/net-entity/value";
                      description
                        "List of virtual system ID.";
                      list virtual-system {
                        key "id";
                        max-elements 99;
                        description
                          "Configure virtual system ID. Used to set the ISIS process. Without a system ID, extended LSPs are not generated.";
                        leaf id {
                          type string {
                            length "12..19";
                            pattern
                              '((([0-9]|[a-f]){4}\.){2}([0-9]|[a-f]){4})';
                          }
                          description
                            "Set a virtual system ID for an ISIS process in the format of XXXX.XXXX.XXXX.";
                        }
                      }  // list virtual-system
                    }  // container virtual-systems
    
                    container lsp-auths {
                      description
                        "List of routing packet authentication.";
                      list lsp-auth {
                        key "cmd-type";
                        max-elements 2;
                        description
                          "Configure routing packet authentication. Authenticate received routing packets (LSPs or SNPs) based on the specified authentication mode and password in an ISIS area or domain.";
                        leaf cmd-type {
                          type auth-cmd-type;
                          description
                            "Set the command type.";
                        }
    
                        leaf pw-type {
                          type auth-type;
                          mandatory true;
                          description
                            "Set the authentication type.";
                        }
    
                        leaf simple {
                          when
                            "../pw-type='simple'";
                          type pub-type:password;
                          mandatory true;
                          description
                            "Set the simple authentication. The password is a string ranging from 1 to 16 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                        }
    
                        leaf md5 {
                          when
                            "../pw-type='hmac-sha256' or ../pw-type='md5'";
                          type pub-type:password-extend;
                          mandatory true;
                          description
                            "Set the encrypted authentication password.";
                        }
    
                        leaf key-chain {
                          ext:case-sensitivity "lower-only";
                          when
                            "../pw-type='keychain'";
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          mandatory true;
                          description
                            "Keychain name.";
                        }
    
                        leaf service {
                          when
                            "../pw-type='md5' or ../pw-type='simple'";
                          type service-type;
                          default "osi";
                          description
                            "Set the authentication service type.";
                        }
    
                        leaf usage {
                          type auth-usage-type;
                          default
                            "usage-default";
                          description
                            "Set the authentication mode. The available options are as follows:
    authentication-avoid: In this mode, the authentication information is not encapsulated for the generated SNPs, and the received SNPs are not checked. The authentication information is encapsulated for only the generated LSPs, and the received LSPs are checked.
    send-only: In this mode, the authentication information is encapsulated for the generated LSPs and SNPs. Only the received LSPs are checked.
    all-send-only: In this mode, the authentication information is encapsulated for the generated LSPs and SNPS. The received LSPs and SNPs, however, are not checked.";
                        }
    
                        leaf key-id {
                          when
                            "../pw-type='hmac-sha256'";
                          type uint16 {
                            range "0..65535";
                          }
                          default "0";
                          description
                            "Set a value for key ID.";
                        }
                      }  // list lsp-auth
                    }  // container lsp-auths
    
                    container host-names {
                      description
                        "List of name mapping information.";
                      list host-name {
                        key "system-id";
                        max-elements 500;
                        description
                          "Configure the ability to identify the host names in LSPs. On the local end, a mapping name (an alias) is configured for the ISIS system on the remote end. The mapping name is not advertised.";
                        leaf system-id {
                          ext:case-sensitivity "lower-only";
                          type string {
                            length "12..31";
                            pattern
                              '((([0-9]|[a-f]){4}\.){2}([0-9]|[a-f]){4}(\.([0-9]|[a-f]){2})?)';
                          }
                          description
                            "ID of the ISIS system on the remote end or the pseudo node ID. The value of a pseudo node cannot be 0.";
                        }
    
                        leaf value {
                          type string {
                            length "1..64";
                            pattern '.*\S.*';
                          }
                          mandatory true;
                          description
                            "Name of the ISIS system on the remote end.";
                        }
                      }  // list host-name
                    }  // container host-names
    
                    container circuits {
                      description
                        "List of ISIS interface.";
                      list circuit {
                        key "name";
                        description
                          "Configure ISIS interface.";
                        leaf name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                          description
                            "Interface name.";
                        }
    
                        leaf level {
                          type level-type;
                          default "level-1-2";
                          description
                            "Set a level for an interface.";
                        }
    
                        leaf p2p-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable emulate an interface as a P2P interface. This command takes effect only when the interface is of the broadcast type. Loopback is P2P interface.";
                        }
    
                        leaf hello-mode {
                          type pad-type;
                          default "normal";
                          description
                            "Set the hello packet padding type.";
                        }
    
                        leaf peer-hold-max {
                          type uint32 {
                            range "100..1000000";
                          }
                          units "ms";
                          description
                            "Config peer hold max cost interval.";
                        }
    
                        leaf silent-enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable prevent an interface from receiving and sending ISIS packets.";
                        }
    
                        leaf purge-source-trace-block {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable block purge LSP source tracing on this interface.";
                        }
    
                        leaf silent-cost {
                          when
                            "../silent-enable='true'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable advertise the silent cost.";
                        }
    
                        leaf dis-name {
                          type string {
                            length "1..64";
                          }
                          description
                            "Set a name for the DIS on the LAN.";
                        }
    
                        container srlgs {
                          description
                            "List of share risk link group.";
                          list srlg {
                            key "group-id";
                            description
                              "Configure share risk link group.";
                            leaf group-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              description
                                "Set the srlg group ID.";
                            }
                          }  // list srlg
                        }  // container srlgs
    
                        container mesh-group {
                          description
                            "Configure mesh group state on an interface.";
                          leaf state {
                            type mesh-group-state;
                            default "inactive";
                            description
                              "If the state is block, the interface cannot flood received LSPs.";
                          }
    
                          leaf number {
                            when
                              "../state='set'";
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            mandatory true;
                            description
                              "Set an ID for a mesh group.";
                          }
                        }  // container mesh-group
    
                        container suppress-flapping {
                          description
                            "Configure flapping suppression.";
                          container peer {
                            description
                              "Configure neighbor relationship flapping suppression.";
                            leaf enable {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable the neighbor relationship flapping suppression function.";
                            }
    
                            leaf detect-interval {
                              type uint32 {
                                range "1..300";
                              }
                              units "s";
                              must
                                "../resume-interval>../detect-interval";
                              default "60";
                              description
                                "Set the detection interval of neighbor relationship flapping suppression. If the neighbor relationship goes down twice within the interval, a flapping event is recorded.";
                            }
    
                            leaf threshold {
                              type uint32 {
                                range "1..1000";
                              }
                              default "10";
                              description
                                "Set the threshold of ISIS neighbor relationship flapping suppression. When the flapping count reaches or exceeds the threshold, flapping suppression takes effect.";
                            }
    
                            leaf resume-interval {
                              type uint32 {
                                range "2..1000";
                              }
                              units "s";
                              must
                                "../resume-interval>../detect-interval";
                              default "120";
                              description
                                "Set the interval for exiting from ISIS neighbor relationship flapping suppression. If the interval between successive neighbor down events is greater than resume-interval, the flapping count is reset. In hold max cost mode, if the neighbor relationship does not go down within two successive resume intervals or the interval between successive neighbor Down events is greater than resume interval, the interface exits from hold max cost mode.";
                            }
    
                            leaf hold-down {
                              type uint32 {
                                range "1..600";
                              }
                              units "s";
                              description
                                "Set the duration of the hold down mode.";
                            }
    
                            leaf hold-max-cost {
                              type boolean;
                              default "true";
                              description
                                "Enable/disable hold max cost mode.";
                            }
                          }  // container peer
                        }  // container suppress-flapping
    
                        container timer {
                          description
                            "Configure timer.";
                          leaf csnp-interval-level1 {
                            type uint32 {
                              range "1..65535";
                            }
                            units "s";
                            default "10";
                            description
                              "Set the interval at which level 1 CSNPs are sent.";
                          }
    
                          leaf csnp-interval-level2 {
                            type uint32 {
                              range "1..65535";
                            }
                            units "s";
                            default "10";
                            description
                              "Set the interval at which level 2 CSNPs are sent.";
                          }
    
                          leaf throttle-interval {
                            type uint32 {
                              range "1..10000";
                            }
                            units "ms";
                            default "50";
                            description
                              "Set the minimum interval at which LSPs are sent.";
                          }
    
                          leaf throttle-count {
                            type uint32 {
                              range "1..1000";
                            }
                            default "10";
                            description
                              "Set the maximum number of LSPs that are sent during the interval.";
                          }
                        }  // container timer
    
                        container broadcast {
                          when
                            "../p2p-enable='false'";
                          description
                            "Configure broadcast.";
                          leaf dis-priority-level1 {
                            type uint32 {
                              range "0..127";
                            }
                            default "64";
                            description
                              "Set a priority for level 1 DIS election. The greater the value, the higher the priority.";
                          }
    
                          leaf dis-priority-level2 {
                            type uint32 {
                              range "0..127";
                            }
                            default "64";
                            description
                              "Set a priority for level 2 DIS election. The greater the value, the higher the priority.";
                          }
    
                          leaf hello-timer-level1 {
                            type uint32 {
                              range "1..255";
                            }
                            units "s";
                            default "10";
                            description
                              "Set the interval at which level 1 hello packets are sent.";
                          }
    
                          leaf hello-timer-level2 {
                            type uint32 {
                              range "1..255";
                            }
                            units "s";
                            default "10";
                            description
                              "To set the interval for sending level 2 hello packets.";
                          }
    
                          leaf hold-multiplier-level1 {
                            type uint32 {
                              range "3..1000";
                            }
                            default "3";
                            description
                              "Set the number of hello packets that the local ISIS router fails to receive from a level 1 neighbor before the local router declares the neighbor down.";
                          }
    
                          leaf hold-multiplier-level2 {
                            type uint32 {
                              range "3..1000";
                            }
                            default "3";
                            description
                              "Set the number of hello packets that the local ISIS router fails to receive from a level 2 neighbor before the local router declares the neighbor down.";
                          }
    
                          leaf conser-level1 {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable level1 hello interval conservative flag.";
                          }
    
                          leaf conser-level2 {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable level2 hello interval conservative flag.";
                          }
                        }  // container broadcast
    
                        container p2p {
                          when
                            "../p2p-enable='true'";
                          description
                            "Configure P2P.";
                          leaf snpa-check {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the SNPA check of LSP and SNP.";
                          }
    
                          leaf peer-ip-ignore {
                            when
                              "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../isis:name]/ifm:type='Pos'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ignore the IP address check when P2P hello packets are received.";
                          }
    
                          leaf ppp-negotiation {
                            type p2p-negotiation;
                            default "3-way";
                            description
                              "Set the P2P neighbor negotiation type.";
                          }
    
                          leaf hello-timer {
                            type uint32 {
                              range "1..255";
                            }
                            units "s";
                            default "10";
                            description
                              "Set the interval at which P2P hello packets are sent.";
                          }
    
                          leaf hold-multiplier {
                            type uint32 {
                              range "3..1000";
                            }
                            default "3";
                            description
                              "Set the number of P2P hello packets that the local ISIS router fails to receive from a P2P neighbor before the local router declares the neighbor down.";
                          }
    
                          leaf lsp-retransmit-interval {
                            type uint32 {
                              range "1..300";
                            }
                            units "s";
                            default "5";
                            description
                              "Set the interval for retransmitting LSPs on the P2P link.";
                          }
    
                          leaf ppp-osicp-check {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable check the OSICP negotiation status on the interfaces with PPP link protocols. The negotiation status affects the status of the interfaces in ISIS.";
                          }
    
                          leaf conser {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable p2p hello interval conservative flag.";
                          }
                        }  // container p2p
    
                        container hello-auths {
                          description
                            "List of hello packet authentication.";
                          list hello-auth {
                            key "level";
                            max-elements 2;
                            description
                              "Configure hello packet authentication.";
                            leaf level {
                              type level-type-two;
                              description
                                "Set the level type for authentication. This field is not required for P2P interfaces. Display may according to the interface level for P2P.";
                            }
    
                            leaf pw-type {
                              type auth-type;
                              mandatory true;
                              description
                                "Set the authentication password type of hello packets.";
                            }
    
                            leaf simple {
                              when
                                "../pw-type='simple'";
                              type pub-type:password;
                              mandatory true;
                              description
                                "Set the authentication password. The password is a string ranging from 1 to 16 characters for a unencrypted password and 24 to 128 characters for a encrypted password.";
                            }
    
                            leaf key-chain {
                              ext:case-sensitivity "lower-only";
                              when
                                "../pw-type='keychain'";
                              type string {
                                length "1..47";
                                pattern
                                  '[^A-Z]+';
                              }
                              mandatory true;
                              description
                                "Keychain name.";
                            }
    
                            leaf md5 {
                              when
                                "../pw-type='hmac-sha256' or ../pw-type='md5'";
                              type pub-type:password-extend;
                              mandatory true;
                              description
                                "Set the encrypted authentication password.";
                            }
    
                            leaf service {
                              when
                                "../pw-type='md5' or ../pw-type='simple'";
                              type service-type;
                              default "osi";
                              description
                                "Set the authentication service type.";
                            }
    
                            leaf send-only {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable encapsulate the authentication information in only the hello packets to be sent.";
                            }
    
                            leaf key-id {
                              when
                                "../pw-type='hmac-sha256'";
                              type uint16 {
                                range "0..65535";
                              }
                              default "0";
                              description
                                "Set a value for key ID.";
                            }
                          }  // list hello-auth
                        }  // container hello-auths
    
                        container afs {
                          description
                            "List of interface address family of IPv4 and IPv6.";
                          list af {
                            key "type";
                            min-elements 1;
                            max-elements 2;
                            description
                              "Configure interface address family of IPv4 and IPv6.";
                            leaf type {
                              type af-type;
                              must
                                "../../../../../afs/af[isis:type=current()]";
                              must
                                "(../type='afipv4') or (../type='afipv6' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../isis:name]/ip:ipv6)";
                              description
                                "Address family type of the multi topology.";
                            }
    
                            leaf cost-level1 {
                              type uint32 {
                                range
                                  "1..16777215";
                              }
                              must
                                "(../cost-level1<=63) or (not(../../../../../cost-style!='wide' and ../../../../../cost-style!='wtransition') and ../cost-level1<=16777215)";
                              description
                                "Link cost of an interface used for the level 1 SPF calculation.";
                            }
    
                            leaf cost-level2 {
                              type uint32 {
                                range
                                  "1..16777215";
                              }
                              must
                                "(../cost-level2<=63) or (not(../../../../../cost-style!='wide' and ../../../../../cost-style!='wtransition') and ../cost-level2<=16777215)";
                              description
                                "Link cost of an interface used for the level 2 SPF calculation.";
                            }
    
                            leaf tag-level1 {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              default "0";
                              description
                                "Set the level 1 tag value for direct routes on the interface. A value of 0 indicates disable.";
                            }
    
                            leaf tag-level2 {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              default "0";
                              description
                                "Set the level 2 tag value for direct routes on the interface. A value of 0 indicates disable.";
                            }
    
                            leaf suppress-reach {
                              type level-type-zero;
                              default "no-set";
                              description
                                "Suppress the advertisement of direct route.";
                            }
    
                            leaf incr-cost {
                              type uint32 {
                                range
                                  "1..16777214";
                              }
                              description
                                "Set the cost to be added if the link quality is low.";
                            }
    
                            leaf bfd-bit-error {
                              type bfd-bit-err-type;
                              must
                                "../bfd-bit-error='no-set' or ../type='afipv4'";
                              default "no-set";
                              description
                                "Enable or block BFD bit error on an interface. Not support Loopback and tunnel.";
                            }
    
                            container mpls-ldp {
                              description
                                "Configure MPLS LDP configuration.";
                              leaf auto-flag-block {
                                when
                                  "../../type='afipv4'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable automatic MPLS LDP configuration on an interface.";
                              }
                            }  // container mpls-ldp
    
                            container frr {
                              description
                                "Configure ISIS FRR on interface.";
                              leaf lfa-block-level1 {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable prevent an interface from participating Level 1 LFA backup interface calculation in an IPv4 base topology.";
                              }
    
                              leaf lfa-block-level2 {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable prevent an interface from participating Level 2 LFA backup interface calculation in an IPv4 base topology.";
                              }
    
                              leaf rlfa-disable-level1 {
                                type boolean;
                                must
                                  "../rlfa-disable-level1='false' or ../../type='afipv4'";
                                default "false";
                                description
                                  "Enable/disable level 1 RLFA of the interface.";
                              }
    
                              leaf rlfa-disable-level2 {
                                type boolean;
                                must
                                  "../rlfa-disable-level2='false' or ../../type='afipv4'";
                                default "false";
                                description
                                  "Enable/disable level 2 RLFA of the interface.";
                              }
    
                              leaf tilfa-disable-level1 {
                                type boolean;
                                must
                                  "../tilfa-disable-level1='false' or (../../type='afipv4' or ../../../../../../../../../ni:name='_public_')";
                                default "false";
                                description
                                  "Enable/disable an interface is prevented from being calculated as a valid backup interface during level 1 LFA calculation.";
                              }
    
                              leaf tilfa-disable-level2 {
                                type boolean;
                                must
                                  "../tilfa-disable-level2='false' or (../../type='afipv4' or ../../../../../../../../../ni:name='_public_')";
                                default "false";
                                description
                                  "Enable/disable an interface is prevented from being calculated as a valid backup interface during level 2 LFA calculation.";
                              }
                            }  // container frr
    
                            container bfd {
                              description
                                "Configure ISIS BFD parameters on interface. Not support Loopback and tunnel.";
                              choice type {
                                description
                                  "Set BFD type.";
                                case enable {
                                  description
                                    "Type is enable.";
                                  leaf enable {
                                    type empty;
                                    description
                                      "Enable dynamic BFD on an interface.";
                                  }
                                }  // case enable
    
                                case static {
                                  description
                                    "Type is static.";
                                  leaf static {
                                    type empty;
                                    description
                                      "Enable static BFD on an interface.";
                                  }
                                }  // case static
    
                                case block {
                                  description
                                    "Type is block.";
                                  leaf block {
                                    type empty;
                                    description
                                      "Disable dynamic BFD from an interface.";
                                  }
                                }  // case block
                              }  // choice type
    
                              leaf min-rx {
                                type uint32 {
                                  range
                                    "3..20000";
                                }
                                units "ms";
                                default "10";
                                description
                                  "Set the minimum interval at which BFD packets are received.";
                              }
    
                              leaf min-tx {
                                type uint32 {
                                  range
                                    "3..20000";
                                }
                                units "ms";
                                default "10";
                                description
                                  "Set the minimum interval at which BFD packets are sent.";
                              }
    
                              leaf detect-multiplier {
                                type uint32 {
                                  range "3..50";
                                }
                                default "3";
                                description
                                  "Set the detection multiplier of a BFD session.";
                              }
    
                              leaf tos-exp {
                                type uint8 {
                                  range "0..7";
                                }
                                description
                                  "Set the priority of BFD packets.";
                              }
    
                              leaf frr-binding {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable bind the BFD status to the link status of an interface.";
                              }
    
                              choice bfd-incr-cost {
                                description
                                  "Set the BFD increasing cost value for the interface.";
                                case value {
                                  description
                                    "Set the BFD increasing cost value for the interface.";
                                  leaf value {
                                    type uint32 {
                                      range
                                        "1..16777214";
                                    }
                                    description
                                      "Set the BFD increasing cost value for the interface.";
                                  }
                                }  // case value
    
                                case cost-block {
                                  description
                                    "Enable/disable block the BFD sync cost for the interface.";
                                  leaf cost-block {
                                    type empty;
                                    description
                                      "Enable/disable block the BFD sync cost for the interface.";
                                  }
                                }  // case cost-block
                              }  // choice bfd-incr-cost
                            }  // container bfd
    
                            container ldp-sync {
                              when
                                "../type='afipv4'";
                              description
                                "Configure LDP and ISIS synchronization state on an interface.";
                              leaf enable {
                                type ldp-sync-state;
                                default "none";
                                description
                                  "LDP and ISIS synchronization state on an interface.";
                              }
    
                              leaf hold-down-timer {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                units "s";
                                description
                                  "Set a value for the LDP and ISIS synchronization holddown timer.";
                              }
    
                              choice hold-cost-max {
                                description
                                  "Set a value for the LDP and ISIS synchronization timer.";
                                case timer {
                                  description
                                    "Set a value for the LDP and ISIS synchronization timer.";
                                  leaf timer {
                                    type uint32 {
                                      range
                                        "0..65535";
                                    }
                                    units "s";
                                    description
                                      "Set a value for the LDP and ISIS synchronization timer.";
                                  }
                                }  // case timer
    
                                case infinite {
                                  description
                                    "Enable infinite LDP and ISIS synchronization.";
                                  leaf infinite {
                                    type empty;
                                    description
                                      "Enable infinite LDP and ISIS synchronization. The LDP and ISIS synchronization is kept before the LDP session goes up.";
                                  }
                                }  // case infinite
                              }  // choice hold-cost-max
                            }  // container ldp-sync
    
                            container link-group-ports {
                              description
                                "List of link-group interface.";
                              list link-group-port {
                                key "level-type";
                                description
                                  "Configure link-group interface.";
                                leaf level-type {
                                  type level-type-two;
                                  description
                                    "Level type.";
                                }
    
                                leaf name {
                                  ext:operation-exclude "update";
                                  type leafref {
                                    path "/ni:network-instance/ni:instances/ni:instance/isis:isis/isis:sites/isis:site/isis:link-groups/isis:link-group/isis:name";
                                  }
                                  must
                                    "not(../../link-group-port[name!=current()])";
                                  mandatory
                                    true;
                                  description
                                    "To set link-group name.";
                                }
                              }  // list link-group-port
                            }  // container link-group-ports
    
                            container topologys {
                              when
                                "../../../../../../../../ni:name='_public_'";
                              description
                                "List of interface multi topology.";
                              list topology {
                                must
                                  "((../../isis:type='afipv4') and (../../../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/rt:routing/rt:direct-routing/rt:interfaces/rt:interface[rt:name=current()/../../../../isis:name]/rt:binding-topologys/rt:binding-topology[rt:topology-name=current()/../../../../../../isis:afs/isis:af[isis:type=current()/../../isis:type]/isis:topologys/isis:topology[isis:mt-id=current()/isis:mt-id]/isis:topo-name])) or ((../../isis:type='afipv6') and (../../../../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/rt:routing/rt:direct-routing/rt:interfaces/rt:interface[rt:name=current()/../../../../isis:name]/rt:binding-topologys/rt:binding-topology[rt:topology-name=current()/../../../../../../isis:afs/isis:af[isis:type=current()/../../isis:type]/isis:topologys/isis:topology[isis:mt-id=current()/isis:mt-id]/isis:topo-name]))";
                                key "mt-id";
                                description
                                  "Configure interface multi topology.";
                                leaf mt-id {
                                  type leafref {
                                    path "/ni:network-instance/ni:instances/ni:instance/isis:isis/isis:sites/isis:site/isis:afs/isis:af/isis:topologys/isis:topology/isis:mt-id";
                                  }
                                  description
                                    "ISIS multi topology ID.";
                                }
    
                                leaf cost-level1 {
                                  type uint32 {
                                    range
                                      "1..16777215";
                                  }
                                  must
                                    "(../cost-level1<=63) or ((../../../../../../../cost-style='wide' or ../../../../../../../cost-style='wtransition') and ../cost-level1<=16777215)";
                                  description
                                    "Link cost of an interface used for the level 1 SPF calculation.";
                                }
    
                                leaf cost-level2 {
                                  type uint32 {
                                    range
                                      "1..16777215";
                                  }
                                  must
                                    "(../cost-level2<=63) or ((../../../../../../../cost-style='wide' or ../../../../../../../cost-style='wtransition') and ../cost-level2<=16777215)";
                                  description
                                    "Link cost of an interface used for the level 2 SPF calculation.";
                                }
    
                                leaf tag-level1 {
                                  type uint32 {
                                    range
                                      "0..4294967295";
                                  }
                                  default "0";
                                  description
                                    "Set the level 1 tag value for direct routes on the interface. A value of 0 indicates disable.";
                                }
    
                                leaf tag-level2 {
                                  type uint32 {
                                    range
                                      "0..4294967295";
                                  }
                                  default "0";
                                  description
                                    "Set the level 2 tag value for direct routes on the interface. A value of 0 indicates disable.";
                                }
    
                                leaf incr-cost {
                                  when
                                    "../../../type='afipv4'";
                                  type uint32 {
                                    range
                                      "1..16777214";
                                  }
                                  description
                                    "Set the cost to be added if the link quality is low.";
                                }
    
                                container link-group-ports {
                                  description
                                    "List of link-group interface.";
                                  list link-group-port {
                                    key "level-type";
                                    description
                                      "Configure link-group interface.";
                                    leaf level-type {
                                      type level-type-two;
                                      description
                                        "Level type.";
                                    }
    
                                    leaf name {
                                      ext:operation-exclude "update";
                                      type leafref {
                                        path "/ni:network-instance/ni:instances/ni:instance/isis:isis/isis:sites/isis:site/isis:link-groups/isis:link-group/isis:name";
                                      }
                                      must
                                        "not(../../link-group-port[name!=current()])";
                                      mandatory
                                        true;
                                      description
                                        "To set link-group name.";
                                    }
                                  }  // list link-group-port
                                }  // container link-group-ports
                              }  // list topology
                            }  // container topologys
    
                            container delay-normalize {
                              description
                                "Configure metric-delay normalization.";
                              leaf interval {
                                type uint32 {
                                  range
                                    "1..16777215";
                                }
                                must
                                  "(../offset<../interval)";
                                description
                                  "Normalization interval value.";
                              }
    
                              leaf offset {
                                when
                                  "../interval";
                                type uint32 {
                                  range
                                    "0..16777214";
                                }
                                must
                                  "(../offset<../interval)";
                                default "0";
                                description
                                  "Normalization offset value.";
                              }
                            }  // container delay-normalize
                          }  // list af
                        }  // container afs
    
                        container disp-data {
                          config false;
                          description
                            "Statistics of interface data.";
                          leaf index {
                            type uint8;
                            description
                              "Circuit ID of an interface.";
                          }
    
                          leaf mtu {
                            type uint32;
                            description
                              "MTU value of an interface.";
                          }
    
                          leaf dis-level1 {
                            type boolean;
                            description
                              "Determine whether the interface is a level 1 DIS.";
                          }
    
                          leaf dis-level2 {
                            type boolean;
                            description
                              "Determine whether the interface is a level 2 DIS.";
                          }
    
                          leaf v4-status {
                            type string {
                              ext:value-meaning {
                                ext:item "UP" {
                                  ext:meaning "UP";
                                }
                              }
                              length "1..40";
                            }
                            description
                              "IPv4 status of the interface, up or down.";
                          }
    
                          leaf mtu-state {
                            type boolean;
                            description
                              "MTU status of an interface, up or down.";
                          }
    
                          leaf link-state {
                            type boolean;
                            description
                              "Link status of an interface, up or down.";
                          }
    
                          leaf ip-state {
                            type boolean;
                            description
                              "IPv4 address status of an interface, up or down.";
                          }
    
                          leaf v6-status {
                            type string {
                              ext:value-meaning {
                                ext:item "UP" {
                                  ext:meaning "UP";
                                }
                              }
                              length "1..40";
                            }
                            description
                              "ISIS IPv6 status of an interface, up or down.";
                          }
    
                          leaf mtu-v6-state {
                            type boolean;
                            description
                              "MTU IPv6 status of an interface, up or down.";
                          }
    
                          leaf link-v6-state {
                            type boolean;
                            description
                              "Link IPv6 status of an interface, up or down.";
                          }
    
                          leaf ip-v6-state {
                            type boolean;
                            description
                              "IPv6 address status of an interface, up or down.";
                          }
    
                          leaf vc-state {
                            type boolean;
                            description
                              "Virtual cluster status of an interface, up or down.";
                          }
    
                          leaf peer-flap-status {
                            type peer-flap-status-type;
                            description
                              "Display the neighbor relationship flapping suppression status.";
                          }
    
                          leaf peer-flap-count {
                            type uint32;
                            description
                              "Display the current flapping count.";
                          }
    
                          leaf peer-flap-threshold {
                            type uint32;
                            description
                              "Display threshold of neighbor relationship flapping suppression.";
                          }
    
                          leaf peer-flap-timer {
                            type string {
                              length "1..40";
                            }
                            description
                              "Display the time when neighbor relationship flapping suppression took effect.";
                          }
    
                          leaf peer-flap-remain-timer {
                            type uint32;
                            units "s";
                            description
                              "Display the remaining time of neighbor relationship flapping suppression.";
                          }
    
                          leaf osi-state {
                            type boolean;
                            description
                              "OSI state of the interface, up or down.";
                          }
    
                          leaf snpa-state {
                            type boolean;
                            description
                              "SNPA state of the interface, up or down.";
                          }
    
                          leaf bandwidth-state {
                            type boolean;
                            description
                              "Bandwidth state of the interface, up or down.";
                          }
    
                          leaf enable-state {
                            type boolean;
                            description
                              "ISIS enable state of the interface, up or down.";
                          }
    
                          leaf v6-osi-state {
                            type boolean;
                            description
                              "IPv6 OSI state of the interface, up or down.";
                          }
    
                          leaf v6-snpa-state {
                            type boolean;
                            description
                              "IPv6 SNPA state of the interface, up or down.";
                          }
    
                          leaf v6-bandwidth-state {
                            type boolean;
                            description
                              "IPv6 bandwidth state of the interface, up or down.";
                          }
    
                          leaf v6-enable-state {
                            type boolean;
                            description
                              "ISIS IPv6 enable state of the interface, up or down.";
                          }
                        }  // container disp-data
                      }  // list circuit
                    }  // container circuits
    
                    container tlv-fragments {
                      description
                        "Configure IS-IS TLV fragmentation.";
                      leaf disable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable IS-IS TLV fragmentation.";
                      }
                    }  // container tlv-fragments
    
                    container afs {
                      description
                        "List of address family of IPv4 and IPv6.";
                      list af {
                        ext:generated-by "system" {
                          ext:filter "type='afipv4'";
                        }
                        key "type";
                        max-elements 2;
                        description
                          "Configure address family of IPv4 and IPv6. IPv4 base topo is generated by the ISIS process, which is not allowed to be created separately.";
                        leaf type {
                          type af-type;
                          must
                            "(../type='afipv4' and ../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']) or (../type='afipv6' and ../../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'])";
                          description
                            "Address family type of the multi topology.";
                        }
    
                        leaf ipv6-base-topo {
                          when
                            "../type='afipv6'";
                          type base-topo-v6;
                          default "ipv6";
                          description
                            "Type of IPv6 enabling.";
                        }
    
                        leaf apply-qppb {
                          type boolean;
                          must
                            "../apply-qppb='false' or ../type='afipv6'";
                          default "false";
                          description
                            "Enable/disable IPv6 qppb.";
                        }
    
                        leaf max-load-balancing {
                          ext:dynamic-default;
                          type uint32 {
                            range "1..128";
                          }
                          description
                            "Set the maximum number of equal cost routes for load balancing.";
                        }
    
                        leaf auto-cost {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable automatic cost calculation for the system.";
                        }
    
                        leaf auto-cost-compatible {
                          when
                            "../auto-cost='true'";
                          type boolean;
                          default "false";
                          description
                            "Enable/disable automatic cost calculation compatibly for the system.";
                        }
    
                        leaf bandwidth {
                          type uint32 {
                            range
                              "1..2147483648";
                          }
                          units "Mbit/s";
                          default "100";
                          description
                            "Set the bandwidth reference used for the automatic cost calculation on an interface.";
                        }
    
                        leaf cost-level1 {
                          type uint32 {
                            range "1..16777215";
                          }
                          must
                            "(../cost-level1<=63) or (not(../../../cost-style!='wide' and ../../../cost-style!='wtransition') and ../cost-level1<=16777215)";
                          description
                            "Set the level 1 cost for an interface.";
                        }
    
                        leaf cost-level2 {
                          type uint32 {
                            range "1..16777215";
                          }
                          must
                            "(../cost-level2<=63) or (not(../../../cost-style!='wide' and ../../../cost-style!='wtransition') and ../cost-level2<=16777215)";
                          description
                            "Set the level 2 cost for an interface.";
                        }
    
                        leaf bfd-bit-error {
                          type boolean;
                          must
                            "../bfd-bit-error='false' or ../type='afipv4'";
                          default "false";
                          description
                            "Enable/disable BFD bit error on all interfaces.";
                        }
    
                        leaf default-tag-level1 {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          description
                            "Indicates the administrative tag for a Level-1 interface on which IS-IS process is enabled.";
                        }
    
                        leaf default-tag-level2 {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          description
                            "Indicates the administrative tag for a Level-2 interface on which IS-IS process is enabled.";
                        }
    
                        container attach-bit {
                          when
                            "../type!='afipv6'";
                          description
                            "Configure LSPs with the ATT bit.";
                          leaf adv-control {
                            type att-adv-mode;
                            default "no-type";
                            description
                              "Control to advertise the ATT bit.";
                          }
    
                          leaf avoid-learn {
                            type boolean;
                            must
                              "../avoid-learn='false' or ../../type='afipv4'";
                            default "false";
                            description
                              "Enable/disable prevent the device from learning the LSPs with the ATT bit.";
                          }
                        }  // container attach-bit
    
                        container preference {
                          description
                            "Configure a priority for ISIS.";
                          leaf value {
                            type uint32 {
                              range "1..255";
                            }
                            default "15";
                            description
                              "Set the priority for protocols. The smaller the value, the higher the priority.";
                          }
    
                          choice policy-type {
                            description
                              "Type of preference rule.";
                            case route-policy {
                              description
                                "Set a route policy name.";
                              leaf route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a route policy name.";
                              }
                            }  // case route-policy
    
                            case route-filter {
                              description
                                "Set a route filter name.";
                              leaf route-filter {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Set a route filter name.";
                              }
                            }  // case route-filter
                          }  // choice policy-type
                        }  // container preference
    
                        container default-route {
                          presence
                            "Enable default routes.";
                          description
                            "Configure the level 1 and level 2 routers to generate default routes.";
                          leaf mode {
                            type default-mode;
                            must
                              "../mode!='match-any' or (../mode='match-any' and (../route-policy-name or ../route-filter-name))";
                            default "always";
                            description
                              "Set the default routes mode. When the mode is not match any, route policy name and route filter name cannot be configured.";
                          }
    
                          choice policy-type {
                            description
                              "Mode of the policy used for default route.";
                            case route-policy-name {
                              description
                                "Name of a routing policy.";
                              leaf route-policy-name {
                                when
                                  "../mode='match-any'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a route policy name for default routes.";
                              }
                            }  // case route-policy-name
    
                            case route-filter-name {
                              description
                                "Name of a routing filter.";
                              leaf route-filter-name {
                                when
                                  "../mode='match-any'";
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Set a xpl route policy name entity for default routes.";
                              }
                            }  // case route-filter-name
                          }  // choice policy-type
    
                          leaf cost {
                            type uint32 {
                              range
                                "0..4261412864";
                            }
                            must
                              "../cost<=63 or ../../type='afipv4' and (../../../../cost-style='wide' or ../../../../cost-style='wtransition')";
                            default "0";
                            description
                              "Set a cost for default routes.";
                          }
    
                          leaf tag {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "0";
                            description
                              "Set a tag for default routes.";
                          }
    
                          leaf level-type {
                            type level-type;
                            default "level-2";
                            description
                              "Set a level for default routes.";
                          }
    
                          leaf avoid-learning {
                            type boolean;
                            must
                              "(../avoid-learning='false' or ../learning-avoid-loop='false')";
                            default "false";
                            description
                              "Enable/disable to prevent ISIS processes from learning default routes and adding the default routes to the routing table. If the default routes that already exist in the routing table are active, the status of the route is set to inactive.";
                          }
    
                          leaf learning-avoid-loop {
                            type boolean;
                            must
                              "(../learning-avoid-loop='false') or (../avoid-learning='false' and ../../type='afipv6')";
                            default "false";
                            description
                              "Enable/disable to prevent learning of the default route into a loop.";
                          }
                        }  // container default-route
    
                        container import-routes {
                          description
                            "List of import route of other routing protocols.";
                          list import-route {
                            key "protocol process-id";
                            description
                              "Configure import route of other routing protocols.";
                            leaf protocol {
                              type import-protocol;
                              must
                                "(../../../type='afipv4' and not(../protocol='ospfv3' or ../protocol='ripng')) or (../../../type='afipv6' and not(../protocol='ospf' or ../protocol='rip'))";
                              description
                                "Set the routing protocol from which routes are imported.";
                            }
    
                            leaf process-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              must
                                "(../process-id=0 and (../protocol='direct' or ../protocol='static' or ../protocol='bgp' or ../protocol='unr')) or (../process-id>0 and (../protocol='ospf' or ../protocol='isis' or ../protocol='rip' or ../protocol='ospfv3' or ../protocol='ripng'))";
                              must
                                "not (../process-id=../../../../../id and ../protocol='isis')";
                              description
                                "Set the process ID. The process ID is required when the routing protocol is RIP, OSPF, or ISIS.";
                            }
    
                            leaf cost-type {
                              when
                                "../../../type='afipv4' and ../inherit-cost='false'";
                              type is-import-cost;
                              default "external";
                              description
                                "Set the cost type for imported routes.";
                            }
    
                            leaf cost {
                              when
                                "../inherit-cost='false'";
                              type uint32 {
                                range
                                  "0..4261412864";
                              }
                              must
                                "(../cost<=63) or (not(../../../../../cost-style!='wide' and ../../../../../cost-style!='wtransition') and ../cost<=4261412864)";
                              default "0";
                              description
                                "Set a cost for imported routes. If the ISIS cost type is narrow, narrow compatible, or compatible, the value ranges from 1 to 63.";
                            }
    
                            leaf tag {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              default "0";
                              description
                                "Set a tag for imported routes. A value of 0 indicates disable.";
                            }
    
                            choice policy-type {
                              description
                                "Mode of the policy used for import route.";
                              case route-policy-name {
                                description
                                  "Set a route policy name.";
                                leaf route-policy-name {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Set a route policy name.";
                                }
                              }  // case route-policy-name
    
                              case route-filter-name {
                                description
                                  "Name of a routing filter.";
                                leaf route-filter-name {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Specify a route filter.";
                                }
    
                                leaf parameter {
                                  when
                                    "../route-filter-name";
                                  type xpl:filter-parameter-type;
                                  description
                                    "Specify an import route-filter parameter.";
                                }
                              }  // case route-filter-name
                            }  // choice policy-type
    
                            leaf level-type {
                              type level-type;
                              default "level-2";
                              description
                                "Import routes to the level 1 or (and) level 2 routing table.";
                            }
    
                            leaf inherit-cost {
                              type boolean;
                              must
                                "(../inherit-cost='false') or (../protocol!='static' and not(../cost-type))";
                              default "false";
                              description
                                "Enable/disable keep the original cost of a route when importing the route to ISIS.";
                            }
    
                            leaf permit-ibgp {
                              type boolean;
                              must
                                "../permit-ibgp='false' or ../protocol='bgp'";
                              default "false";
                              description
                                "Enable/disable the device to import IBGP routes.";
                            }
    
                            leaf nosidflag {
                              type boolean;
                              must
                                "../nosidflag='false' or (../protocol='isis' or ../protocol='ospf')";
                              default "false";
                              description
                                "Enable/disable prohibit sid when import other process or protocol routes.";
                            }
                          }  // list import-route
                        }  // container import-routes
    
                        container nexthop-weights {
                          when
                            "../type='afipv4'";
                          description
                            "List of next hop weight.";
                          list nexthop-weight {
                            key "ip-address";
                            max-elements
                              131072;
                            description
                              "Configure next hop weight.";
                            leaf ip-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Set a next hop address.";
                            }
    
                            leaf weight {
                              type uint32 {
                                range "1..254";
                              }
                              mandatory true;
                              description
                                "Set a weight value for the next hop.";
                            }
                          }  // list nexthop-weight
                        }  // container nexthop-weights
    
                        container leak-route-level2-to-level1 {
                          presence
                            "Leak route level2 to level1.";
                          description
                            "Configure to control ISIS to perform route leaking from level 2 to level 1. This command needs to be set on the level 1 2 router connected to the external areas.";
                          leaf tag {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "0";
                            description
                              "Management label value assigned for imported routes. The label value is the name of route filtering during route leaking. A value of 0 indicates disable.";
                          }
    
                          choice policy-type {
                            description
                              "Mode of the policy used for route leaking.";
                            case basic-acl4 {
                              description
                                "Apply basic ACL name or ACL number.";
                              leaf name-or-num-v4 {
                                when
                                  "../../type='afipv4'";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Apply basic ACL name or ACL number.";
                              }
                            }  // case basic-acl4
    
                            case basic-acl6 {
                              description
                                "Apply basic ACL6 name or ACL6 number.";
                              leaf name-or-num-v6 {
                                when
                                  "../../type='afipv6'";
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Apply basic ACL6 name or ACL6 number.";
                              }
                            }  // case basic-acl6
    
                            case ipv4-prefix {
                              description
                                "Set the name of an IP prefix list.";
                              leaf ipv4-prefix {
                                when
                                  "../../type='afipv4'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Set the name of an IP prefix list.";
                              }
                            }  // case ipv4-prefix
    
                            case ipv6-prefix {
                              description
                                "Set the name of an IPv6 prefix list.";
                              leaf ipv6-prefix {
                                when
                                  "../../type='afipv6'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Set the name of an IPv6 prefix list.";
                              }
                            }  // case ipv6-prefix
    
                            case route-policy-name {
                              description
                                "Set a route policy name.";
                              leaf route-policy-name {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Name of the route filtering policy used during route leaking.";
                              }
                            }  // case route-policy-name
    
                            case route-filter-name {
                              description
                                "Set a route filter name.";
                              leaf route-filter-name {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Set a route filter name.";
                              }
                            }  // case route-filter-name
                          }  // choice policy-type
    
                          leaf allow-filter {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the name of a route policy which filters routes based on the tag or other protocol parameters.";
                          }
    
                          leaf allow-updown {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the Up/Down bit for routes.";
                          }
    
                          leaf nosidflag {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable prohibit sid when leak routes from level 2 to level 1.";
                          }
                        }  // container leak-route-level2-to-level1
    
                        container leak-route-level1-to-level2 {
                          description
                            "Configure the leaking of the routes from a level 1 area to a level 2 area. This is convenient for route management. This command needs to be configured on the level 1 2 router connected to external areas.";
                          leaf enable {
                            type boolean;
                            default "true";
                            description
                              "Enable/disable level 1 to level 2 route filtering.";
                          }
    
                          choice policy-type {
                            description
                              "Type of filter policy rule.";
                            case basic-acl4 {
                              description
                                "Apply basic ACL name or ACL number.";
                              leaf name-or-num-v4 {
                                when
                                  "../enable='true' and ../../type='afipv4'";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Apply basic ACL name or ACL number.";
                              }
                            }  // case basic-acl4
    
                            case basic-acl6 {
                              description
                                "Apply basic ACL6 name or ACL6 number.";
                              leaf name-or-num-v6 {
                                when
                                  "../enable='true' and ../../type='afipv6'";
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Apply basic ACL6 name or ACL6 number.";
                              }
                            }  // case basic-acl6
    
                            case ipv4-prefix {
                              description
                                "Set the name of an IP prefix list.";
                              leaf ipv4-prefix {
                                when
                                  "../enable='true' and ../../type='afipv4'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Set the name of an IP prefix list.";
                              }
                            }  // case ipv4-prefix
    
                            case ipv6-prefix {
                              description
                                "Set the name of an IPv6 prefix list.";
                              leaf ipv6-prefix {
                                when
                                  "../enable='true' and ../../type='afipv6'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Set the name of an IPv6 prefix list.";
                              }
                            }  // case ipv6-prefix
    
                            case route-policy {
                              description
                                "Set a route policy name.";
                              leaf route-policy {
                                when
                                  "../enable='true'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a route policy name.";
                              }
                            }  // case route-policy
    
                            case route-filter {
                              description
                                "Set a route filter name.";
                              leaf route-filter {
                                when
                                  "../enable='true'";
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Set a route filter name.";
                              }
                            }  // case route-filter
                          }  // choice policy-type
    
                          leaf tag {
                            when
                              "../enable='true'";
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            default "0";
                            description
                              "Administrative tag assigned for imported routes. A value of 0 indicates disable.";
                          }
    
                          leaf allow-filter {
                            when
                              "../enable='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the name of a route policy which filters routes based on the tag or other protocol parameters.";
                          }
    
                          leaf nosidflag {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable prohibit sid when leak routes from level 1 to level 2.";
                          }
                        }  // container leak-route-level1-to-level2
    
                        container summary-prefixs {
                          description
                            "List of summary routes.";
                          list summary-prefix {
                            key "prefix network-mask";
                            description
                              "Configure summary route.";
                            leaf prefix {
                              type inet:ip-address-no-zone;
                              description
                                "Set a summary address. Prefix is the address after mask.";
                            }
    
                            leaf network-mask {
                              type uint8 {
                                range "0..128";
                              }
                              description
                                "Set the summary address mask. If summary address is the type of IPv4, the max value is 32. If summary address is the type of IPv6, the max value is 128.";
                            }
    
                            leaf level-type {
                              type level-type;
                              default "level-2";
                              description
                                "Set the level for summary routes.";
                            }
    
                            leaf tag {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              default "0";
                              description
                                "Set a tag for summary routes.";
                            }
    
                            leaf gen-null0-route {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable generate a Null 0 route to prevent routing loops.";
                            }
    
                            leaf avoid-feadback {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable avoid learning summary routes.";
                            }
    
                            leaf cost {
                              when
                                "../../../type='afipv4'";
                              type uint32 {
                                range
                                  "1..16777215";
                              }
                              description
                                "Set a cost for summarized routes. If the ISIS cost type is narrow, narrow-compatible, or compatible, the value ranges from 1 to 63. If the ISIS cost type is wide or wide-compatible, the value ranges from 1 to 16777215.";
                            }
    
                            leaf learning-avoid-loop {
                              type boolean;
                              must
                                "(../learning-avoid-loop='false' or ../../../type='afipv6')";
                              default "false";
                              description
                                "Enable/disable to prevent learning of the same summary route into a loop.";
                            }
                          }  // list summary-prefix
                        }  // container summary-prefixs
    
                        container traffic-eng {
                          description
                            "Configure ISIS level enabled with the TE capability.";
                          leaf enable-level1 {
                            type boolean;
                            must
                              "../enable-level1='false' or ../../../../cost-style='wide' or ../../../../cost-style='wtransition' or ../../../../cost-style='transition'";
                            default "false";
                            description
                              "Enable/disable traffic eng enable level 1.";
                          }
    
                          leaf enable-level2 {
                            type boolean;
                            must
                              "../enable-level2='false' or ../../../../cost-style='wide' or ../../../../cost-style='wtransition' or ../../../../cost-style='transition'";
                            default "false";
                            description
                              "Enable/disable traffic eng enable level 2.";
                          }
    
                          container metric-delay {
                            when
                              "(../enable-level1='true' or ../enable-level2='true')";
                            description
                              "Configure metric delay in a ISIS process.";
                            leaf adv-level1 {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable metric delay advertisement.";
                            }
    
                            leaf adv-level2 {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable metric delay advertisement.";
                            }
    
                            leaf suppress-timer {
                              when
                                "../adv-level1='true' or ../adv-level2='true'";
                              type uint32 {
                                range "0..600";
                              }
                              units "s";
                              default "120";
                              description
                                "Metric delay suppress timer.";
                            }
    
                            leaf suppress-percent {
                              when
                                "../adv-level1='true' or ../adv-level2='true'";
                              type uint8 {
                                range "0..100";
                              }
                              default "10";
                              description
                                "Metric delay suppress percent threshold.";
                            }
    
                            leaf suppress-absolute {
                              when
                                "../adv-level1='true' or ../adv-level2='true'";
                              type uint32 {
                                range "0..10000";
                              }
                              default "1000";
                              description
                                "Metric delay suppress absolute threshold.";
                            }
                          }  // container metric-delay
    
                          container metric-link-losses {
                            when
                              "(../enable-level1='true' or ../enable-level2='true')";
                            description
                              "Configure metric link loss in a ISIS process.";
                            leaf adv-level1 {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable metric link loss advertisement.";
                            }
    
                            leaf adv-level2 {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable metric link loss advertisement.";
                            }
    
                            leaf suppress-timer {
                              when
                                "../adv-level1='true' or ../adv-level2='true'";
                              type uint32 {
                                range "0..600";
                              }
                              units "s";
                              default "120";
                              description
                                "Metric link loss suppress timer.";
                            }
    
                            leaf suppress-percent {
                              when
                                "../adv-level1='true' or ../adv-level2='true'";
                              type uint8 {
                                range "0..100";
                              }
                              default "10";
                              description
                                "Metric link loss suppress percent threshold.";
                            }
    
                            leaf suppress-absolute {
                              when
                                "../adv-level1='true' or ../adv-level2='true'";
                              type uint32 {
                                range "0..10000";
                              }
                              default "1000";
                              description
                                "Metric link loss suppress absolute threshold.";
                            }
                          }  // container metric-link-losses
                        }  // container traffic-eng
    
                        container bfd {
                          description
                            "Configure ISIS BFD parameters.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable BFD on all interfaces.";
                          }
    
                          leaf frr-binding {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable bind the BFD status to the link status of an interface.";
                          }
    
                          leaf min-rx {
                            ext:dynamic-default;
                            type uint32 {
                              range "3..20000";
                            }
                            units "ms";
                            description
                              "Set the minimum interval at which BFD packets are received. The default value and range controlled by PAF.";
                          }
    
                          leaf min-tx {
                            ext:dynamic-default;
                            type uint32 {
                              range "3..20000";
                            }
                            units "ms";
                            description
                              "Set the minimum interval at which BFD packets are sent. The default value and range controlled by PAF.";
                          }
    
                          leaf detect-multiplier {
                            type uint32 {
                              range "3..50";
                            }
                            default "3";
                            description
                              "Set the detection multiplier of a BFD session.";
                          }
    
                          leaf tos-exp {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Set the priority of BFD packets.";
                          }
    
                          leaf bfd-incr-cost {
                            type uint32 {
                              range
                                "1..16777214";
                            }
                            description
                              "Set the increasing cost value for bfd.";
                          }
                        }  // container bfd
    
                        container ldp-sync {
                          when
                            "../type='afipv4'";
                          description
                            "Configure LDP and ISIS synchronization.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable LDP and ISIS synchronization on an interface.";
                          }
    
                          leaf mpls-binding {
                            when
                              "../enable='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable MPLS LDP association.";
                          }
    
                          leaf hold-down-timer {
                            type uint32 {
                              range "0..65535";
                            }
                            units "s";
                            description
                              "Set a value for the LDP and ISIS synchronization holddown timer.";
                          }
    
                          choice hold-cost-max {
                            default "infinite";
                            description
                              "Set a value for the LDP and ISIS synchronization timer.";
                            case timer {
                              description
                                "Set a value for the LDP and ISIS synchronization timer.";
                              leaf timer {
                                type uint32 {
                                  range
                                    "0..65535";
                                }
                                units "s";
                                description
                                  "Set a value for the LDP and ISIS synchronization timer.";
                              }
                            }  // case timer
    
                            case infinite {
                              description
                                "Enable infinite LDP and ISIS synchronization.";
                              leaf infinite {
                                type empty;
                                description
                                  "Enable infinite LDP and ISIS synchronization. The LDP and ISIS synchronization is kept before the LDP session goes up.";
                              }
                            }  // case infinite
                          }  // choice hold-cost-max
                        }  // container ldp-sync
    
                        container mpls-ldp-global {
                          description
                            "Configure MPLS LDP configuration.";
                          leaf auto-flag {
                            when
                              "../../type='afipv4'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable auto MPLS LDP configuration on an interface.";
                          }
                        }  // container mpls-ldp-global
    
                        container advertise-link-attributes {
                          description
                            "Configure ISIS advertise attribute configuration.";
                          leaf enable {
                            type boolean;
                            must
                              "../enable='false' or ../../../../cost-style='wide' or ../../../../cost-style='transition' or ../../../../cost-style='wtransition'";
                            default "false";
                            description
                              "Enable/disable the ISIS process to advertise link attribute related TLVs on the LSP.";
                          }
                        }  // container advertise-link-attributes
    
                        container prefix-prioritys {
                          description
                            "List of route priority.";
                          list prefix-priority {
                            key "level priority";
                            description
                              "Configure route priority.";
                            leaf level {
                              type level-type-two;
                              description
                                "Set a level type for the route priority.";
                            }
    
                            leaf priority {
                              type priority-type;
                              description
                                "Set a route priority.";
                            }
    
                            choice policy-flag {
                              mandatory true;
                              description
                                "Set a filtering policy for the route priority.";
                              case tag {
                                description
                                  "Set a tag for the route priority.";
                                leaf tag {
                                  type uint32 {
                                    range
                                      "1..4294967295";
                                  }
                                  description
                                    "Set a tag for the route priority.";
                                }
                              }  // case tag
    
                              case ip-prefix {
                                description
                                  "Set the name of an IP prefix list.";
                                leaf ip-prefix {
                                  when
                                    "../../../type='afipv4'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Set the name of an IP prefix list.";
                                }
                              }  // case ip-prefix
    
                              case ipv6-prefix {
                                description
                                  "Set the name of an IPv6 prefix list.";
                                leaf ipv6-prefix {
                                  when
                                    "../../../type='afipv6'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Set the name of an IPv6 prefix list.";
                                }
                              }  // case ipv6-prefix
                            }  // choice policy-flag
                          }  // list prefix-priority
                        }  // container prefix-prioritys
    
                        container frr {
                          description
                            "Configure FRR.";
                          leaf enable {
                            type boolean;
                            default "false";
                            description
                              "Enable/disable FRR.";
                          }
    
                          choice policy-type {
                            description
                              "Type of frr policy route.";
                            case route-policy {
                              description
                                "Set a route policy name.";
                              leaf route-policy {
                                when
                                  "../enable='true'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Set a route policy name.";
                              }
                            }  // case route-policy
    
                            case route-filter {
                              description
                                "Set a route filter name.";
                              leaf route-filter {
                                when
                                  "../enable='true'";
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Set a route filter name.";
                              }
                            }  // case route-filter
                          }  // choice policy-type
    
                          leaf lfa-level1 {
                            when
                              "../enable='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ISIS auto FRR of Level 1 and calculate loop free alternate routes using the LFA arithmetic.";
                          }
    
                          leaf lfa-level2 {
                            when
                              "../enable='true'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable ISIS auto FRR of Level 2 and calculate loop free alternate routes using the LFA arithmetic.";
                          }
    
                          leaf ecmp-level1 {
                            when
                              "../enable='true'";
                            type boolean;
                            default "true";
                            description
                              "Enable/disable Level 1 ECMP FRR and calculate backup paths for load sharing paths.";
                          }
    
                          leaf ecmp-level2 {
                            when
                              "../enable='true'";
                            type boolean;
                            default "true";
                            description
                              "Enable/disable Level 2 ECMP FRR and calculate backup paths for load sharing paths.";
                          }
    
                          container remote-lfa {
                            when
                              "../../../../../../../ni:name='_public_'";
                            description
                              "Configure RLFA.";
                            leaf rlfa-level1 {
                              type boolean;
                              must
                                "../rlfa-level1='false' or (../../../type='afipv6' and ../../../../../afs/af[type='afipv4']/frr/remote-lfa/rlfa-level1='true') or (../../../type='afipv4' and ../../lfa-level1='true')";
                              default "false";
                              description
                                "Enable/disable level 1 remote LFA.";
                            }
    
                            leaf rlfa-level2 {
                              type boolean;
                              must
                                "../rlfa-level2='false' or (../../../type='afipv6' and ../../../../../afs/af[type='afipv4']/frr/remote-lfa/rlfa-level2='true') or (../../../type='afipv4' and ../../lfa-level2='true')";
                              default "false";
                              description
                                "Enable/disable level 2 remote LFA.";
                            }
    
                            leaf max-cost-level1 {
                              when
                                "../../../type='afipv4' and ../rlfa-level1='true'";
                              type uint32 {
                                range
                                  "1..4261412864";
                              }
                              default
                                "4261412864";
                              description
                                "Remote-lfa tunnel ldp maximum-reachable-cost level-1.";
                            }
    
                            leaf max-cost-level2 {
                              when
                                "../../../type='afipv4' and ../rlfa-level2='true'";
                              type uint32 {
                                range
                                  "1..4261412864";
                              }
                              default
                                "4261412864";
                              description
                                "Remote-lfa tunnel ldp maximum-reachable-cost level-2.";
                            }
    
                            leaf ip-prefix-level1 {
                              when
                                "../../../type='afipv4' and ../../enable='true'";
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Filter PQ node. Those nodes which don't pass filter can't be PQ node.";
                            }
    
                            leaf ip-prefix-level2 {
                              when
                                "../../../type='afipv4' and ../../enable='true'";
                              type leafref {
                                path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                              }
                              description
                                "Filter PQ node. Those nodes which don't pass filter can't be PQ node.";
                            }
                          }  // container remote-lfa
    
                          container tiebreaker {
                            description
                              "Configure a Rule of Selecting a Backup Path for IS-IS Auto FRR.";
                            leaf node-protect-level1 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level1='true' or ../node-protect-level1=40";
                              default "40";
                              description
                                "Set the value of level1 node protect prefer, the default value is 40.";
                            }
    
                            leaf node-protect-level2 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level2='true' or ../node-protect-level2=40";
                              default "40";
                              description
                                "Set the value of level2 node protect prefer, the default value is 40.";
                            }
    
                            leaf lowest-cost-level1 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level1='true' or ../lowest-cost-level1=20";
                              default "20";
                              description
                                "Set the value of level1 lowcost prefer, the default value is 20.";
                            }
    
                            leaf lowest-cost-level2 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level2='true' or ../lowest-cost-level2=20";
                              default "20";
                              description
                                "Set the value of level2 lowcost prefer, the default value is 20.";
                            }
    
                            leaf non-ecmp-level1 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level1='true' or ../non-ecmp-level1=10";
                              default "10";
                              description
                                "Set the value of level1 non ecmp path prefer, the default value is 10.";
                            }
    
                            leaf non-ecmp-level2 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level2='true' or ../non-ecmp-level2=10";
                              default "10";
                              description
                                "Set the value of level2 non ecmp path prefer, the default value is 10.";
                            }
    
                            leaf srlg-disjoint-level1 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level1='true' or ../srlg-disjoint-level1=5";
                              default "5";
                              description
                                "Set the value of level1 srlg-disjoint path prefer, the default value is 5.";
                            }
    
                            leaf srlg-disjoint-level2 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level2='true' or ../srlg-disjoint-level2=5";
                              default "5";
                              description
                                "Set the value of level2 srlg-disjoint path prefer, the default value is 5.";
                            }
    
                            leaf hold-max-cost-level1 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level1='true' or ../hold-max-cost-level1=15";
                              default "15";
                              description
                                "Set the value of level1 hold max cost link prefer.";
                            }
    
                            leaf hold-max-cost-level2 {
                              type uint8 {
                                range "1..255";
                              }
                              must
                                "../../lfa-level2='true' or ../hold-max-cost-level2=15";
                              default "15";
                              description
                                "Set the value of level2 hold max cost link prefer.";
                            }
                          }  // container tiebreaker
    
                          container tilfa {
                            when
                              "../../../../../../../ni:name='_public_'";
                            description
                              "Configure TILFA.";
                            leaf enable-level1 {
                              type boolean;
                              must
                                "../../lfa-level1='true' or ../enable-level1='false'";
                              default "false";
                              description
                                "Enable/disable Level 1 TILFA.";
                            }
    
                            leaf enable-level2 {
                              type boolean;
                              must
                                "../../lfa-level2='true' or ../enable-level2='false'";
                              default "false";
                              description
                                "Enable/disable Level 2 TILFA.";
                            }
                          }  // container tilfa
                        }  // container frr
    
                        container filter-import {
                          presence
                            "filter policy import";
                          description
                            "Configure filter incoming routing updates.";
                          choice policy-type {
                            mandatory true;
                            description
                              "Mode of the policy used for filter import.";
                            case basic-acl4 {
                              description
                                "Apply basic ACL name or ACL number.";
                              leaf name-or-num-v4 {
                                when
                                  "../../type='afipv4'";
                                type leafref {
                                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Apply basic ACL name or ACL number.";
                              }
                            }  // case basic-acl4
    
                            case basic-acl6 {
                              description
                                "Apply basic ACL6 name or ACL6 number.";
                              leaf name-or-num-v6 {
                                when
                                  "../../type='afipv6'";
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Apply basic ACL6 name or ACL6 number.";
                              }
                            }  // case basic-acl6
    
                            case ipv4-prefix {
                              description
                                "Set the name of an IP prefix list.";
                              leaf ipv4-prefix {
                                when
                                  "../../type='afipv4'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                }
                                description
                                  "Set the name of an IP prefix list.";
                              }
                            }  // case ipv4-prefix
    
                            case ipv6-prefix {
                              description
                                "Set the name of an IPv6 prefix list.";
                              leaf ipv6-prefix {
                                when
                                  "../../type='afipv6'";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Set the name of an IPv6 prefix list.";
                              }
                            }  // case ipv6-prefix
    
                            case route-policy {
                              description
                                "Set a route policy name.";
                              leaf route-policy {
                                type leafref {
                                  path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                }
                                description
                                  "Name of the route filtering policy used during route leaking.";
                              }
                            }  // case route-policy
    
                            case route-filter {
                              description
                                "Set a route filter name.";
                              leaf route-filter {
                                type leafref {
                                  path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                }
                                description
                                  "Set a route filter name.";
                              }
                            }  // case route-filter
                          }  // choice policy-type
                        }  // container filter-import
    
                        container filter-exports {
                          description
                            "List of filter outgoing routing update.";
                          list filter-export {
                            key "protocol protocol-id";
                            description
                              "Configure filter outgoing routing update.";
                            leaf protocol {
                              type filter-export-type;
                              must
                                "not(../protocol='ospfv3' or ../protocol='ripng') or (../../../type='afipv6' and (../protocol='ospfv3' or ../protocol='ripng'))";
                              description
                                "Protocol that advertises routes.";
                            }
    
                            leaf protocol-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              must
                                "(../protocol-id=0 and (../protocol='direct' or ../protocol='static' or ../protocol='bgp' or ../protocol='all' or ../protocol='unr')) or (../protocol-id>0 and (../protocol='ospf' or ../protocol='rip' or ../protocol='ospfv3' or ../protocol='ripng' or (../protocol='isis' and ../protocol-id!=../../../../../id)))";
                              description
                                "Process ID when the advertised protocol is RIP, ISIS, or OSPF.";
                            }
    
                            choice policy-type {
                              mandatory true;
                              description
                                "Mode of the policy used for filter export.";
                              case basic-acl4 {
                                description
                                  "Apply basic ACL name or ACL number.";
                                leaf name-or-num-v4 {
                                  when
                                    "../../../type='afipv4'";
                                  type leafref {
                                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "Apply basic ACL name or ACL number.";
                                }
                              }  // case basic-acl4
    
                              case basic-acl6 {
                                description
                                  "Apply basic ACL6 name or ACL6 number.";
                                leaf name-or-num-v6 {
                                  when
                                    "../../../type='afipv6'";
                                  type leafref {
                                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                  }
                                  must
                                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                  description
                                    "Apply basic ACL6 name or ACL6 number.";
                                }
                              }  // case basic-acl6
    
                              case ipv4-prefix {
                                description
                                  "Set the name of an IP prefix list.";
                                leaf ipv4-prefix {
                                  when
                                    "../../../type='afipv4'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Set the name of an IP prefix list.";
                                }
                              }  // case ipv4-prefix
    
                              case ipv6-prefix {
                                description
                                  "Set the name of an IPv6 prefix list.";
                                leaf ipv6-prefix {
                                  when
                                    "../../../type='afipv6'";
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                  }
                                  description
                                    "Set the name of an IPv6 prefix list.";
                                }
                              }  // case ipv6-prefix
    
                              case route-policy {
                                description
                                  "Set a route policy name.";
                                leaf route-policy {
                                  type leafref {
                                    path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                  }
                                  description
                                    "Name of the route filtering policy used during route leaking.";
                                }
                              }  // case route-policy
    
                              case route-filter {
                                description
                                  "Set a route filter name.";
                                leaf route-filter {
                                  type leafref {
                                    path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                  }
                                  description
                                    "Set a route filter name.";
                                }
                              }  // case route-filter
                            }  // choice policy-type
                          }  // list filter-export
                        }  // container filter-exports
    
                        container topologys {
                          when
                            "../../../../../../ni:name='_public_'";
                          description
                            "List of multi topology for an ISIS process.";
                          list topology {
                            key "mt-id";
                            unique "topo-name";
                            max-elements 62;
                            description
                              "Configure multi topology for an ISIS process.";
                            leaf mt-id {
                              type uint32 {
                                range "3..4095";
                              }
                              must
                                "(../../../type='afipv4' and (../mt-id=3 and ../topo-name='multicast')) or (../../../type='afipv6' and (../mt-id=4 and ../topo-name='multicast')) or (../mt-id>=6 and ../topo-name)";
                              must
                                "(../../../../../cost-style='wide' or ../../../../../cost-style='wtransition')";
                              description
                                "ISIS Multi topology ID.Mid values do not include 5.";
                            }
    
                            leaf topo-name {
                              ext:operation-exclude "update";
                              type leafref {
                                path "/ni:network-instance/ni:instances/ni:instance/l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name";
                              }
                              must
                                "((../mt-id=3 or ../mt-id=4) and ../topo-name='multicast') or (../mt-id>=6 and ../topo-name!='base' and ../topo-name!='multicast')";
                              must
                                "(../../../type='afipv4' and /ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name=current()]) or (../../../type='afipv6' and /ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name=current()])";
                              mandatory true;
                              description
                                "Multi topology name.";
                            }
    
                            leaf max-load-balancing {
                              ext:dynamic-default;
                              type uint32 {
                                range "1..128";
                              }
                              description
                                "Set the maximum number of equal cost routes for load balancing.";
                            }
    
                            leaf auto-cost {
                              type boolean;
                              default "false";
                              description
                                "Enable/disable automatic cost calculation for the system.";
                            }
    
                            leaf auto-cost-compatible {
                              when
                                "../auto-cost='true'";
                              type boolean;
                              default "false";
                              description
                                "Enable/disable automatic cost calculation compatibly for the system.";
                            }
    
                            leaf bandwidth {
                              type uint32 {
                                range
                                  "1..2147483648";
                              }
                              default "100";
                              description
                                "Set the bandwidth reference used for the automatic cost calculation on an interface.";
                            }
    
                            leaf cost-level1 {
                              type uint32 {
                                range
                                  "1..16777215";
                              }
                              must
                                "(../cost-level1<=63) or (not(../../../../../cost-style!='wide' and ../../../../../cost-style!='wtransition') and ../cost-level1<=16777215)";
                              description
                                "Set the level 1 cost for an interface.";
                            }
    
                            leaf cost-level2 {
                              type uint32 {
                                range
                                  "1..16777215";
                              }
                              must
                                "(../cost-level2<=63) or (not(../../../../../cost-style!='wide' and ../../../../../cost-style!='wtransition') and ../cost-level2<=16777215)";
                              description
                                "Set the level 2 cost for an interface.";
                            }
    
                            container attach-bit {
                              description
                                "Configure LSPs with the ATT bit.";
                              leaf adv-control {
                                type att-adv-mode;
                                default
                                  "no-type";
                                description
                                  "Control to advertise the ATT bit.";
                              }
    
                              leaf avoid-learn {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable prevent the device from learning the LSPs with the ATT bit.";
                              }
                            }  // container attach-bit
    
                            container preference {
                              description
                                "Configure a priority for ISIS.";
                              leaf value {
                                type uint32 {
                                  range "1..255";
                                }
                                default "15";
                                description
                                  "Set the priority for protocols. The smaller the value, the higher the priority.";
                              }
    
                              choice policy-type {
                                description
                                  "Type of preference rule.";
                                case route-policy {
                                  description
                                    "Set a route policy name.";
                                  leaf route-policy {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Set a route policy name.";
                                  }
                                }  // case route-policy
    
                                case route-filter {
                                  description
                                    "Set a route filter name.";
                                  leaf route-filter {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Set a route filter name.";
                                  }
                                }  // case route-filter
                              }  // choice policy-type
                            }  // container preference
    
                            container default-route {
                              presence
                                "Enable default routes.";
                              description
                                "Configure the level 1 and level 2 routers to generate default routes.";
                              leaf mode {
                                type default-mode;
                                must
                                  "../mode!='match-any' or (../mode='match-any' and (../route-policy-name or ../route-filter-name))";
                                default "always";
                                description
                                  "Set the default routes mode. When the mode is not match any, route policy name and route filter name cannot be configured.";
                              }
    
                              choice policy-type {
                                description
                                  "Mode of the policy used for default route.";
                                case route-policy-name {
                                  description
                                    "Name of a routing policy.";
                                  leaf route-policy-name {
                                    when
                                      "../mode='match-any'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Set a route policy name for default routes.";
                                  }
                                }  // case route-policy-name
    
                                case route-filter-name {
                                  description
                                    "Name of a routing filter.";
                                  leaf route-filter-name {
                                    when
                                      "../mode='match-any'";
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Set a xpl route policy name entity for default routes.";
                                  }
                                }  // case route-filter-name
                              }  // choice policy-type
    
                              leaf cost {
                                type uint32 {
                                  range
                                    "0..4261412864";
                                }
                                default "0";
                                description
                                  "Set a cost for default routes. If the ISIS cost type is narrow, narrow-compatible, or compatible, the value ranges from 1 to 63.";
                              }
    
                              leaf tag {
                                type uint32 {
                                  range
                                    "0..4294967295";
                                }
                                default "0";
                                description
                                  "Set a tag for default routes.";
                              }
    
                              leaf level-type {
                                type level-type;
                                default
                                  "level-2";
                                description
                                  "Set a level for default routes.";
                              }
    
                              leaf avoid-learning {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable to prevent ISIS processes from learning default routes and adding the default routes to the routing table. If the default routes that already exist in the routing table are active, the status of the route is set to inactive.";
                              }
                            }  // container default-route
    
                            container import-routes {
                              description
                                "List of import route of other routing protocols.";
                              list import-route {
                                key "protocol process-id";
                                description
                                  "Configure import route of other routing protocols.";
                                leaf protocol {
                                  type import-protocol;
                                  must
                                    "../protocol='direct' or ../protocol='isis' or ../protocol='static'";
                                  description
                                    "Set the routing protocol from which routes are imported.";
                                }
    
                                leaf process-id {
                                  type uint32 {
                                    range
                                      "0..4294967295";
                                  }
                                  must
                                    "../process-id=0 and (../protocol='direct' or ../protocol='static') or ../process-id>0 and (../protocol='isis')";
                                  must
                                    "not (../process-id=../../../../../../../id and ../protocol='isis')";
                                  description
                                    "Set the process ID. The process ID is required when the routing protocol is ISIS.";
                                }
    
                                leaf cost {
                                  when
                                    "../inherit-cost='false'";
                                  type uint32 {
                                    range
                                      "0..4261412864";
                                  }
                                  default "0";
                                  description
                                    "Set a cost for imported routes. If the ISIS cost type is narrow, narrow-compatible, or compatible, the value ranges from 1 to 63.";
                                }
    
                                leaf tag {
                                  type uint32 {
                                    range
                                      "0..4294967295";
                                  }
                                  default "0";
                                  description
                                    "Set a tag for imported routes. A value of 0 indicates disable.";
                                }
    
                                choice policy-type {
                                  description
                                    "Mode of the policy used for import route.";
                                  case route-policy-name {
                                    description
                                      "Set a route policy name.";
                                    leaf route-policy-name {
                                      type leafref {
                                        path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                      }
                                      description
                                        "Set a route policy name.";
                                    }
                                  }  // case route-policy-name
    
                                  case route-filter-name {
                                    description
                                      "Name of a routing filter.";
                                    leaf route-filter-name {
                                      type leafref {
                                        path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                      }
                                      description
                                        "Specify a route filter.";
                                    }
    
                                    leaf parameter {
                                      when
                                        "../route-filter-name";
                                      type xpl:filter-parameter-type;
                                      description
                                        "Specify an import route-filter parameter.";
                                    }
                                  }  // case route-filter-name
                                }  // choice policy-type
    
                                leaf level-type {
                                  type level-type;
                                  default
                                    "level-2";
                                  description
                                    "Import routes to the level 1 or (and) level 2 routing table.";
                                }
    
                                leaf inherit-cost {
                                  type boolean;
                                  must
                                    "../inherit-cost='false' or ../protocol!='static'";
                                  default
                                    "false";
                                  description
                                    "Enable/disable keep the original cost of a route when importing the route to ISIS.";
                                }
                              }  // list import-route
                            }  // container import-routes
    
                            container leak-route-level2-to-level1 {
                              presence
                                "Leak route level2 to level1.";
                              description
                                "Configure to control ISIS to perform route leaking from level 2 to level 1. This command needs to be set on the level 1 2 router connected to the external areas.";
                              leaf tag {
                                type uint32 {
                                  range
                                    "0..4294967295";
                                }
                                default "0";
                                description
                                  "Management label value assigned for imported routes. The label value is the name of route filtering during route leaking. A value of 0 indicates disable.";
                              }
    
                              choice policy-type {
                                description
                                  "Mode of the policy used for route leaking.";
                                case basic-acl4 {
                                  description
                                    "Apply basic ACL name or ACL number.";
                                  leaf name-or-num-v4 {
                                    when
                                      "../../../../type='afipv4'";
                                    type leafref {
                                      path "/acl:acl/acl:groups/acl:group/acl:identity";
                                    }
                                    must
                                      "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                    description
                                      "Apply basic ACL name or ACL number.";
                                  }
                                }  // case basic-acl4
    
                                case basic-acl6 {
                                  description
                                    "Apply basic ACL6 name or ACL6 number.";
                                  leaf name-or-num-v6 {
                                    when
                                      "../../../../type='afipv6'";
                                    type leafref {
                                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                    }
                                    must
                                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                    description
                                      "Apply basic ACL6 name or ACL6 number.";
                                  }
                                }  // case basic-acl6
    
                                case ipv4-prefix {
                                  description
                                    "Set the name of an IP prefix list.";
                                  leaf ipv4-prefix {
                                    when
                                      "../../../../type='afipv4'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                    }
                                    description
                                      "Set the name of an IP prefix list.";
                                  }
                                }  // case ipv4-prefix
    
                                case ipv6-prefix {
                                  description
                                    "Set the name of an IPv6 prefix list.";
                                  leaf ipv6-prefix {
                                    when
                                      "../../../../type='afipv6'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                    }
                                    description
                                      "Set the name of an IPv6 prefix list.";
                                  }
                                }  // case ipv6-prefix
    
                                case route-policy-name {
                                  description
                                    "Set a route policy name.";
                                  leaf route-policy-name {
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Name of the route filtering policy used during route leaking.";
                                  }
                                }  // case route-policy-name
    
                                case route-filter-name {
                                  description
                                    "Set a route filter name.";
                                  leaf route-filter-name {
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Set a route filter name.";
                                  }
                                }  // case route-filter-name
                              }  // choice policy-type
    
                              leaf allow-filter {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the name of a route policy which filters routes based on the tag or other protocol parameters.";
                              }
    
                              leaf allow-updown {
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the Up/Down bit for routes.";
                              }
                            }  // container leak-route-level2-to-level1
    
                            container leak-route-level1-to-level2 {
                              description
                                "Configure the leaking of the routes from a level 1 area to a level 2 area. This is convenient for route management. This command needs to be configured on the level 1 2 router connected to external areas.";
                              leaf enable {
                                type boolean;
                                default "true";
                                description
                                  "Enable/disable level 1 to level 2 route filtering.";
                              }
    
                              choice policy-type {
                                description
                                  "Type of filter policy rule.";
                                case basic-acl4 {
                                  description
                                    "Apply basic ACL name or ACL number.";
                                  leaf name-or-num-v4 {
                                    when
                                      "../enable='true' and ../../../../type='afipv4'";
                                    type leafref {
                                      path "/acl:acl/acl:groups/acl:group/acl:identity";
                                    }
                                    must
                                      "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                                    description
                                      "Apply basic ACL name or ACL number.";
                                  }
                                }  // case basic-acl4
    
                                case basic-acl6 {
                                  description
                                    "Apply basic ACL6 name or ACL6 number.";
                                  leaf name-or-num-v6 {
                                    when
                                      "../enable='true' and ../../../../type='afipv6'";
                                    type leafref {
                                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                    }
                                    must
                                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                    description
                                      "Apply basic ACL6 name or ACL6 number.";
                                  }
                                }  // case basic-acl6
    
                                case ipv4-prefix {
                                  description
                                    "Set the name of an IP prefix list.";
                                  leaf ipv4-prefix {
                                    when
                                      "../enable='true' and ../../../../type='afipv4'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:ipv4-prefix-filters/rtp:ipv4-prefix-filter/rtp:name";
                                    }
                                    description
                                      "Set the name of an IP prefix list.";
                                  }
                                }  // case ipv4-prefix
    
                                case ipv6-prefix {
                                  description
                                    "Set the name of an IPv6 prefix list.";
                                  leaf ipv6-prefix {
                                    when
                                      "../enable='true' and ../../../../type='afipv6'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                    }
                                    description
                                      "Set the name of an IPv6 prefix list.";
                                  }
                                }  // case ipv6-prefix
    
                                case route-policy {
                                  description
                                    "Set a route policy name.";
                                  leaf route-policy {
                                    when
                                      "../enable='true'";
                                    type leafref {
                                      path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                                    }
                                    description
                                      "Set a route policy name.";
                                  }
                                }  // case route-policy
    
                                case route-filter {
                                  description
                                    "Set a route filter name.";
                                  leaf route-filter {
                                    when
                                      "../enable='true'";
                                    type leafref {
                                      path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                                    }
                                    description
                                      "Set a route filter name.";
                                  }
                                }  // case route-filter
                              }  // choice policy-type
    
                              leaf tag {
                                when
                                  "../enable='true'";
                                type uint32 {
                                  range
                                    "0..4294967295";
                                }
                                default "0";
                                description
                                  "Administrative tag assigned for imported routes. A value of 0 indicates disable.";
                              }
    
                              leaf allow-filter {
                                when
                                  "../enable='true'";
                                type boolean;
                                default "false";
                                description
                                  "Enable/disable the name of a route policy which filters routes based on the tag or other protocol parameters.";
                              }
                            }  // container leak-route-level1-to-level2
    
                            container summary-prefixs {
                              description
                                "List of summary routes.";
                              list summary-prefix {
                                key "prefix network-mask";
                                description
                                  "Configure summary route.";
                                leaf prefix {
                                  type inet:ip-address-no-zone;
                                  description
                                    "Set a summary address. Prefix is the address after mask.";
                                }
    
                                leaf network-mask {
                                  type uint8 {
                                    range
                                      "0..128";
                                  }
                                  description
                                    "Set the summary address mask. If summary address is the type of IPv4, the max value is 32. If summary address is the type of IPv6, the max value is 128.";
                                }
    
                                leaf level-type {
                                  type level-type;
                                  default
                                    "level-2";
                                  description
                                    "Set the level for summary routes.";
                                }
    
                                leaf tag {
                                  type uint32 {
                                    range
                                      "0..4294967295";
                                  }
                                  default "0";
                                  description
                                    "Set a tag for summary routes.";
                                }
    
                                leaf gen-null0-route {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable generate a Null 0 route to prevent routing loops.";
                                }
    
                                leaf avoid-feadback {
                                  type boolean;
                                  default
                                    "false";
                                  description
                                    "Enable/disable avoid learning summary routes.";
                                }
                              }  // list summary-prefix
                            }  // container summary-prefixs
    
                            container route-statisticss {
                              config false;
                              status
                                deprecated;
                              description
                                "List of route statistics. The node route-statisticss is deprecated. You are advised to use the node route-counts.";
                              list route-statistics {
                                key "level";
                                status
                                  deprecated;
                                description
                                  "Statistics of route statistics. The node route-statistics is deprecated. You are advised to use the node route-count.";
                                leaf level {
                                  type level-type;
                                  status
                                    deprecated;
                                  description
                                    "Level type. The node level is deprecated. You are advised to use the node level.";
                                }
    
                                leaf v4-learnt-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of learned IPv4 routes. The node v4-learnt-num is deprecated. You are advised to use the node learnt-num.";
                                }
    
                                leaf v6-learnt-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of learned IPv6 routes. The node v6-learnt-num is deprecated. You are advised to use the node learnt-num.";
                                }
    
                                leaf v4-critical-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes with priority critical. The node v4-critical-num is deprecated. You are advised to use the node critical-num.";
                                }
    
                                leaf v4-high-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes with priority high. The node v4-high-num is deprecated. You are advised to use the node high-num.";
                                }
    
                                leaf v4-medium-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes with priority medium. The node v4-medium-num is deprecated. You are advised to use the node medium-num.";
                                }
    
                                leaf v4-low-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes with priority low. The node v4-low-num is deprecated. You are advised to use the node low-num.";
                                }
    
                                leaf v6-critical-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv6 routes with priority critical. The node v6-critical-num is deprecated. You are advised to use the node critical-num.";
                                }
    
                                leaf v6-high-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes with priority high. The node v6-high-num is deprecated. You are advised to use the node high-num.";
                                }
    
                                leaf v6-medium-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv6 routes with priority medium. The node v6-medium-num is deprecated. You are advised to use the node medium-num.";
                                }
    
                                leaf v6-low-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv6 routes with priority low. The node v6-low-num is deprecated. You are advised to use the node low-num.";
                                }
    
                                leaf v4-forward-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes. The node v4-forward-num is deprecated. You are advised to use the node forward-num.";
                                }
    
                                leaf v6-forward-num {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv6 routes. The node v6-forward-num is deprecated. You are advised to use the node forward-num.";
                                }
    
                                leaf v4-added2rm {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 routes added to the routing table. The node v4-added2rm is deprecated. You are advised to use the node added2rm.";
                                }
    
                                leaf v4-unadded2rm {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv4 Routes that are not added to the routing table. The node v4-unadded2rm is deprecated. You are advised to use the node unadded2rm.";
                                }
    
                                leaf v6-added2rm {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv6 routes added to the routing table. The node v6-added2rm is deprecated. You are advised to use the node added2rm.";
                                }
    
                                leaf v6-unadded2rm {
                                  type uint32;
                                  status
                                    deprecated;
                                  description
                                    "Number of IPv6 Routes that are not added to the routing table. The node v6-unadded2rm is deprecated. You are advised to use the node unadded2rm.";
                                }
                              }  // list route-statistics
                            }  // container route-statisticss
    
                            container route-counts {
                              config false;
                              description
                                "List of routing statistics.";
                              list route-count {
                                key "level";
                                description
                                  "Statistics of routing statistics.";
                                leaf level {
                                  type level-type;
                                  description
                                    "Level type.";
                                }
    
                                leaf learnt-num {
                                  type uint32;
                                  description
                                    "Number of learned routes.";
                                }
    
                                leaf critical-num {
                                  type uint32;
                                  description
                                    "Number of routes with priority critical.";
                                }
    
                                leaf high-num {
                                  type uint32;
                                  description
                                    "Number of routes with priority high.";
                                }
    
                                leaf medium-num {
                                  type uint32;
                                  description
                                    "Number of routes with priority medium.";
                                }
    
                                leaf low-num {
                                  type uint32;
                                  description
                                    "Number of routes with priority low.";
                                }
    
                                leaf forward-num {
                                  type uint32;
                                  description
                                    "Number of routes.";
                                }
    
                                leaf added2rm {
                                  type uint32;
                                  description
                                    "Number of routes added to the routing table.";
                                }
    
                                leaf unadded2rm {
                                  type uint32;
                                  description
                                    "Number of Routes that are not added to the routing table.";
                                }
                              }  // list route-count
                            }  // container route-counts
    
                            container ipv4-routes {
                              when
                                "../../../type='afipv4'";
                              config false;
                              description
                                "List of routing information.";
                              list ipv4-route {
                                key "level address mask next-hop";
                                description
                                  "Statistics of routing information.";
                                leaf level {
                                  type level-type;
                                  description
                                    "Level type.";
                                }
    
                                leaf address {
                                  type inet:ip-address-no-zone;
                                  description
                                    "IPv4 address prefix.";
                                }
    
                                leaf mask {
                                  type uint32;
                                  description
                                    "IPv4 address mask.";
                                }
    
                                leaf next-hop {
                                  type string {
                                    length
                                      "1..20";
                                  }
                                  description
                                    "Next hop of a route.";
                                }
    
                                leaf internal-cost {
                                  type uint32;
                                  description
                                    "Internal cost value of IPv4 routes.";
                                }
    
                                leaf external-cost {
                                  type string {
                                    length
                                      "1..8";
                                  }
                                  description
                                    "External cost value of IPv4 routes.";
                                }
    
                                leaf interface-name {
                                  type string {
                                    length
                                      "1..64";
                                  }
                                  description
                                    "Outbound interface name of a route.";
                                }
    
                                leaf flags {
                                  type string {
                                    length
                                      "1..12";
                                  }
                                  description
                                    "Route Flags:
    D: Direct
    A: Added to URT
    L: Advertised in LSPs
    S: IGP Shortcut
    U: Up/Down Bit Set.";
                                }
    
                                leaf priority {
                                  type string {
                                    length
                                      "1..31";
                                  }
                                  description
                                    "Route priority: Critical, High, Medium, or Low.";
                                }
    
                                leaf tag {
                                  type string {
                                    length
                                      "1..31";
                                  }
                                  description
                                    "Tag of a route.";
                                }
                              }  // list ipv4-route
                            }  // container ipv4-routes
    
                            container ipv6-routes {
                              when
                                "../../../type='afipv6'";
                              config false;
                              description
                                "List of IPv6 route.";
                              list ipv6-route {
                                key "level address mask next-hop";
                                description
                                  "Statistics of IPv6 route.";
                                leaf level {
                                  type level-type;
                                  description
                                    "Level type.";
                                }
    
                                leaf address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "IPv6 address prefix of a route.";
                                }
    
                                leaf mask {
                                  type uint32;
                                  description
                                    "IPv6 address mask of a route.";
                                }
    
                                leaf next-hop {
                                  type string {
                                    length
                                      "1..60";
                                  }
                                  description
                                    "Next hop of a route.";
                                }
    
                                leaf interface-name {
                                  type string {
                                    length
                                      "1..64";
                                  }
                                  description
                                    "Outbound interface name of a route.";
                                }
    
                                leaf cost {
                                  type uint32;
                                  description
                                    "Cost value of IPv6 routes.";
                                }
    
                                leaf flags {
                                  type string {
                                    length
                                      "1..12";
                                  }
                                  description
                                    "Route type.";
                                }
    
                                leaf priority {
                                  type string {
                                    length
                                      "1..31";
                                  }
                                  description
                                    "Route priority: Critical, High, Medium, or Low.";
                                }
    
                                leaf tag {
                                  type string {
                                    length
                                      "1..31";
                                  }
                                  description
                                    "Tag of a route.";
                                }
                              }  // list ipv6-route
                            }  // container ipv6-routes
    
                            container ipv4-import-routes {
                              when
                                "../../../type='afipv4'";
                              config false;
                              description
                                "List of the imported IPv4 route.";
                              list ipv4-import-route {
                                key "level protocol address mask";
                                description
                                  "Statistics of the imported IPv4 route.";
                                leaf level {
                                  type level-type;
                                  description
                                    "Level type.";
                                }
    
                                leaf protocol {
                                  type string {
                                    ext:value-meaning {
                                      ext:item "D" {
                                        ext:meaning "Direct";
                                      }
                                      ext:item "I" {
                                        ext:meaning "ISIS";
                                      }
                                      ext:item "O" {
                                        ext:meaning "OSPF";
                                      }
                                      ext:item "B" {
                                        ext:meaning "BGP";
                                      }
                                      ext:item "R" {
                                        ext:meaning "RIP";
                                      }
                                      ext:item "U" {
                                        ext:meaning "UNR";
                                      }
                                    }
                                    length
                                      "1..4";
                                  }
                                  description
                                    "Protocol type of the imported routes.";
                                }
    
                                leaf address {
                                  type inet:ip-address-no-zone;
                                  description
                                    "IPv4 address prefix of the imported routes.";
                                }
    
                                leaf mask {
                                  type uint32;
                                  description
                                    "IPv4 mask of the imported routes.";
                                }
    
                                leaf internal-cost {
                                  type uint32;
                                  description
                                    "IPv4 internal cost value of the imported routes.";
                                }
    
                                leaf external-cost {
                                  type string {
                                    length
                                      "1..12";
                                  }
                                  description
                                    "IPv4 external cost value of the imported routes.";
                                }
    
                                leaf tag {
                                  type string {
                                    length
                                      "1..12";
                                  }
                                  description
                                    "Tag value of the imported routes.";
                                }
    
                                leaf avoid-loop-state {
                                  type string {
                                    length
                                      "1..4";
                                  }
                                  description
                                    "Avoid loop state of the imported routes.";
                                }
                              }  // list ipv4-import-route
                            }  // container ipv4-import-routes
    
                            container ipv6-import-routes {
                              when
                                "../../../type='afipv6'";
                              config false;
                              description
                                "List of the imported IPv6 route.";
                              list ipv6-import-route {
                                key "level protocol address mask-length";
                                description
                                  "Statistics of the imported IPv6 route.";
                                leaf level {
                                  type level-type;
                                  description
                                    "Level type.";
                                }
    
                                leaf protocol {
                                  type string {
                                    ext:value-meaning {
                                      ext:item "D" {
                                        ext:meaning "Direct";
                                      }
                                      ext:item "I" {
                                        ext:meaning "ISIS";
                                      }
                                      ext:item "O" {
                                        ext:meaning "OSPFv3";
                                      }
                                      ext:item "B" {
                                        ext:meaning "BGP";
                                      }
                                      ext:item "R" {
                                        ext:meaning "RIPng";
                                      }
                                      ext:item "U" {
                                        ext:meaning "UNR";
                                      }
                                    }
                                    length
                                      "1..4";
                                  }
                                  description
                                    "Protocol type of the imported routes.";
                                }
    
                                leaf address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "IPv6 address prefix of the imported routes.";
                                }
    
                                leaf mask-length {
                                  type uint32;
                                  description
                                    "IPv6 mask of the imported routes.";
                                }
    
                                leaf internal-cost {
                                  type uint32;
                                  description
                                    "IPv6 internal cost value of the imported routes.";
                                }
    
                                leaf tag {
                                  type string {
                                    length
                                      "1..12";
                                  }
                                  description
                                    "Tag value of the imported routes.";
                                }
    
                                leaf avoid-loop-state {
                                  type string {
                                    length
                                      "1..4";
                                  }
                                  description
                                    "Avoid loop state of the imported routes.";
                                }
                              }  // list ipv6-import-route
                            }  // container ipv6-import-routes
                          }  // list topology
                        }  // container topologys
    
                        container delay-normalize {
                          description
                            "Configure metric-delay normalization.";
                          leaf interval {
                            type uint32 {
                              range
                                "1..16777215";
                            }
                            must
                              "(../offset<../interval) and (../../../../cost-style='wide' or ../../../../cost-style='transition' or ../../../../cost-style='wtransition')";
                            description
                              "Normalization interval value.";
                          }
    
                          leaf offset {
                            when "../interval";
                            type uint32 {
                              range
                                "0..16777214";
                            }
                            must
                              "(../offset<../interval) and (../../../../cost-style='wide' or ../../../../cost-style='transition' or ../../../../cost-style='wtransition')";
                            default "0";
                            description
                              "Normalization offset value.";
                          }
                        }  // container delay-normalize
    
                        container route-statisticss {
                          config false;
                          status deprecated;
                          description
                            "List of route statistics. The node route-statisticss is deprecated. You are advised to use the node route-counts.";
                          list route-statistics {
                            key "level";
                            status deprecated;
                            description
                              "Statistics of route statistics. The node route-statistics is deprecated. You are advised to use the node route-count.";
                            leaf level {
                              type level-type;
                              status
                                deprecated;
                              description
                                "Level type. The node level is deprecated. You are advised to use the node level.";
                            }
    
                            leaf v4-learnt-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of learned IPv4 routes. The node v4-learnt-num is deprecated. You are advised to use the node learnt-num.";
                            }
    
                            leaf v6-learnt-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of learned IPv6 routes. The node v6-learnt-num is deprecated. You are advised to use the node learnt-num.";
                            }
    
                            leaf v4-critical-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes with priority critical. The node v4-critical-num is deprecated. You are advised to use the node critical-num.";
                            }
    
                            leaf v4-high-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes with priority high. The node v4-high-num is deprecated. You are advised to use the node high-num.";
                            }
    
                            leaf v4-medium-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes with priority medium. The node v4-medium-num is deprecated. You are advised to use the node medium-num.";
                            }
    
                            leaf v4-low-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes with priority low. The node v4-low-num is deprecated. You are advised to use the node low-num.";
                            }
    
                            leaf v6-critical-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv6 routes with priority critical. The node v6-critical-num is deprecated. You are advised to use the node critical-num.";
                            }
    
                            leaf v6-high-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes with priority high. The node v6-high-num is deprecated. You are advised to use the node high-num.";
                            }
    
                            leaf v6-medium-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv6 routes with priority medium. The node v6-medium-num is deprecated. You are advised to use the node medium-num.";
                            }
    
                            leaf v6-low-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv6 routes with priority low. The node v6-low-num is deprecated. You are advised to use the node low-num.";
                            }
    
                            leaf v4-forward-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes. The node v4-forward-num is deprecated. You are advised to use the node forward-num.";
                            }
    
                            leaf v6-forward-num {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv6 routes. The node v6-forward-num is deprecated. You are advised to use the node forward-num.";
                            }
    
                            leaf v4-added2rm {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 routes added to the routing table. The node v4-added2rm is deprecated. You are advised to use the node added2rm.";
                            }
    
                            leaf v4-unadded2rm {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv4 Routes that are not added to the routing table. The node v4-unadded2rm is deprecated. You are advised to use the node unadded2rm.";
                            }
    
                            leaf v6-added2rm {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv6 routes added to the routing table. The node v6-added2rm is deprecated. You are advised to use the node added2rm.";
                            }
    
                            leaf v6-unadded2rm {
                              type uint32;
                              status
                                deprecated;
                              description
                                "Number of IPv6 Routes that are not added to the routing table. The node v6-unadded2rm is deprecated. You are advised to use the node unadded2rm.";
                            }
                          }  // list route-statistics
                        }  // container route-statisticss
    
                        container route-counts {
                          config false;
                          description
                            "List of routing statistics.";
                          list route-count {
                            key "level";
                            description
                              "Statistics of routing statistics.";
                            leaf level {
                              type level-type;
                              description
                                "Level type.";
                            }
    
                            leaf learnt-num {
                              type uint32;
                              description
                                "Number of learned routes.";
                            }
    
                            leaf critical-num {
                              type uint32;
                              description
                                "Number of routes with priority critical.";
                            }
    
                            leaf high-num {
                              type uint32;
                              description
                                "Number of routes with priority high.";
                            }
    
                            leaf medium-num {
                              type uint32;
                              description
                                "Number of routes with priority medium.";
                            }
    
                            leaf low-num {
                              type uint32;
                              description
                                "Number of routes with priority low.";
                            }
    
                            leaf forward-num {
                              type uint32;
                              description
                                "Number of routes.";
                            }
    
                            leaf added2rm {
                              type uint32;
                              description
                                "Number of routes added to the routing table.";
                            }
    
                            leaf unadded2rm {
                              type uint32;
                              description
                                "Number of Routes that are not added to the routing table.";
                            }
                          }  // list route-count
                        }  // container route-counts
    
                        container ipv4-routes {
                          when
                            "../type='afipv4'";
                          config false;
                          description
                            "List of routing information.";
                          list ipv4-route {
                            key "level address mask next-hop";
                            description
                              "Statistics of routing information.";
                            leaf level {
                              type level-type;
                              description
                                "Level type.";
                            }
    
                            leaf address {
                              type inet:ip-address-no-zone;
                              description
                                "IPv4 address prefix.";
                            }
    
                            leaf mask {
                              type uint32;
                              description
                                "IPv4 address mask.";
                            }
    
                            leaf next-hop {
                              type string {
                                length "1..20";
                              }
                              description
                                "Next hop of a route.";
                            }
    
                            leaf internal-cost {
                              type uint32;
                              description
                                "Internal cost value of IPv4 routes.";
                            }
    
                            leaf external-cost {
                              type string {
                                length "1..8";
                              }
                              description
                                "External cost value of IPv4 routes.";
                            }
    
                            leaf interface-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Outbound interface name of a route.";
                            }
    
                            leaf flags {
                              type string {
                                length "1..12";
                              }
                              description
                                "Route Flags:
    D: Direct
    A: Added to URT
    L: Advertised in LSPs
    S: IGP Shortcut
    U: Up/Down Bit Set.";
                            }
    
                            leaf priority {
                              type string {
                                length "1..31";
                              }
                              description
                                "Route priority: Critical, High, Medium, or Low.";
                            }
    
                            leaf tag {
                              type string {
                                length "1..31";
                              }
                              description
                                "Tag of a route.";
                            }
                          }  // list ipv4-route
                        }  // container ipv4-routes
    
                        container ipv6-routes {
                          when
                            "../type='afipv6'";
                          config false;
                          description
                            "List of IPv6 route.";
                          list ipv6-route {
                            key "level address mask next-hop";
                            description
                              "Statistics of IPv6 route.";
                            leaf level {
                              type level-type;
                              description
                                "Level type.";
                            }
    
                            leaf address {
                              type inet:ipv6-address-no-zone;
                              description
                                "IPv6 address prefix of a route.";
                            }
    
                            leaf mask {
                              type uint32;
                              description
                                "IPv6 address mask of a route.";
                            }
    
                            leaf next-hop {
                              type string {
                                length "1..60";
                              }
                              description
                                "Next hop of a route.";
                            }
    
                            leaf interface-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Outbound interface name of a route.";
                            }
    
                            leaf cost {
                              type uint32;
                              description
                                "Cost value of IPv6 routes.";
                            }
    
                            leaf flags {
                              type string {
                                length "1..12";
                              }
                              description
                                "Route type.";
                            }
    
                            leaf priority {
                              type string {
                                length "1..31";
                              }
                              description
                                "Route priority: Critical, High, Medium, or Low.";
                            }
    
                            leaf tag {
                              type string {
                                length "1..31";
                              }
                              description
                                "Tag of a route.";
                            }
    
                            leaf flex-algo-id {
                              ext:support-filter "true";
                              type uint8 {
                                range
                                  "0|128..255";
                              }
                              description
                                "Flexible Algorithm identifier.";
                            }
                          }  // list ipv6-route
                        }  // container ipv6-routes
    
                        container ipv4-import-routes {
                          when
                            "../type='afipv4'";
                          config false;
                          description
                            "List of information about the imported IPv4 route.";
                          list ipv4-import-route {
                            key "level protocol address mask";
                            description
                              "Statistics of information about the imported IPv4 route.";
                            leaf level {
                              type level-type;
                              description
                                "Level type.";
                            }
    
                            leaf protocol {
                              type string {
                                ext:value-meaning {
                                  ext:item "D" {
                                    ext:meaning "Direct";
                                  }
                                  ext:item "I" {
                                    ext:meaning "ISIS";
                                  }
                                  ext:item "O" {
                                    ext:meaning "OSPF";
                                  }
                                  ext:item "B" {
                                    ext:meaning "BGP";
                                  }
                                  ext:item "R" {
                                    ext:meaning "RIP";
                                  }
                                  ext:item "U" {
                                    ext:meaning "UNR";
                                  }
                                }
                                length "1..4";
                              }
                              description
                                "Protocol type of the imported routes.";
                            }
    
                            leaf address {
                              type inet:ip-address-no-zone;
                              description
                                "IPv4 address prefix of the imported routes.";
                            }
    
                            leaf mask {
                              type uint32;
                              description
                                "IPv4 mask of the imported routes.";
                            }
    
                            leaf internal-cost {
                              type uint32;
                              description
                                "IPv4 internal cost value of the imported routes.";
                            }
    
                            leaf external-cost {
                              type string {
                                length "1..12";
                              }
                              description
                                "IPv4 external cost value of the imported routes.";
                            }
    
                            leaf tag {
                              type string {
                                length "1..12";
                              }
                              description
                                "Tag value of the imported routes.";
                            }
    
                            leaf avoid-loop-state {
                              type string {
                                length "1..4";
                              }
                              description
                                "Avoid loop state of the imported routes.";
                            }
                          }  // list ipv4-import-route
                        }  // container ipv4-import-routes
    
                        container ipv6-import-routes {
                          when
                            "../type='afipv6'";
                          config false;
                          description
                            "List of the imported IPv6 route.";
                          list ipv6-import-route {
                            key "level protocol address mask-length";
                            description
                              "Statistics of the imported IPv6 route.";
                            leaf level {
                              type level-type;
                              description
                                "Level type.";
                            }
    
                            leaf protocol {
                              type string {
                                ext:value-meaning {
                                  ext:item "D" {
                                    ext:meaning "Direct";
                                  }
                                  ext:item "I" {
                                    ext:meaning "ISIS";
                                  }
                                  ext:item "O" {
                                    ext:meaning "OSPFv3";
                                  }
                                  ext:item "B" {
                                    ext:meaning "BGP";
                                  }
                                  ext:item "R" {
                                    ext:meaning "RIPng";
                                  }
                                  ext:item "U" {
                                    ext:meaning "UNR";
                                  }
                                }
                                length "1..4";
                              }
                              description
                                "Protocol type of the imported routes.";
                            }
    
                            leaf address {
                              type inet:ipv6-address-no-zone;
                              description
                                "IPv6 address prefix of the imported routes.";
                            }
    
                            leaf mask-length {
                              type uint32;
                              description
                                "IPv6 mask of the imported routes.";
                            }
    
                            leaf internal-cost {
                              type uint32;
                              description
                                "IPv6 internal cost value of the imported routes.";
                            }
    
                            leaf tag {
                              type string {
                                length "1..12";
                              }
                              description
                                "Tag value of the imported routes.";
                            }
    
                            leaf avoid-loop-state {
                              type string {
                                length "1..4";
                              }
                              description
                                "Avoid loop state of the imported routes.";
                            }
                          }  // list ipv6-import-route
                        }  // container ipv6-import-routes
    
                        container migp-routes {
                          when
                            "../type='afipv4'";
                          config false;
                          description
                            "List of migp routing information.";
                          list migp-route {
                            key "level address mask-length next-hop";
                            description
                              "Statistics of migp routing information.";
                            leaf level {
                              type level-type;
                              description
                                "Level type.";
                            }
    
                            leaf address {
                              type inet:ip-address-no-zone;
                              description
                                "IPv4 migp address prefix.";
                            }
    
                            leaf mask-length {
                              type uint32;
                              description
                                "IPv4 address mask length.";
                            }
    
                            leaf next-hop {
                              type string {
                                length "1..20";
                              }
                              description
                                "Next hop of a migp route.";
                            }
    
                            leaf internal-cost {
                              type uint32;
                              description
                                "Internal cost value of migp routes.";
                            }
    
                            leaf external-cost {
                              type string {
                                length "1..8";
                              }
                              description
                                "External cost value of migp routes.";
                            }
    
                            leaf interface-name {
                              type string {
                                length "1..64";
                              }
                              description
                                "Outbound interface name of a migp route.";
                            }
    
                            leaf flags {
                              type string {
                                length "1..12";
                              }
                              description
                                "Route Flags:
    A: Added to MIGP
    U: Up/Down Bit Set.";
                            }
                          }  // list migp-route
                        }  // container migp-routes
                      }  // list af
                    }  // container afs
    
                    container avoid-micro-loop {
                      description
                        "Configure ISIS avoid microloop.";
                      leaf frr-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable FRR avoid microloop.";
                      }
    
                      leaf frr-rib-update-delay {
                        type uint32 {
                          range "100..5000";
                        }
                        units "ms";
                        default "100";
                        description
                          "Set the route delivery delay for FRR avoid microloop.";
                      }
    
                      leaf sr-enable {
                        type boolean;
                        default "false";
                        status deprecated;
                        description
                          "Enable/disable SR avoid microloop. Depend on segment routing MPLS.The node sr-enable is deprecated. You are advised to use the node sr-enable-flag.";
                      }
    
                      leaf sr-rib-update-delay {
                        type uint16 {
                          range "1000..60000";
                        }
                        units "ms";
                        default "5000";
                        status deprecated;
                        description
                          "Set the route delivery delay for SR avoid microloop. Depend on segment routing MPLS.The node sr-rib-update-delay is deprecated. You are advised to use the node sr-new-update-delay.";
                      }
    
                      leaf te-tunnel-enable {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable TE tunnel convergence delay.";
                      }
    
                      leaf te-tunnel-delay {
                        type uint16 {
                          range "100..30000";
                        }
                        units "ms";
                        default "1000";
                        description
                          "Set the route which out interface is TE tunnel convergence delay time.";
                      }
                    }  // container avoid-micro-loop
    
                    container link-groups {
                      description
                        "List of link group.";
                      list link-group {
                        key "name";
                        description
                          "Configure link group.";
                        leaf name {
                          type string {
                            length "1..32";
                            pattern '.*\S.*';
                          }
                          description
                            "Group Name.";
                        }
    
                        leaf min-members {
                          type uint8 {
                            range "2..64";
                          }
                          must
                            "(../min-members<=../revert-members)";
                          default "2";
                          description
                            "Min members of link group.";
                        }
    
                        leaf revert-members {
                          type uint8 {
                            range "2..64";
                          }
                          must
                            "(../min-members<=../revert-members)";
                          default "2";
                          description
                            "Members of revert cost.";
                        }
    
                        leaf cost-offset {
                          type uint32 {
                            range "1..16777215";
                          }
                          default "1";
                          description
                            "OffSet of cost.";
                        }
                      }  // list link-group
                    }  // container link-groups
    
                    container fad-bindings {
                      description
                        "List of the capability of advertising flexible algorithms in an IS-IS process.";
                      list fad-binding {
                        must
                          "../../../../../ni:name='_public_' and (../../isis:cost-style='wide' or ../../isis:cost-style='transition' or ../../isis:cost-style='wtransition')";
                        key "flex-algo-id";
                        description
                          "Configure flexible algorithm used affinities attributes.";
                        leaf flex-algo-id {
                          type uint8 {
                            range "128..255";
                          }
                          description
                            "Flexible algorithm identifier.";
                        }
    
                        leaf level {
                          type isis:level-type;
                          default "level-1-2";
                          description
                            "Set the level of a router.";
                        }
                      }  // list fad-binding
                    }  // container fad-bindings
    
                    container circ-datas {
                      config false;
                      description
                        "List of circuit information.";
                      list circ-data {
                        key "if-name";
                        description
                          "Statistics of circuit information.";
                        leaf if-name {
                          type string {
                            length "1..64";
                          }
                          description
                            "Name of the circuit.";
                        }
    
                        leaf v4-cost-level-1 {
                          type uint32 {
                            range "0..16777215";
                          }
                          description
                            "Level1 cost of IPv4.";
                        }
    
                        leaf v4-cost-level-2 {
                          type uint32 {
                            range "0..16777215";
                          }
                          description
                            "Level2 cost of IPv4.";
                        }
    
                        leaf v6-cost-level-1 {
                          type uint32 {
                            range "0..16777215";
                          }
                          description
                            "Level1 cost of IPv6.";
                        }
    
                        leaf v6-cost-level-2 {
                          type uint32 {
                            range "0..16777215";
                          }
                          description
                            "Level2 cost of IPv6.";
                        }
    
                        container min-max-unidirectional-link-delays {
                          description
                            "List of min and max unidirectional link delay information.";
                          list min-max-unidirectional-link-delay {
                            key "af-type";
                            description
                              "Statistics of min and max unidirectional link delay information of IPv4 and IPv6.";
                            leaf af-type {
                              type af-type;
                              description
                                "Address family type of the multi topology.";
                            }
    
                            leaf level-1-status {
                              type boolean;
                              description
                                "Level1 delay information advertisement status.";
                            }
    
                            leaf use-min-delay-level-1 {
                              type uint32;
                              units "us";
                              description
                                "Level1 minimum delay data used on the current network.";
                            }
    
                            leaf use-max-delay-level-1 {
                              type uint32;
                              units "us";
                              description
                                "Level1 maximum delay data used on the current network.";
                            }
    
                            leaf suppress-min-delay-level-1 {
                              type uint32;
                              units "us";
                              description
                                "Level1 minimum delay data under suppression.";
                            }
    
                            leaf suppress-max-delay-level-1 {
                              type uint32;
                              units "us";
                              description
                                "Level1 maximum delay data under suppression.";
                            }
    
                            leaf remain-time-level-1 {
                              type uint32;
                              units "s";
                              description
                                "Remaining time of Level1 delay information advertisement suppression.";
                            }
    
                            leaf level-2-status {
                              type boolean;
                              description
                                "Level2 delay information advertisement status.";
                            }
    
                            leaf use-min-delay-level-2 {
                              type uint32;
                              units "us";
                              description
                                "Level2 minimum delay data used on the current network.";
                            }
    
                            leaf use-max-delay-level-2 {
                              type uint32;
                              units "us";
                              description
                                "Level2 maximum delay data used on the current network.";
                            }
    
                            leaf suppress-min-delay-level-2 {
                              type uint32;
                              units "us";
                              description
                                "Level2 minimum delay data under suppression.";
                            }
    
                            leaf suppress-max-delay-level-2 {
                              type uint32;
                              units "us";
                              description
                                "Level2 maximum delay data under suppression.";
                            }
    
                            leaf remain-time-level-2 {
                              type uint32;
                              units "s";
                              description
                                "Remaining time of Level2 delay information advertisement suppression.";
                            }
    
                            leaf receive-min-delay {
                              type uint32;
                              units "us";
                              description
                                "Minimum delay data received.";
                            }
    
                            leaf receive-max-delay {
                              type uint32;
                              units "us";
                              description
                                "Maximum delay data received.";
                            }
    
                            leaf suppress-timer {
                              type uint32;
                              units "s";
                              description
                                "The delay suppress timer.";
                            }
                          }  // list min-max-unidirectional-link-delay
                        }  // container min-max-unidirectional-link-delays
    
                        container unidirectional-link-losses {
                          description
                            "List of unidirectional link loss information.";
                          list unidirectional-link-loss {
                            key "af-type";
                            description
                              "Statistics of unidirectional link loss information of IPv4 and IPv6.";
                            leaf af-type {
                              type af-type;
                              description
                                "Address family type of the multi topology.";
                            }
    
                            leaf level-1-status {
                              type boolean;
                              description
                                "Level1 link loss information advertisement status.";
                            }
    
                            leaf level-2-status {
                              type boolean;
                              description
                                "Level2 link loss information advertisement status.";
                            }
    
                            leaf suppress-timer {
                              type uint32 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "The link loss suppress timer.";
                            }
    
                            leaf remain-time {
                              type uint32 {
                                range "0..600";
                              }
                              units "s";
                              description
                                "Remaining time of Level1 link loss information advertisement suppression.";
                            }
    
                            leaf use-link-loss {
                              type uint32;
                              description
                                "Level1 link loss data used on the current network.";
                            }
    
                            leaf suppress-link-loss {
                              type uint32;
                              description
                                "Level1 link loss data under suppression.";
                            }
    
                            leaf receive-link-loss {
                              type uint32;
                              description
                                "Link loss data received.";
                            }
                          }  // list unidirectional-link-loss
                        }  // container unidirectional-link-losses
                      }  // list circ-data
                    }  // container circ-datas
    
                    container bfd-sessions {
                      config false;
                      description
                        "List of BFD session information.";
                      list bfd-session {
                        key "peer-level peer-ip local-ip";
                        description
                          "Statistics of BFD session information.";
                        leaf peer-level {
                          type level-type;
                          description
                            "Level type of the neighbor.";
                        }
    
                        leaf peer-ip {
                          type inet:ip-address-no-zone;
                          description
                            "IP address of the neighbor interface.";
                        }
    
                        leaf local-ip {
                          type inet:ip-address-no-zone;
                          description
                            "IP address of the local interface.";
                        }
    
                        leaf state {
                          type bfd-state-type;
                          description
                            "BFD status of a session.";
                        }
    
                        leaf min-tx {
                          type uint32;
                          units "ms";
                          description
                            "Minimum interval at which BFD packets are sent after negotiation.";
                        }
    
                        leaf min-rx {
                          type uint32;
                          units "ms";
                          description
                            "Minimum interval at which BFD packets are received after negotiation.";
                        }
    
                        leaf mul-number {
                          type uint32;
                          description
                            "Remote BFD detection multiplier.";
                        }
    
                        leaf system-id {
                          type string {
                            length "1..16";
                          }
                          description
                            "System ID of the neighbor.";
                        }
    
                        leaf circuit-name {
                          type string {
                            length "1..64";
                          }
                          description
                            "Interface name.";
                        }
                      }  // list bfd-session
                    }  // container bfd-sessions
    
                    container peers {
                      config false;
                      description
                        "List of neighbor information.";
                      list peer {
                        key "system-id level circuit-id interface-name";
                        description
                          "Statistics of neighbor information.";
                        leaf system-id {
                          type string {
                            length "1..256";
                          }
                          description
                            "Neighbor system ID.";
                        }
    
                        leaf level {
                          type level-type;
                          description
                            "Level type of a neighbor.";
                        }
    
                        leaf circuit-id {
                          type string {
                            length "1..260";
                          }
                          description
                            "Interface ID of a neighbor.";
                        }
    
                        leaf interface-name {
                          type string {
                            length "1..64";
                          }
                          description
                            "Interface name of a neighbor.";
                        }
    
                        leaf host-name {
                          ext:support-filter "true";
                          type string {
                            length "1..256";
                          }
                          description
                            "System name of a neighbor.";
                        }
    
                        leaf status {
                          type adj-status;
                          description
                            "Status of a neighbor.";
                        }
    
                        leaf hold-time {
                          type uint32;
                          units "s";
                          description
                            "Holdtime of a neighbor.";
                        }
    
                        leaf priority {
                          type string {
                            length "1..4";
                          }
                          description
                            "Priority of a neighbor.";
                        }
    
                        leaf area-addr {
                          type string {
                            length "1..120";
                          }
                          description
                            "Area address of a neighbor.";
                        }
    
                        leaf up-time {
                          type string {
                            length "1..30";
                          }
                          units "s";
                          description
                            "Up time of a neighbor.";
                        }
    
                        leaf up-time-stamp {
                          type yang:date-and-time;
                          units "s";
                          description
                            "Up time stamp of a neighbor.";
                        }
    
                        leaf adj-mt-id {
                          type string {
                            length "1..512";
                          }
                          description
                            "Neighbor MT ID.";
                        }
    
                        leaf local-mt-id {
                          type string {
                            length "1..200";
                          }
                          description
                            "Local MT ID.";
                        }
    
                        leaf protocol {
                          type peer-protocol;
                          description
                            "Neighbor's supported IP protocols.";
                        }
    
                        leaf restart-capable {
                          type string {
                            length "1..5";
                          }
                          description
                            "Restart setting.";
                        }
    
                        leaf suppressed-adj {
                          type string {
                            length "1..5";
                          }
                          description
                            "Suppress advertise adjacency setting.";
                        }
    
                        leaf adj-sid {
                          type string {
                            length "1..512";
                          }
                          description
                            "Neighbor SID.";
                        }
    
                        leaf ipv6-adj-sid {
                          type string {
                            length "1..512";
                          }
                          description
                            "IPv6 neighbor SID.";
                        }
    
                        leaf ipv6-link-local-addr {
                          type string {
                            length "1..60";
                          }
                          description
                            "Neighbor IPv6 link local address.";
                        }
    
                        container ipv4-addrs {
                          config false;
                          description
                            "List of neighbor IPv4 address.";
                          list ipv4-addr {
                            key "addr";
                            description
                              "Statistics of neighbor IPv4 address.";
                            leaf addr {
                              type inet:ipv4-address-no-zone;
                              description
                                "IPv4 address of a neighbor.";
                            }
                          }  // list ipv4-addr
                        }  // container ipv4-addrs
    
                        container ipv6-global-addrs {
                          config false;
                          description
                            "List of neighbor IPv6 global address.";
                          list ipv6-global-addr {
                            key "addr";
                            description
                              "Statistics of neighbor IPv6 global address.";
                            leaf addr {
                              type inet:ipv6-address-no-zone;
                              description
                                "IPv6 global address of a neighbor.";
                            }
                          }  // list ipv6-global-addr
                        }  // container ipv6-global-addrs
    
                        container endxs {
                          config false;
                          description
                            "List of neighbor End.X Sid information.";
                          list endx {
                            key "sid mask-length type";
                            description
                              "Statistics of neighbor End.X Sid information.";
                            leaf sid {
                              type inet:ipv6-address-no-zone;
                              description
                                "End.X Sid of a neighbor.";
                            }
    
                            leaf mask-length {
                              type uint16 {
                                range "1..128";
                              }
                              description
                                "End.X Sid mask length of a neighbor.";
                            }
    
                            leaf type {
                              type endx-sid-type;
                              description
                                "End.X Sid type of a neighbor.";
                            }
                          }  // list endx
                        }  // container endxs
                      }  // list peer
                    }  // container peers
    
                    container lsdbs {
                      config false;
                      description
                        "List of LSDB information.";
                      list lsdb {
                        key "lsp-level lsp-id";
                        description
                          "Statistics of LSDB information.";
                        leaf lsp-level {
                          type level-type;
                          description
                            "Level type.";
                        }
    
                        leaf lsp-id {
                          type string {
                            length "1..512";
                          }
                          description
                            "ID of an LSP.";
                        }
    
                        leaf seqence-number {
                          type string {
                            length "1..16";
                          }
                          description
                            "Serial number of an LSP.";
                        }
    
                        leaf check-sum {
                          type string {
                            length "1..16";
                          }
                          description
                            "Checksum of an LSP.";
                        }
    
                        leaf lsp-length {
                          type uint32 {
                            range "0..2000";
                          }
                          description
                            "Length of an LSP.";
                        }
    
                        leaf att {
                          type enable-flag;
                          description
                            "ATT flag of an LSP.";
                        }
    
                        leaf partition {
                          type enable-flag;
                          description
                            "Split flag of an LSP.";
                        }
    
                        leaf overload {
                          type enable-flag;
                          description
                            "Overload flag of an LSP.";
                        }
    
                        leaf hold-time {
                          type string {
                            length "1..16";
                          }
                          units "s";
                          description
                            "Holdtime of an LSP.";
                        }
    
                        leaf local-lsp {
                          type boolean;
                          description
                            "Local LSP flag.";
                        }
                      }  // list lsdb
                    }  // container lsdbs
    
                    container flex-algo-states {
                      config false;
                      description
                        "List of running flexible algorithms definition.";
                      list flex-algo-state {
                        key "flex-algo-id";
                        description
                          "Statistics of running flexible algorithms definition information for ISIS.";
                        leaf flex-algo-id {
                          type uint8 {
                            range "128..255";
                          }
                          description
                            "Flexible algorithm identifier.";
                        }
    
                        leaf level {
                          type level-type;
                          description
                            "Level type.";
                        }
    
                        leaf system-id {
                          type string {
                            length "1..16";
                          }
                          description
                            "System ID of the flexible algorithm definition node.";
                        }
    
                        leaf priority {
                          type uint8 {
                            range "0..255";
                          }
                          default "128";
                          description
                            "Indicates the priority for this algorithm.";
                        }
    
                        leaf metric-type {
                          type flex-algo-metric-type;
                          default "igp";
                          description
                            "Indicates which is the corresponding metric type for this algorithm.";
                        }
    
                        leaf definition-flags {
                          type string {
                            length "1..16";
                          }
                          description
                            "Definition flags of the flexible algorithm.";
                        }
    
                        leaf exclude-admin-group {
                          type string {
                            length "1..128";
                          }
                          description
                            "Configuration of affinity names that can be refer to a flexible algorithm to exclude.";
                        }
    
                        leaf include-any-admin-group {
                          type string {
                            length "1..128";
                          }
                          description
                            "Configuration of affinity names that can be refer to a flexible algorithm to include any.";
                        }
    
                        leaf include-all-admin-group {
                          type string {
                            length "1..128";
                          }
                          description
                            "Configuration of affinity names that can be refer to a flexible algorithm to include all.";
                        }
    
                        leaf support {
                          type string {
                            length "1..128";
                          }
                          description
                            "Indicates whether current flexible algorithms is supported.";
                        }
                      }  // list flex-algo-state
                    }  // container flex-algo-states
    
                    container lsp-statisticss {
                      config false;
                      description
                        "List of LSP statistics.";
                      list lsp-statistics {
                        key "level";
                        description
                          "Information of LSP statistics.";
                        leaf level {
                          type level-type;
                          description
                            "Level type.";
                        }
    
                        leaf total-num {
                          type uint32;
                          description
                            "Total LSP number.";
                        }
    
                        leaf zero-frag-num {
                          type uint32;
                          description
                            "Number of non-pseudo node LSPs with the fragment number zero.";
                        }
    
                        leaf zero-holdtime-num {
                          type uint32;
                          description
                            "Number of LSPs with the lifetime zero.";
                        }
    
                        leaf zero-frag-holdtime-num {
                          type uint32;
                          description
                            "Number of non-pseudo node LSPs with the fragment number zero and lifetime zero.";
                        }
    
                        leaf zero-sequence-num {
                          type uint32;
                          description
                            "Number of LSPs with the sequence number zero.";
                        }
    
                        container sources {
                          config false;
                          description
                            "List of LSP sources statistics information.";
                          list source {
                            key "src-id";
                            description
                              "Statistics of LSP sources statistics information.";
                            leaf src-id {
                              type string {
                                length "1..70";
                              }
                              description
                                "Source ID of a LSP.";
                            }
    
                            leaf used-frag-num {
                              type uint32;
                              description
                                "Used LSP fragments number from this source ID.";
                            }
                          }  // list source
                        }  // container sources
                      }  // list lsp-statistics
                    }  // container lsp-statisticss
    
                    container name-mappings {
                      config false;
                      description
                        "List of host name.";
                      list name-mapping {
                        key "level system-id";
                        description
                          "Statistics of host name.";
                        leaf level {
                          type level-type;
                          description
                            "Level type.";
                        }
    
                        leaf system-id {
                          type string {
                            length "1..32";
                          }
                          description
                            "System ID.";
                        }
    
                        leaf host-type {
                          type host-name-type;
                          description
                            "Static or dynamic.";
                        }
    
                        leaf host-name {
                          type string {
                            length "1..256";
                          }
                          description
                            "Host name.";
                        }
                      }  // list name-mapping
                    }  // container name-mappings
    
                    container virtual-accesss {
                      config false;
                      description
                        "List of virtual access information.";
                      list virtual-access {
                        key "level lsp-id";
                        description
                          "Statistics of virtual access.";
                        leaf level {
                          type level-type;
                          description
                            "LSP level type.";
                        }
    
                        leaf lsp-id {
                          type string {
                            length "1..512";
                          }
                          description "LSP ID.";
                        }
    
                        leaf router-id {
                          type inet:ip-address-no-zone;
                          description
                            "Router ID.";
                        }
    
                        leaf ap-id {
                          type inet:ip-address-no-zone;
                          description
                            "AP management IP address.";
                        }
    
                        leaf role {
                          type string {
                            length "1..16";
                          }
                          description
                            "Node role: master or ap.";
                        }
                      }  // list virtual-access
                    }  // container virtual-accesss
                  }  // list site
                }  // container sites
              }  // container isis
    
              container vrrp {
                status deprecated;
                description
                  "Configure VRRP backup groups under network-instance.";
                container groups {
                  status deprecated;
                  description
                    "List of all VRRP backup groups.";
                  list group {
                    key "id if-name";
                    status deprecated;
                    description
                      "Configure VRRP operations on a device. It lists a series of VRRP operation entries. You can use this table to query the VRRP configuration on the device. In addition, you can create VRRP groups and modify the configuration.";
                    leaf id {
                      type uint8 {
                        range "1..255";
                      }
                      status deprecated;
                      description
                        "VRRP backup group ID.";
                    }
    
                    leaf if-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                      status deprecated;
                      description
                        "Name of the outbound interface of a BFD session. This parameter is available only when the type of the detected link is IP or LDP LSP. If only the destination IP address is specified, multi-hop routes are detected. If both the destination IP address and outbound interface name are specified, single-hop links are detected. That is, a fixed route is detected, with the interface where the BFD session resides as the outbound interface and the destination IP address as the next hop address.";
                    }
    
                    leaf priority {
                      type uint8 {
                        range "1..254";
                      }
                      default "100";
                      status deprecated;
                      description
                        "Configured VRRP priority. A larger value indicates a higher priority.";
                    }
    
                    leaf preempt-mode {
                      type boolean;
                      default "true";
                      status deprecated;
                      description
                        "Enable/disable whether a high-priority VRRP group can preempt the master state.";
                    }
    
                    leaf delay-time {
                      when
                        "../preempt-mode='true'";
                      type uint16 {
                        range "0..10800";
                      }
                      units "s";
                      default "0";
                      status deprecated;
                      description
                        "Preemption delay.";
                    }
    
                    leaf adver-interval {
                      type uint32 {
                        range "100..255000";
                      }
                      units "ms";
                      default "1000";
                      status deprecated;
                      description
                        "Configure an interval (in milliseconds) at which the master sends VRRP advertisement packets. This interval must be a multiple of 1000. If the device supports fast advertisement sending, this interval can be set to 100ms 200ms or 500ms.";
                    }
    
                    leaf isplain {
                      when
                        "../authentication-mode='simple'";
                      type boolean;
                      must
                        "../authentication-mode='simple' and ../authentication-key";
                      default "false";
                      status deprecated;
                      description
                        "Enable/disable selecting the display mode of an authentication key.";
                    }
    
                    leaf authentication-key {
                      when
                        "not(../authentication-mode='none')";
                      type pub-type:password {
                        length "1..128";
                        pattern '(\S+.*\S+|\S*)';
                      }
                      must
                        "(../authentication-mode='none' and not(../authentication-key)) or (not(../authentication-mode='none') and ../authentication-key)";
                      status deprecated;
                      description
                        "Authentication key, which is set based on the authentication type. Value description: If non-authentication is specified, the value is empty. If simple authentication, MD5 authentication, or HMAC-SHA256 authentication is specified, the value is a string with the length ranging from 1 to 8 bytes or a ciphertext password with the corresponding length.";
                    }
    
                    leaf authentication-mode {
                      type vrrpauthen-mode;
                      must
                        "((not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../if-name]/ifm:type='LoopBack') and not(../authentication-mode='hmac-sha256')) or ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../if-name]/ifm:type='LoopBack') and not(../authentication-mode='simple'))) and ((../authentication-mode='none' and not(../authentication-key)) or (not(../authentication-mode='none') and ../authentication-key))";
                      default "none";
                      status deprecated;
                      description
                        "Authentication type used for VRRP packet exchanges between VRRP groups. The values are as follows: noAuthentication, simpleTextPassword, md5Authentication. The default value is noAuthentication.";
                    }
    
                    leaf hold-multi {
                      type uint8 {
                        range "3..10";
                      }
                      default "3";
                      status deprecated;
                      description
                        "Set the hello packet sending interval multiplier.";
                    }
    
                    leaf backup-forward {
                      type boolean;
                      default "false";
                      status deprecated;
                      description
                        "Enable/disable VRRP backup forward mode.";
                    }
    
                    leaf fast-resume {
                      when "../admin-flag";
                      type boolean;
                      default "false";
                      status deprecated;
                      description
                        "Enable/disable VRRP fast resume mode.";
                    }
    
                    leaf v3-sendmode {
                      when
                        "not(/vrrp:vrrp/vrrp:global/vrrp:version='v2')";
                      type vrrp-v3-sendmode;
                      default "v3-only";
                      status deprecated;
                      description
                        "VRRP advertisement packet mode on the interface.";
                    }
    
                    choice vrrp-type {
                      status deprecated;
                      description
                        "Type of VRRP.";
                      case member-vrrp {
                        status deprecated;
                        description
                          "Member VRRP.";
                        leaf admin-id {
                          type uint8 {
                            range "1..255";
                          }
                          must
                            "../admin-if-name";
                          status deprecated;
                          description
                            "Tracked MVRRP ID.";
                        }
    
                        leaf admin-if-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must "../admin-id";
                          status deprecated;
                          description
                            "Tracked MVRRP interface name.";
                        }
                      }  // case member-vrrp
    
                      case admin-vrrp {
                        status deprecated;
                        description
                          "Admin VRRP.";
                        leaf admin-flag {
                          type empty;
                          status deprecated;
                          description
                            "Management VRRP.";
                        }
    
                        leaf admin-ignore-ifdown {
                          when "../admin-flag";
                          type boolean;
                          default "false";
                          status deprecated;
                          description
                            "Enable/disable ignoring an interface down event.";
                        }
                      }  // case admin-vrrp
                    }  // choice vrrp-type
    
                    leaf type {
                      type vrrp-type;
                      default "normal";
                      config false;
                      status deprecated;
                      description
                        "Type of a VRRP backup group.";
                    }
    
                    leaf state {
                      type vrrp-oper-state;
                      config false;
                      status deprecated;
                      description
                        "Running status of the VRRP group. This object has three defined values.
    Initialize: The VRRP group is waiting for a startup event.
    Backup: The VRRP backup group is monitoring the availability of the master device.
    Master: The VRRP backup group is forwarding packets for IP addresses that are associated with this device.";
                    }
    
                    leaf create-time {
                      type yang:date-and-time;
                      config false;
                      status deprecated;
                      description
                        "Time when the VRRP backup group was created.";
                    }
    
                    leaf last-change-time {
                      type yang:date-and-time;
                      config false;
                      status deprecated;
                      description
                        "Time when the status of the VRRP backup group last changed.";
                    }
    
                    container virtual-ips {
                      status deprecated;
                      description
                        "List of IP address table related to VRRP backup groups. A VRRP backup group can have 0 to 16 extended virtual IP addresses.";
                      list virtual-ip {
                        key "address";
                        max-elements 16;
                        status deprecated;
                        description
                          "Configure virtual IP address configuration. A VRRP backup group can have 0 to 16 extended virtual IP addresses.";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          status deprecated;
                          description
                            "Virtual IP address.";
                        }
                      }  // list virtual-ip
                    }  // container virtual-ips
    
                    container track-interfaces {
                      when "not(../admin-id)";
                      status deprecated;
                      description
                        "List of interfaces tracked by a VRRP backup group. A VRRP backup group can track a maximum of 16 interfaces.";
                      list track-interface {
                        key "ifname";
                        max-elements 16;
                        status deprecated;
                        description
                          "Configure VRRP backup group tracking interface.";
                        leaf ifname {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          status deprecated;
                          description
                            "Name of the interface tracked by the VRRP backup group.";
                        }
    
                        leaf track-mode {
                          type vrrptrack-mode;
                          default "reduce";
                          status deprecated;
                          description
                            "Mode in which the VRRP backup group tracks the interface.";
                        }
    
                        leaf priority-change {
                          type uint8 {
                            range "1..255";
                          }
                          default "10";
                          status deprecated;
                          description
                            "Value by which the priority increases or reduces when the VRRP backup group tracks the interface.";
                        }
                      }  // list track-interface
                    }  // container track-interfaces
    
                    container track-bfds {
                      when "not(../admin-id)";
                      status deprecated;
                      description
                        "List of BFD sessions tracked by the VRRP backup group.";
                      list track-bfd {
                        key "session-name session-type";
                        max-elements 17;
                        status deprecated;
                        description
                          "Configure VRRP backup group tracking BFD session.";
                        leaf session-name {
                          type leafref {
                            path "/bfd:bfd/bfd:sessions/bfd:session/bfd:name";
                          }
                          status deprecated;
                          description
                            "Name of the BFD session tracked by the VRRP backup group.";
                        }
    
                        leaf session-type {
                          type vrrp-bfd-type;
                          status deprecated;
                          description
                            "Type of the BFD session tracked by the VRRP backup group.";
                        }
    
                        leaf track-mode {
                          when
                            "../session-type='normal'";
                          type vrrp-track-mode;
                          default "reduce";
                          status deprecated;
                          description
                            "Mode in which the VRRP backup group tracks the BFD session.";
                        }
    
                        leaf priority-change {
                          when
                            "../session-type='normal'";
                          type uint8 {
                            range "1..255";
                          }
                          default "10";
                          status deprecated;
                          description
                            "Value by which the priority increases or reduces when the VRRP backup group tracks the common BFD session.";
                        }
    
                        leaf session-id {
                          type uint32 {
                            range "1..32768";
                          }
                          config false;
                          status deprecated;
                          description
                            "ID of the BFD session tracked by the VRRP backup group.";
                        }
    
                        leaf session-state {
                          type vrrp-track-bfd-state;
                          config false;
                          status deprecated;
                          description
                            "State of the BFD session tracked by the VRRP backup group.";
                        }
                      }  // list track-bfd
                    }  // container track-bfds
                  }  // list group
                }  // container groups
              }  // container vrrp
    
              container rpki {
                when "/rpki:rpki/rpki:rpki";
                description "Configure RPKI.";
                container sessions {
                  description
                    "List of rpki session.";
                  list session {
                    must
                      "aging-time>=2*(refresh-time)";
                    must
                      "(contains(remote-address, ':') and (../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'])) or (not (contains(remote-address, ':') and not (../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'])))";
                    key "remote-address";
                    max-elements 2;
                    description
                      "Configure rpki session.";
                    leaf remote-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specifies the address of a Resource Public Key Infrastructure (RPKI) server to establish a TCP connection between the router and the RPKI server.";
                    }
    
                    leaf local-if-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Specifies an interface name to set up a RPKI session.";
                    }
    
                    leaf local-if-address {
                      type inet:ip-address-no-zone;
                      description
                        "Specifies a source address to set up a RPKI session.";
                    }
    
                    leaf tcp-port {
                      type uint16 {
                        range "1..65535";
                      }
                      description
                        "TCP connection port.";
                    }
    
                    choice tcp-authentication-type {
                      when "tcp-port";
                      description
                        "Set password or keychain name.";
                      case password {
                        description
                          "Set password.";
                        leaf password-text {
                          type pub-type:password-extend;
                          description
                            "The TCP connection password is a string of characters, spaces not supported. If only a space is input, the password is cleared. The password is a string ranging from 1 to 255 characters for a plaintext password and 20 to 432 characters for a ciphertext password. The two ends must have the same password; otherwise, TCP connection cannot be established between the two ends.";
                        }
                      }  // case password
    
                      case key-chain {
                        description
                          "Set keychain name.";
                        leaf key-chain-name {
                          type string {
                            length "1..47";
                            pattern '[^A-Z]+';
                          }
                          description
                            "Specifies the name of the keychain authentication.";
                        }
                      }  // case key-chain
                    }  // choice tcp-authentication-type
    
                    leaf aging-time {
                      type uint32 {
                        range "60..604800";
                      }
                      units "s";
                      default "3600";
                      description "Aging time.";
                    }
    
                    leaf refresh-time {
                      type uint32 {
                        range "10..3600";
                      }
                      units "s";
                      default "1800";
                      description
                        "Refresh time.";
                    }
    
                    leaf ssl-policy {
                      type leafref {
                        path "/ssl:ssl/ssl:ssl-policys/ssl:ssl-policy/ssl:policy-name";
                      }
                      description
                        "SSL policy name.";
                    }
                  }  // list session
                }  // container sessions
              }  // container rpki
    
              container vlink-vpns {
                when "../l3vpn:afs/l3vpn:af";
                description
                  "List of configuration VLINK routes.";
                list vlink-vpn {
                  key "address-family";
                  description
                    "Configure VLINK routes.";
                  leaf address-family {
                    type vlink-address-family;
                    must
                      "((../address-family = 'ipv4uni') and (/ni:network-instance/ni:instances/ni:instance[ni:name=current()/../../../ni:name]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast'])) or ((../address-family = 'ipv6uni') and (/ni:network-instance/ni:instances/ni:instance[ni:name=current()/../../../ni:name]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']))";
                    description
                      "Address family: IPv4 or IPv6 unicast address family.";
                  }
    
                  choice route-configuration {
                    description
                      "Configuring a routing policy or filter.";
                    case route-policy {
                      description
                        "Configuring a routing policy.";
                      leaf route-policy-name {
                        type leafref {
                          path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                        }
                        description
                          "Set the name of a VLINK routing policy.";
                      }
                    }  // case route-policy
    
                    case route-filter {
                      description
                        "Configuring a routing policy or filter.";
                      leaf route-filter-name {
                        type leafref {
                          path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                        }
                        description
                          "Set the name of a VLINK routing filter.";
                      }
                    }  // case route-filter
                  }  // choice route-configuration
                }  // list vlink-vpn
              }  // container vlink-vpns
    
              container ripng {
                when
                  "../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']";
                description
                  "Configure RIPng Component.";
                container processs {
                  description
                    "List of RIPng processes.";
                  list process {
                    key "id";
                    description
                      "Configure a RIPng process.";
                    leaf id {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Specify a RIPng process ID.";
                    }
    
                    leaf description {
                      type string {
                        length "1..80";
                      }
                      description
                        "Specify a description for a RIPng process.
    The description is used to identify a RIPng process. You can configure a meaningful name, which helps understanding the configuration.";
                    }
    
                    leaf check-zero {
                      type enable-flag;
                      default "enable";
                      description
                        "In general, RIPng routers will reject all the RIPngv1 packets containing non-zero bits in the MBZ fields.
    This configuration is applied only for RIPngv1 packets.";
                    }
    
                    leaf maximum-load-balancing {
                      ext:dynamic-default;
                      type uint8 {
                        range "1..128";
                      }
                      description
                        "You can configure the maximum number of equal-cost routes for load balancing. This does not limit the number of equal-cost routes that RIPng can learn. RIPng will store all the received ECMP routes.
    The default value of the number of equal-cost routes may vary with products and licenses. You can adjust the default value by purchasing a new license. If the value is configured twice, the second one overrides the first one.";
                    }
    
                    leaf default-cost {
                      type uint8 {
                        range "0..15";
                      }
                      default "0";
                      description
                        "The default cost is used when RIPng imports routes from other routing protocols, and no cost is specified through a route-policy or the cost parameter.
    Triggered update will be sent if the cost of any of the imported route changes due to the default cost configuration.";
                    }
    
                    container import-routes {
                      description
                        "List of routes which learned from multiple routing protocols can be imported to one RIPng process.";
                      list import-route {
                        key "protocol process-id";
                        description
                          "Configure the protocol from which routes are imported.";
                        leaf protocol {
                          type import-protocol-type;
                          description
                            "Specify the type of routing protocol imported to RIPng process.";
                        }
    
                        leaf process-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          must
                            "(../protocol!='isis' and ../protocol!='ospfv3' and ../protocol!='ripng' and ../process-id=1) or not(../protocol!='isis' and ../protocol!='ospfv3' and ../protocol!='ripng' or ../protocol='bgp' or ../protocol='direct' or ../protocol='static' or ../protocol='unr')";
                          description
                            "Specify the process ID of the protocol from which routes are imported. The value can be RIPng OSPFv3 or IS-IS.";
                        }
    
                        choice policy-type {
                          description
                            "Specify the policy type for import route.";
                          case route-policy {
                            description
                              "Set a route-policy name.";
                            leaf route-policy {
                              type leafref {
                                path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                              }
                              description
                                "Specify the name of the route policy to be used during route import.";
                            }
                          }  // case route-policy
    
                          case route-filter {
                            description
                              "Set a route policy name.";
                            leaf route-filter {
                              type leafref {
                                path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                              }
                              description
                                "Name of a routing Filter The value is a string of 1 to 585 characters.";
                            }
                          }  // case route-filter
                        }  // choice policy-type
    
                        choice cost-type {
                          description
                            "Specify the cost used for the imported route.";
                          case cost {
                            description
                              "Specify the cost used for the imported route.";
                            leaf cost {
                              type uint16 {
                                range "0..15";
                              }
                              description
                                "Specify the cost used for the imported route.
    The cost and the tag value of the routes imported to RIPng may be specified in the policy. If no cost is specified in the policy, the routes are imported into RIPng with the cost specified in the command. If no cost is specified either in the command or policy, the configured default cost is used. If no tag value is specified in the policy, the tag value specified by the RM module is used. If the route tag specified by the RM module overflows 2 bytes, zero is used as the route tag.";
                            }
                          }  // case cost
    
                          case inherit-cost {
                            description
                              "Retain the original cost of the imported route.";
                            leaf inherit-cost {
                              type enable-flag;
                              default "disable";
                              description
                                "Retain the original cost of the imported route.";
                            }
                          }  // case inherit-cost
                        }  // choice cost-type
    
                        leaf permit-ibpg {
                          type enable-flag;
                          must
                            "../protocol='bgp' and ../../../../../../ni:name='_public_'";
                          description
                            "IBGP routes will be imported to the RIPng process.";
                        }
                      }  // list import-route
                    }  // container import-routes
    
                    container timer {
                      description
                        "Configure a timer for a process.";
                      leaf garbage {
                        type uint32 {
                          range "1..86400";
                        }
                        units "s";
                        default "120";
                        description
                          "When the specified device detects that the route is unreachable,specify the interval for the device to delete a route from the routing table.";
                      }
    
                      leaf periodic {
                        type uint32 {
                          range "1..86400";
                        }
                        units "s";
                        default "30";
                        description
                          "Specify the periodic timer in seconds. RIPng will send route updates periodically at this configured interval.";
                      }
    
                      leaf age {
                        type uint32 {
                          range "1..86400";
                        }
                        units "s";
                        default "180";
                        description
                          "Specify the age timer. Routes will be considered unreachable after this interval. In most cases, the age timer is three times the update timer.";
                      }
    
                      leaf suppress {
                        type uint32 {
                          range "0..86400";
                        }
                        units "s";
                        default "0";
                        description
                          "A route is suppressed after it ages and becomes unreachable. During the suppression time, no route update is accepted to prevent route flapping.
    The values of these timers should follow the rule: update < age and suppress < garbage-collect. For example, when the update timer is longer than the age timer, the router cannot inform its neighbors of the change in time if a RIPng route changes during the update timer.
    This configuration should be used carefully as any parameter change can cause route flapping and can increase the convergence time considerably. If the network is quite stable, you can increase the timer values.";
                      }
                    }  // container timer
    
                    container preference {
                      description
                        "Configure a preference value.";
                      leaf value {
                        type uint8 {
                          range "1..255";
                        }
                        default "100";
                        description
                          "The configured priority applies to the routes to be delivered to the RM module. If RIP has added a route to the RM module, and then the priority is changed, RIP re-adds it with the new priority.
    The prerequisites for the priority configuration are as follows:
    1. A RIP process has been created.
    2. The policy to be applied has been configured.";
                      }
    
                      choice policy-type {
                        description
                          "Specify the policy type for prefererence.";
                        case route-policy {
                          description
                            "Set a route policy name.";
                          leaf route-policy {
                            type leafref {
                              path "/rtp:routing-policy/rtp:policy-definitions/rtp:policy-definition/rtp:name";
                            }
                            description
                              "You can set a priority for the routes that match the policy, and the result is displayed in the routing table of the RM module.
    The prerequisites for the priority configuration are as follows:
    1. A RIP process has been created.
    2. The policy to be applied has been configured.";
                          }
                        }  // case route-policy
    
                        case route-filter {
                          description
                            "Set a route filter name.";
                          leaf route-filter {
                            type leafref {
                              path "/xpl:xpl/xpl:route-filters/xpl:route-filter/xpl:name";
                            }
                            description
                              "Name of a routing Filter The value is a string of 1 to 585 characters.";
                          }
                        }  // case route-filter
                      }  // choice policy-type
                    }  // container preference
    
                    container interfaces {
                      description
                        "List of the interfaces in a RIPng process.";
                      list interface {
                        key "name";
                        description
                          "Configure a RIPng interface.";
                        leaf name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "../../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ip:ipv6";
                          description
                            "Specify the name of the interface on which RIPng is to be configured.";
                        }
    
                        leaf input {
                          type enable-flag;
                          default "enable";
                          description
                            "If the input is disabled, then no RIPng packets will be received on that interface regardless of the unicast neighbor and silent configuration on that interface. When input is disabled and then enabled, it will send full table request packets.";
                        }
    
                        leaf output {
                          type enable-flag;
                          default "enable";
                          description
                            "If output is disabled, then no RIPng packets will be sent on that interface regardless of the unicast neighbor and silent configuration on that interface. But if the max-route configuration changes, RIPng requests may be sent regardless of the silent configuration on that interface.";
                        }
    
                        leaf split-horizon {
                          type enable-flag;
                          default "enable";
                          description
                            "Split horizon prevents a route from being advertised back on the interface from which was learned. Split horizon is not enabled on NBMA or P2MP interfaces because they have multiple neighbors.";
                        }
    
                        leaf poison-reverse {
                          type enable-flag;
                          default "disable";
                          description
                            "Poison reverse is disabled by default. Poison reverse can be enabled to advertise routes with infinite metric (16) on the interface from which the routes were learned. When both split horizon and poison reverse is configured, poison reverse will have a higher priority.";
                        }
    
                        leaf pkt-transmit-interval {
                          type uint16 {
                            range "50..500";
                          }
                          default "200";
                          description
                            "Interval at which packets are transmitted.";
                        }
    
                        leaf pkt-transmit-number {
                          type uint8 {
                            range "25..100";
                          }
                          default "30";
                          description
                            "Number of packets that can be sent from an interface each time.";
                        }
    
                        leaf default-route-type {
                          type default-route;
                          default "none";
                          description
                            "Configure the router to generate a default route and to advertise the route to its neighbors.
    If a router generates a default route by itself, it does not receive the default route sent by its neighbor.
    You can send a default route to RIPng neighbors only if a default route exists in the routing table (provided the default route in routing table was not added by the same RIPng process). In addition, if a router has learned the default route from a neighbor, then upon originating a default route the learned route is deleted.";
                        }
    
                        leaf default-route-cost {
                          when
                            "not(../default-route-type='none')";
                          type uint8 {
                            range "0..15";
                          }
                          default "0";
                          description
                            "Specify the cost to be used while generating a default route. If a metric out value is applicable on the interface, then the advertised metric value is the sum of the cost and the metric out.";
                        }
    
                        leaf default-route-tag {
                          when
                            "not(../default-route-type='none')";
                          type uint16 {
                            range "0..65535";
                          }
                          default "0";
                          description
                            "Define a tag value for the default route's identification.";
                        }
    
                        container metricin {
                          description
                            "Configure the metric configured on a RIPng interface.";
                          leaf value {
                            type uint8 {
                              range "0..15";
                            }
                            default "0";
                            description
                              "Metricin is the mechanism to increase the incoming metric of routes learned through RIPng.
    When RIPng receives a route, the metric value configured on that interface is added before adding it to the RIPng routing table. After the metric is added, if the metric is greater than 16, 16 is used as the metric.";
                          }
                        }  // container metricin
    
                        container metricout {
                          description
                            "Configure the metricout on a RIPng interface.";
                          leaf value {
                            type uint8 {
                              range "1..15";
                            }
                            default "1";
                            description
                              "When RIPng advertises a route, the metric value configured on an interface is added before sending the route. After the metric is added, if the value is greater than 16, 16 is used as the metric.
    When an ACL or IP prefix list is configured in the metricout command, the metric is applied only to those routes that match the ACL or IP prefix list. All other routes are sent with the default cost (1).";
                          }
    
                          choice policy-type {
                            description
                              "Mode of the policy used for import route.";
                            case ip-prefix {
                              description
                                "Set a name of the IP prefix list.";
                              leaf ip-prefix {
                                when
                                  "../value>1";
                                type leafref {
                                  path "/rtp:routing-policy/rtp:ipv6-prefix-filters/rtp:ipv6-prefix-filter/rtp:name";
                                }
                                description
                                  "Specify the name of the IP prefix list to be configured along with metric out.";
                              }
                            }  // case ip-prefix
    
                            case acl-number {
                              description
                                "Set a number of the basic ACL.";
                              leaf acl-number {
                                when
                                  "../value>1";
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Specify the number of the basic ACL to be configured along with metric out.";
                              }
                            }  // case acl-number
    
                            case acl-name {
                              description
                                "Set a name of the basic ACL.";
                              leaf acl-name {
                                when
                                  "../value>1";
                                type leafref {
                                  path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                                }
                                must
                                  "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                                description
                                  "Specify the name of the basic ACL to be configured along with metric out.
    When an ACL or IP prefix list is configured in the metricout command, the metric is applied only to those routes that match the ACL or IP prefix list. All other routes are sent with the default cost (1).";
                              }
                            }  // case acl-name
                          }  // choice policy-type
                        }  // container metricout
    
                        container summarys {
                          description
                            "List of summary addresses configured for the interface.";
                          list summary {
                            key "address network-mask";
                            max-elements 128;
                            description
                              "Configure a summary class.";
                            leaf address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Route summarization improves the scalability and efficiency of routers on large networks and reduces the routing table size. Instead of sending many routes to neighbors, a router sends only the route to the specified summarized address.";
                            }
    
                            leaf network-mask {
                              type uint8 {
                                range "0..128";
                              }
                              description
                                "Specify the mask for the summary address.";
                            }
    
                            leaf avoid-feedback {
                              type enable-flag;
                              default "disable";
                              description
                                "Prevent summarized routes from being sent back to the interface.";
                            }
                          }  // list summary
                        }  // container summarys
                      }  // list interface
                    }  // container interfaces
    
                    container neighbor-infos {
                      config false;
                      description
                        "List of the information for the unicast neighbor.";
                      list neighbor-info {
                        key "address interface-name";
                        description
                          "Operational data of the information for the unicast neighbor.";
                        leaf address {
                          type inet:ipv6-address-no-zone;
                          description
                            "The address of a neighbor.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "The interface information of a neighbor.";
                        }
    
                        leaf active-routes-number {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The number of active RIPng routes.";
                        }
    
                        leaf holddown-routes-number {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The number of holddown routes.";
                        }
    
                        leaf garbage-routes-number {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "The number of garbage routes.";
                        }
                      }  // list neighbor-info
                    }  // container neighbor-infos
    
                    container routes {
                      config false;
                      description
                        "List of information about all the routes on the peer.";
                      list route {
                        key "peer-address interface-name destination mask-length nexthop";
                        description
                          "Operational data of the route on the peer.";
                        leaf peer-address {
                          type inet:ipv6-address-no-zone;
                          description
                            "Neighbor that is connected to the interface.";
                        }
    
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Interface on which a neighbor was present.";
                        }
    
                        leaf destination {
                          type inet:ipv6-address-no-zone;
                          description
                            "Destination IP address.";
                        }
    
                        leaf mask-length {
                          type uint8 {
                            range "0..128";
                          }
                          description
                            "Mask length of the route.";
                        }
    
                        leaf nexthop {
                          type inet:ipv6-address-no-zone;
                          description
                            "Next hop of the route.";
                        }
    
                        leaf cost {
                          type uint8 {
                            range "1..255";
                          }
                          description
                            "Cost of the route.";
                        }
    
                        leaf tag {
                          type uint16 {
                            range "0..65535";
                          }
                          description
                            "Tag of the route.";
                        }
    
                        leaf flags {
                          type string {
                            length "1..4";
                          }
                          description
                            "First character to distinguish RIPng routes from TRIP routes and the second character to indicate the route state.";
                        }
    
                        leaf state-time {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          units "s";
                          description
                            "Time during which a route remains in a specific state, Unit: second.";
                        }
                      }  // list route
                    }  // container routes
    
                    container interface-packets-statisticss {
                      config false;
                      description
                        "List of Updates and packets statistics for interface.";
                      list interface-packets-statistics {
                        key "interface-name";
                        description
                          "Statistics of Updates and packets statistics for interface.";
                        leaf interface-name {
                          type pub-type:if-name;
                          description
                            "Collect statistics on packets on the interface.";
                        }
    
                        leaf ip-address {
                          ext:support-filter "true";
                          type inet:ipv6-address-no-zone;
                          description
                            "IP address of the interface.";
                        }
    
                        leaf periodic-updates-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of periodic Update packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf periodic-updates-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of periodic Update packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf periodic-updates-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total periodic Update packets that are sent by the interface.";
                        }
    
                        leaf triggered-updates-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of triggered Update packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf triggered-updates-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of triggered Update packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf triggered-updates-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total triggered Update packets that are sent by the interface.";
                        }
    
                        leaf response-packets-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf response-packets-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf response-packets-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are sent by the interface.";
                        }
    
                        leaf response-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are received by the interface.";
                        }
    
                        leaf response-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are received by the interface.";
                        }
    
                        leaf response-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are received by the interface.";
                        }
    
                        leaf response-packets-ignored-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 1 minute that are ignored by the interface.";
                        }
    
                        leaf response-packets-ignored-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of response packets within the last 5 minute that are ignored by the interface.";
                        }
    
                        leaf response-packets-ignored-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total response packets that are ignored by the interface.";
                        }
    
                        leaf request-packets-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf request-packets-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf request-packets-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are sent by the interface.";
                        }
    
                        leaf request-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are received by the interface.";
                        }
    
                        leaf request-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are received by the interface.";
                        }
    
                        leaf request-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are received by the interface.";
                        }
    
                        leaf request-packets-ignored-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 1 minute that are ignored by the interface.";
                        }
    
                        leaf request-packets-ignored-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of request packets within the last 5 minute that are ignored by the interface.";
                        }
    
                        leaf request-packets-ignored-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total request packets that are ignored by the interface.";
                        }
    
                        leaf bad-packets-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad packets within the last 1 minute that are received by the interface.";
                        }
    
                        leaf bad-packets-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad packets within the last 5 minute that are received by the interface.";
                        }
    
                        leaf bad-packets-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total bad packets that are received by the interface.";
                        }
    
                        leaf routes-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 1 minute that are received by the interface.";
                        }
    
                        leaf routes-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 5 minute that are received by the interface.";
                        }
    
                        leaf routes-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total routes that are received by the interface.";
                        }
    
                        leaf routes-sent-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 1 minute that are sent by the interface.";
                        }
    
                        leaf routes-sent-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of routes within the last 5 minute that are sent by the interface.";
                        }
    
                        leaf routes-sent-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total routes that are sent by the interface.";
                        }
    
                        leaf bad-routes-received-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad routes within the last 1 minute that are received by the interface.";
                        }
    
                        leaf bad-routes-received-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of bad routes within the last 5 minute that are received by the interface.";
                        }
    
                        leaf bad-routes-received-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total bad routes that are received by the interface.";
                        }
    
                        leaf authentication-failed-packets-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 1 minute that fail to be authenticated.";
                        }
    
                        leaf authentication-failed-packets-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 5 minute that fail to be authenticated.";
                        }
    
                        leaf authentication-failed-packets-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total packets that fail to be authenticated.";
                        }
    
                        leaf sent-failed-packets-last-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 1 minute that fail to be sent.";
                        }
    
                        leaf sent-failed-packets-last-five-minutes {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of packets within the last 5 minute that fail to be sent.";
                        }
    
                        leaf sent-failed-packets-total {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of total packets that fail to be sent.";
                        }
                      }  // list interface-packets-statistics
                    }  // container interface-packets-statisticss
    
                    container statistics {
                      config false;
                      description
                        "Statistics of then major information for the process.";
                      leaf routes-in-database {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of routes in the database.";
                      }
    
                      leaf interfaces-enabled {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of the interfaces on which is enabled.";
                      }
    
                      leaf trigger-updates-sent {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of sent triggered updates.";
                      }
    
                      leaf periodic-updates-sent {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of sent periodic updates.";
                      }
                    }  // container statistics
                  }  // list process
                }  // container processs
              }  // container ripng
            }  // list instance
          }  // container instances
        }  // container network-instance
      }  // module huawei-network-instance
    

© 2023 YumaWorks, Inc. All rights reserved.