huawei-bras-ipv6-address-manage

IPv6 address management.

  • Version: 2020-02-22

    huawei-bras-ipv6-address-manage@2020-02-22


    
      module huawei-bras-ipv6-address-manage {
    
        yang-version 1;
    
        namespace
          "urn:huawei:yang:huawei-bras-ipv6-address-manage";
    
        prefix bras-ipv6-address-manage;
    
        import ietf-inet-types {
          prefix inet;
        }
        import huawei-extension {
          prefix ext;
        }
        import huawei-network-instance {
          prefix ni;
        }
        import huawei-l3vpn {
          prefix l3vpn;
        }
        import huawei-aaa {
          prefix aaa;
        }
        import huawei-bras-ipv4-address-manage {
          prefix bras-ipv4-address-manage;
        }
        import huawei-bras-cu-controller {
          prefix bras-cu-controller;
        }
        import huawei-bras-dhcpv6-server {
          prefix bras-dhcpv6-server;
        }
    
        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 "IPv6 address management.";
    
        revision "2020-02-22" {
          description
            "Description modification.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-10-17" {
          description "Second revision.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-05-08" {
          description "Initial revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "ipv6pool";
    
        typedef reserved-type {
          type enumeration {
            enum "mac" {
              value 1;
              description
                "Reserves IPv6 address or IPv6 prefix by mac.";
            }
            enum "duid" {
              value 2;
              description
                "Reserves IPv6 address or IPv6 prefix by duid.";
            }
          }
          description
            "Reserve IPv6 address or IPv6 prefix type.";
        }
    
        typedef pool-type {
          type enumeration {
            enum "local" {
              value 1;
              description
                "The type of local IPv6 address pool.";
            }
            enum "delegation" {
              value 2;
              description
                "The type of delegation IPv6 address pool.";
            }
            enum "remote" {
              value 3;
              description
                "The type of remote IPv6 address pool.";
            }
            enum "relay" {
              value 4;
              description
                "The type of relay IPv6 address pool.";
            }
          }
          description "IPv6 pool type.";
        }
    
        typedef prefix-type {
          type enumeration {
            enum "local" {
              value 1;
              description "Local type.";
            }
            enum "delegation" {
              value 2;
              description "Delegation type.";
            }
            enum "remote" {
              value 3;
              description "Remote type.";
            }
            enum "dynamic" {
              value 4;
              description "Dynamic type.";
            }
          }
          description "IPv6 prefix type.";
        }
    
        typedef pool-usage-type {
          type enumeration {
            enum "domain" {
              value 0;
              description
                "Domain-based statistics.";
            }
          }
          description "Statistical granularity.";
        }
    
        typedef threshold-type {
          type enumeration {
            enum "all-threshold" {
              value 0;
              description "All threshold.";
            }
            enum "upper-threshold" {
              value 1;
              description "Upper threshold.";
            }
            enum "lower-threshold" {
              value 2;
              description "Lower threshold.";
            }
          }
          description
            "Define the threshod limite type.";
        }
    
        container bras-ipv6-address-manage {
          description
            "Configure the IPv6 repfix pool and IPv6 address pool.";
          container ipv6-prefixs {
            description
              "List of IPv6 prefix pools.";
            list ipv6-prefix {
              key "name";
              max-elements 16384;
              description
                "Configure an IPv6 prefix pool.";
              leaf name {
                ext:case-sensitivity "lower-only";
                type string {
                  length "1..32";
                  pattern '[a-z0-9._-]{1,32}';
                }
                must
                  "../name != '-' and ../name != '--'";
                description
                  "Specify the name of the IPv6 prefix pool to be created.";
              }
    
              leaf type {
                ext:operation-exclude "update";
                type prefix-type;
                mandatory true;
                description
                  "Specify the type of the IPv6 prefix pool, and the type cannot be modified.";
              }
    
              container local {
                when "../type = 'local'";
                description
                  "Configure a local IPv6 prefix pool. The specified IPv6 address must be in the IPv6 prefix pool.";
                container occupied-policy {
                  description
                    "Configure a specific policy to specify the IPv6 prefix pool to be occupied.";
                  choice occupied-policy {
                    description
                      "Select a specific policy to specify the IPv6 prefix pool to be occupied.";
                    case up-id {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP UP ID.";
                      leaf up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        description
                          "Specify the ID of a vBRAS-UP.";
                      }
                    }  // case up-id
    
                    case up-backup-profile {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP backup policy profile.";
                      leaf up-backup-profile {
                        type leafref {
                          path "/bras-cu-controller:bras-cu-controller/bras-cu-controller:hot-profiles/bras-cu-controller:hot-profile/bras-cu-controller:name";
                        }
                        must
                          "/bras-cu-controller:bras-cu-controller/bras-cu-controller:hot-profiles/bras-cu-controller:hot-profile[bras-cu-controller:name=current()]/bras-cu-controller:backup-groups/bras-cu-controller:backup-group/bras-cu-controller:master-interface";
                        description
                          "Specify the name of a vBRAS-UP backup policy profile.";
                      }
                    }  // case up-backup-profile
    
                    case hot-standby-up-group {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP hot backup groups.";
                      leaf master-up {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "../master-up!=../slave-up";
                        must
                          "(../master-up<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../master-up>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the master interface in a vBRAS-UP hot backup group resides.";
                      }
    
                      leaf slave-up {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../slave-up<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../slave-up>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the slave interface in a vBRAS-UP hot backup group resides.";
                      }
                    }  // case hot-standby-up-group
    
                    case up-group {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP warm backup groups or vBRAS-UP hot backup groups.";
                      leaf master-up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "../master-up-id!=../slave-up-id";
                        must
                          "(../master-up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../master-up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the master interface in a vBRAS-UP warm backup group resides or a vBRAS-UP hot backup group resides.";
                      }
    
                      leaf slave-up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../slave-up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../slave-up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the slave interface in a vBRAS-UP warm backup group resides or a vBRAS-UP hot backup group resides.";
                      }
                    }  // case up-group
                  }  // choice occupied-policy
                }  // container occupied-policy
    
                container prefix-address {
                  description
                    "Configure the IPv6 prefix address for an IPv6 prefix pool.";
                  leaf prefix {
                    type inet:ipv6-prefix;
                    description
                      "Specify the address and length of an IPv6 prefix, not support modify. The prefix address must be calculated based on the prefix length.";
                  }
                }  // container prefix-address
    
                container vpn-instance {
                  description
                    "Configure the VPN instance name of a IPv6 prefix pool.";
                  leaf name {
                    type leafref {
                      path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                    }
                    must
                      "/ni:network-instance/ni:instances/ni:instance[ni:name=current()]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] and ../name != '_public_'";
                    description
                      "Specify the VPN instance name of a IPv6 prefix pool.";
                  }
                }  // container vpn-instance
    
                container exclude-ipv6-addresss {
                  when
                    "../prefix-address/prefix";
                  description
                    "Configure IPv6 addresses to prevent it from being allocated to users. The start IPv6 address must be smaller than or equal to the end IPv6 address.";
                  list exclude-ipv6-address {
                    key "start-ipv6-address end-ipv6-address";
                    description
                      "Configure a specified IPv6 address to prevent it from being allocated to users. The start IPv6 address must be smaller than or equal to the end IPv6 address.";
                    leaf start-ipv6-address {
                      type inet:ipv6-address-no-zone;
                      description
                        "Specify the start IPv6 address.";
                    }
    
                    leaf end-ipv6-address {
                      type inet:ipv6-address-no-zone;
                      description
                        "Specify the end IPv6 address.";
                    }
                  }  // list exclude-ipv6-address
                }  // container exclude-ipv6-addresss
    
                container lifetime {
                  must
                    "not(./preferred-infinite) or ./valid-infinite";
                  description
                    "Configure the preferred lifetime anf valid lifetime of an IPv6 prefix.
    The valid lifetime should not be smaller than the preferred lifetime.";
                  choice preferred-lifetime {
                    default "preferred-time";
                    description
                      "Configure the preferred lifetime.";
                    case preferred-infinite {
                      description
                        "Specify the preferred lifetime of IPv6 prefix is infinite.";
                      leaf preferred-infinite {
                        type empty;
                        description
                          "Specify the preferred lifetime of IPv6 prefix is infinite.";
                      }
                    }  // case preferred-infinite
    
                    case preferred-time {
                      description
                        "Configure the preferred lifetime that is not infinite.";
                      leaf preferred-day {
                        type uint16 {
                          range "0..999";
                        }
                        units "d";
                        must
                          "../preferred-day != 0 or ../preferred-hour != 0 or ../preferred-minute != 0";
                        default "2";
                        description
                          "Prefer day.";
                      }
    
                      leaf preferred-hour {
                        type uint8 {
                          range "0..23";
                        }
                        units "h";
                        default "0";
                        description
                          "Prefer hour.";
                      }
    
                      leaf preferred-minute {
                        type uint8 {
                          range "0..59";
                        }
                        units "min";
                        default "0";
                        description
                          "Prefer minute.";
                      }
                    }  // case preferred-time
                  }  // choice preferred-lifetime
    
                  choice valid-lifetime {
                    default "valid-time";
                    description
                      "Configure the valid lifetime.";
                    case valid-infinite {
                      description
                        "Configure the valid lifetime of IPv6 prefix is infinite.";
                      leaf valid-infinite {
                        type empty;
                        description
                          "Specify the valid lifetime of IPv6 prefix is infinite.";
                      }
                    }  // case valid-infinite
    
                    case valid-time {
                      description
                        "Configure the valid lifetime that is not infinite.";
                      leaf valid-day {
                        type uint16 {
                          range "0..999";
                        }
                        units "d";
                        must
                          "../valid-day != 0 or ../valid-hour != 0 or ../valid-minute != 0";
                        default "3";
                        description "Valid day.";
                      }
    
                      leaf valid-hour {
                        type uint8 {
                          range "0..23";
                        }
                        units "h";
                        default "0";
                        description
                          "Valid hour.";
                      }
    
                      leaf valid-minute {
                        type uint8 {
                          range "0..59";
                        }
                        units "min";
                        default "0";
                        description
                          "Valid minute.";
                      }
                    }  // case valid-time
                  }  // choice valid-lifetime
                }  // container lifetime
    
                container reserved-ipv6 {
                  description
                    "Configure a reservation type for the prefix pool.";
                  leaf reserved-type {
                    type reserved-type;
                    description
                      "Reservation type for the IPv6 prefix or address, after the reserved type of an IPv6 prefix or address is set to mac, one-to-many mapping between one MAC address and multiple sessions cannot be enabled.";
                  }
    
                  leaf lease {
                    when "../reserved-type";
                    type empty;
                    description
                      "Reserve the IPv6 prefixes or address during a lease.";
                  }
                }  // container reserved-ipv6
    
                container frame-ipv6-lease {
                  description
                    "Configure manage the leases of RADIUS-delivered IPv6 addresses that are in the supported address pools.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable manage the leases of RADIUS-delivered IPv6 addresses that are in the supported address pools.";
                  }
                }  // container frame-ipv6-lease
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
              }  // container local
    
              container delegation {
                when "../type = 'delegation'";
                must
                  "./slaac-unshare-only/enable='false' and ./pd-unshare-only/enable='false' or ./slaac-unshare-only/enable='false' and not(./dhcpv6-unshare-only/enable) or ./pd-unshare-only/enable='false' and not(./dhcpv6-unshare-only/enable)";
                description
                  "Configure a delegation IPv6 prefix pool. The specified IPv6 address must be in the IPv6 prefix pool.";
                container occupied-policy {
                  description
                    "Configure a specific policy to specify the IPv6 prefix pool to be occupied.";
                  choice occupied-policy {
                    description
                      "Select a specific policy to specify the IPv6 prefix pool to be occupied.";
                    case up-id {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP UP ID.";
                      leaf up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        description
                          "Specify the ID of a vBRAS-UP.";
                      }
                    }  // case up-id
    
                    case up-backup-profile {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP backup policy profile.";
                      leaf up-backup-profile {
                        type leafref {
                          path "/bras-cu-controller:bras-cu-controller/bras-cu-controller:hot-profiles/bras-cu-controller:hot-profile/bras-cu-controller:name";
                        }
                        must
                          "/bras-cu-controller:bras-cu-controller/bras-cu-controller:hot-profiles/bras-cu-controller:hot-profile[bras-cu-controller:name=current()]/bras-cu-controller:backup-groups/bras-cu-controller:backup-group/bras-cu-controller:master-interface";
                        description
                          "Specify the name of a vBRAS-UP backup policy profile.";
                      }
                    }  // case up-backup-profile
    
                    case hot-standby-up-group {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP hot backup groups.";
                      leaf master-up {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "../master-up!=../slave-up";
                        must
                          "(../master-up<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../master-up>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the master interface in a vBRAS-UP hot backup group resides.";
                      }
    
                      leaf slave-up {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../slave-up<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../slave-up>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the slave interface in a vBRAS-UP hot backup group resides.";
                      }
                    }  // case hot-standby-up-group
    
                    case up-group {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP warm backup groups or vBRAS-UP hot backup groups.";
                      leaf master-up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "../master-up-id!=../slave-up-id";
                        must
                          "(../master-up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../master-up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the master interface in a vBRAS-UP warm backup group resides or a vBRAS-UP hot backup group resides.";
                      }
    
                      leaf slave-up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../slave-up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../slave-up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the slave interface in a vBRAS-UP warm backup group resides or a vBRAS-UP hot backup group resides.";
                      }
                    }  // case up-group
                  }  // choice occupied-policy
                }  // container occupied-policy
    
                container prefix-address {
                  description
                    "Configure the IPv6 prefix address for an IPv6 prefix pool.";
                  leaf prefix {
                    type inet:ipv6-prefix;
                    description
                      "Specify the address and length of an IPv6 prefix, not support modify. The prefix address must be calculated based on the prefix length.";
                  }
    
                  leaf prefix-length {
                    when "../prefix";
                    type uint8 {
                      range "1..128";
                    }
                    default "64";
                    description
                      "Specify the length of the IPv6 prefix assigned by the delegating router to the requesting router. Not support modify or delete.
    The delegating prefix length must be longer than or the same as IPv6 prefix length.";
                  }
                }  // container prefix-address
    
                container slaac-unshare-only {
                  description
                    "Configure the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (SLAAC) protocol.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (SLAAC) protocol.";
                  }
                }  // container slaac-unshare-only
    
                container pd-unshare-only {
                  description
                    "Configure the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (DHCPv6 IA_PD) protocol.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (DHCPv6 IA_PD) protocol.";
                  }
                }  // container pd-unshare-only
    
                container dhcpv6-unshare-only {
                  when
                    "../prefix-address/prefix";
                  description
                    "Configure an IPv6 prefix pool to assign only IPv6 addresses not prefixes to users.";
                  leaf enable {
                    type empty;
                    description
                      "Configure an IPv6 prefix pool to assign only IPv6 addresses not prefixes to users.";
                  }
                }  // container dhcpv6-unshare-only
    
                container vpn-instance {
                  description
                    "Configure the VPN instance name of a IPv6 prefix pool.";
                  leaf name {
                    type leafref {
                      path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                    }
                    must
                      "/ni:network-instance/ni:instances/ni:instance[ni:name=current()]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] and ../name != '_public_'";
                    description
                      "Specify the VPN instance name of a IPv6 prefix pool.";
                  }
                }  // container vpn-instance
    
                container exclude-ipv6-addresss {
                  when
                    "../dhcpv6-unshare-only/enable";
                  description
                    "Configure IPv6 addresses to prevent it from being allocated to users.";
                  list exclude-ipv6-address {
                    key "start-ipv6-address end-ipv6-address";
                    description
                      "Configure a specified IPv6 address to prevent it from being allocated to users. The start IPv6 address must be smaller than or equal to the end IPv6 address.";
                    leaf start-ipv6-address {
                      type inet:ipv6-address-no-zone;
                      description
                        "Specify the start IPv6 address.";
                    }
    
                    leaf end-ipv6-address {
                      type inet:ipv6-address-no-zone;
                      description
                        "Specify the end IPv6 address.";
                    }
                  }  // list exclude-ipv6-address
                }  // container exclude-ipv6-addresss
    
                container lifetime {
                  must
                    "not(./preferred-infinite) or ./valid-infinite";
                  description
                    "Configure the preferred lifetime anf valid lifetime of an IPv6 prefix.
    The valid lifetime should not be smaller than the preferred lifetime.";
                  choice preferred-lifetime {
                    default "preferred-time";
                    description
                      "Configure the preferred lifetime.";
                    case preferred-infinite {
                      description
                        "Specify the preferred lifetime of IPv6 prefix is infinite.";
                      leaf preferred-infinite {
                        type empty;
                        description
                          "Specify the preferred lifetime of IPv6 prefix is infinite.";
                      }
                    }  // case preferred-infinite
    
                    case preferred-time {
                      description
                        "Configure the preferred lifetime that is not infinite.";
                      leaf preferred-day {
                        type uint16 {
                          range "0..999";
                        }
                        units "d";
                        must
                          "../preferred-day != 0 or ../preferred-hour != 0 or ../preferred-minute != 0";
                        default "2";
                        description
                          "Prefer day.";
                      }
    
                      leaf preferred-hour {
                        type uint8 {
                          range "0..23";
                        }
                        units "h";
                        default "0";
                        description
                          "Prefer hour.";
                      }
    
                      leaf preferred-minute {
                        type uint8 {
                          range "0..59";
                        }
                        units "min";
                        default "0";
                        description
                          "Prefer minute.";
                      }
                    }  // case preferred-time
                  }  // choice preferred-lifetime
    
                  choice valid-lifetime {
                    default "valid-time";
                    description
                      "Configure the valid lifetime.";
                    case valid-infinite {
                      description
                        "Configure the valid lifetime of IPv6 prefix is infinite.";
                      leaf valid-infinite {
                        type empty;
                        description
                          "Specify the valid lifetime of IPv6 prefix is infinite.";
                      }
                    }  // case valid-infinite
    
                    case valid-time {
                      description
                        "Configure the valid lifetime that is not infinite.";
                      leaf valid-day {
                        type uint16 {
                          range "0..999";
                        }
                        units "d";
                        must
                          "../valid-day != 0 or ../valid-hour != 0 or ../valid-minute != 0";
                        default "3";
                        description "Valid day.";
                      }
    
                      leaf valid-hour {
                        type uint8 {
                          range "0..23";
                        }
                        units "h";
                        default "0";
                        description
                          "Valid hour.";
                      }
    
                      leaf valid-minute {
                        type uint8 {
                          range "0..59";
                        }
                        units "min";
                        default "0";
                        description
                          "Valid minute.";
                      }
                    }  // case valid-time
                  }  // choice valid-lifetime
                }  // container lifetime
    
                container reserved-ipv6 {
                  description
                    "Configure a reservation type for the prefix pool.";
                  leaf reserved-type {
                    type reserved-type;
                    description
                      "Reservation type for the IPv6 prefix or address, after the reserved type of an IPv6 prefix or address is set to mac, one-to-many mapping between one MAC address and multiple sessions cannot be enabled.";
                  }
    
                  leaf lease {
                    when "../reserved-type";
                    type empty;
                    description
                      "Reserve the IPv6 prefixes or address during a lease.";
                  }
                }  // container reserved-ipv6
    
                container frame-ipv6-lease {
                  description
                    "Configure manage the leases of RADIUS-delivered IPv6 addresses that are in the supported address pools.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable manage the leases of RADIUS-delivered IPv6 addresses that are in the supported address pools.";
                  }
                }  // container frame-ipv6-lease
    
                container client-duid-binds {
                  when
                    "../prefix-address/prefix";
                  must
                    "not (../dhcpv6-unshare-only/enable)";
                  description
                    "List of bind a specified IPv6 prefix in the delegation prefix pool to a client DUID.";
                  list client-duid-bind {
                    key "client-duid";
                    unique "prefix-address";
                    description
                      "Configure of bind a specified IPv6 prefix in the delegation prefix pool to a client DUID.";
                    leaf client-duid {
                      ext:case-sensitivity "upper-only";
                      type string {
                        length
                          "8|10|12|14|16|18|20|22|24|26|28";
                        pattern '[A-F0-9]{8,28}';
                      }
                      description
                        "Specify the DUID of a DHCPv6 client. The client DUID is used by a DHCPv6 server to uniquely identify a DHCPv6 client. The value is in the format of hexadecimal notation.";
                    }
    
                    leaf prefix-address {
                      ext:operation-exclude "update";
                      type inet:ipv6-address-no-zone;
                      mandatory true;
                      description
                        "Specify the prefix IPv6 address.";
                    }
                  }  // list client-duid-bind
                }  // container client-duid-binds
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
              }  // container delegation
    
              container remote {
                when "../type = 'remote'";
                must
                  "./slaac-unshare-only/enable='false' or not(./dhcpv6-only/enable)";
                description
                  "Configure a remote IPv6 prefix pool.";
                container occupied-policy {
                  description
                    "Configure a specific policy to specify the IPv6 prefix pool to be occupied.";
                  choice occupied-policy {
                    description
                      "Select a specific policy to specify the IPv6 prefix pool to be occupied.";
                    case up-id {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP UP ID.";
                      leaf up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        description
                          "Specify the ID of a vBRAS-UP.";
                      }
                    }  // case up-id
    
                    case up-backup-profile {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP backup policy profile.";
                      leaf up-backup-profile {
                        type leafref {
                          path "/bras-cu-controller:bras-cu-controller/bras-cu-controller:hot-profiles/bras-cu-controller:hot-profile/bras-cu-controller:name";
                        }
                        must
                          "/bras-cu-controller:bras-cu-controller/bras-cu-controller:hot-profiles/bras-cu-controller:hot-profile[bras-cu-controller:name=current()]/bras-cu-controller:backup-groups/bras-cu-controller:backup-group/bras-cu-controller:master-interface";
                        description
                          "Specify the name of a vBRAS-UP backup policy profile.";
                      }
                    }  // case up-backup-profile
    
                    case hot-standby-up-group {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP hot backup groups.";
                      leaf master-up {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "../master-up!=../slave-up";
                        must
                          "(../master-up<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../master-up>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the master interface in a vBRAS-UP hot backup group resides.";
                      }
    
                      leaf slave-up {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../slave-up<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../slave-up>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the slave interface in a vBRAS-UP hot backup group resides.";
                      }
                    }  // case hot-standby-up-group
    
                    case up-group {
                      description
                        "The specified IPv6 prefix pool is exclusive to be used by vBRAS-UP warm backup groups or vBRAS-UP hot backup groups.";
                      leaf master-up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "../master-up-id!=../slave-up-id";
                        must
                          "(../master-up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../master-up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the master interface in a vBRAS-UP warm backup group resides or a vBRAS-UP hot backup group resides.";
                      }
    
                      leaf slave-up-id {
                        type uint16 {
                          range
                            "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                        }
                        must
                          "(../slave-up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../slave-up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                        mandatory true;
                        description
                          "Specify the ID of the vBRAS-UP where the slave interface in a vBRAS-UP warm backup group resides or a vBRAS-UP hot backup group resides.";
                      }
                    }  // case up-group
                  }  // choice occupied-policy
                }  // container occupied-policy
    
                container vpn-instance {
                  description
                    "Configure the VPN instance name of a IPv6 prefix pool.";
                  leaf name {
                    type leafref {
                      path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                    }
                    must
                      "/ni:network-instance/ni:instances/ni:instance[ni:name=current()]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] and ../name != '_public_'";
                    description
                      "Specify the VPN instance name of a IPv6 prefix pool.";
                  }
                }  // container vpn-instance
    
                container link-address {
                  description
                    "Configure a link address.";
                  leaf ipv6-address {
                    type inet:ipv6-prefix;
                    description
                      "Specify a global unicast address or a site-local unicast address.";
                  }
                }  // container link-address
    
                container dhcpv6-only {
                  description
                    "Configure a remote prefix pool for only DHCPv6 prefix or address allocation.";
                  leaf enable {
                    type empty;
                    description
                      "Specify a remote prefix pool for only DHCPv6 prefix or address allocation.";
                  }
                }  // container dhcpv6-only
    
                container lease-management {
                  description
                    "Configure the lease management function for remote IPv6 prefix pool.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the lease management function for remote IPv6 prefix pool.";
                  }
                }  // container lease-management
    
                container reserved-ipv6 {
                  description
                    "Configure a reservation type for the prefix pool.";
                  leaf reserved-type {
                    type reserved-type;
                    description
                      "Reservation type for the IPv6 prefix or address, after the reserved type of an IPv6 prefix or address is set to mac, one-to-many mapping between one MAC address and multiple sessions cannot be enabled.";
                  }
                }  // container reserved-ipv6
    
                container lock {
                  description
                    "Configure a locked IPv6 prefix pool.";
                  leaf enable {
                    type empty;
                    description
                      "Lock an IPv6 prefix pool.";
                  }
                }  // container lock
    
                container slaac-unshare-only {
                  description
                    "Configure the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (SLAAC) protocol.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (SLAAC) protocol.";
                  }
                }  // container slaac-unshare-only
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
              }  // container remote
    
              container dynamic {
                when "../type = 'dynamic'";
                description
                  "Configure a dynamic IPv6 prefix pool.";
                container dap-server {
                  description
                    "Configure a DAP resource pool to assign address segments to a BRAS.";
                  leaf name {
                    type string {
                      length "1..32";
                    }
                    description
                      "Specify the name of a DAP resource pool.";
                  }
                }  // container dap-server
    
                container prefix-length {
                  must
                    "not(./unshared-initial > ./unshared-delegating or ./unshared-extend > ./unshared-delegating)";
                  must
                    "not(./slaac-unshare-only/enable = 'true' and ./unshared-delegating != 64)";
                  must
                    "not(./slaac-unshare-only/enable = 'true' and ./pd-unshare-only/enable = 'true')";
                  description
                    "Configure the share mode for a dynamic IPv6 prefix pool to configure the prefix length.";
                  choice share-mode {
                    description
                      "Select the share mode for a dynamic IPv6 prefix pool to configure the prefix length.";
                    case shared {
                      description
                        "Configure initial and subsequent prefix lengths for a shared dynamic prefix pool.";
                      leaf shared-initial {
                        type uint8 {
                          range "3..127";
                        }
                        mandatory true;
                        description
                          "Configure the initial prefix length.";
                      }
    
                      leaf shared-extend {
                        ext:dynamic-default {
                          ext:default-value "../shared-initial" {
                            description "The default value is equal to initial length.";
                          }
                        }
                        type uint8 {
                          range "3..127";
                        }
                        description
                          "Configure the subsequent prefix length.";
                      }
                    }  // case shared
    
                    case unshared {
                      description
                        "Configure initial, subsequent and delegating prefix lengths for a unshared dynamic prefix pool.";
                      leaf unshared-initial {
                        type uint8 {
                          range "3..127";
                        }
                        mandatory true;
                        description
                          "Configure the initial prefix length.";
                      }
    
                      leaf unshared-extend {
                        ext:dynamic-default {
                          ext:default-value "../unshared-initial" {
                            description "The default value is equal to initial length.";
                          }
                        }
                        type uint8 {
                          range "3..127";
                        }
                        description
                          "Configure the subsequent prefix length.";
                      }
    
                      leaf unshared-delegating {
                        type uint8 {
                          range "3..127";
                        }
                        default "64";
                        description
                          "Configure the delegating prefix length.";
                      }
    
                      container slaac-unshare-only {
                        description
                          "Configure the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (SLAAC) protocol.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (SLAAC) protocol.";
                        }
                      }  // container slaac-unshare-only
    
                      container pd-unshare-only {
                        description
                          "Configure the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (DHCPv6 IA_PD) protocol.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the prefix pool to allocate IP addresses by using only the unshared-mode stateless address autoconfiguration (DHCPv6 IA_PD) protocol.";
                        }
                      }  // container pd-unshare-only
                    }  // case unshared
                  }  // choice share-mode
                }  // container prefix-length
    
                container vpn-instance {
                  description
                    "Configure the VPN instance name of a IPv6 prefix pool.";
                  leaf name {
                    type leafref {
                      path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                    }
                    must
                      "/ni:network-instance/ni:instances/ni:instance[ni:name=current()]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] and ../name != '_public_'";
                    description
                      "Specify the VPN instance name of a IPv6 prefix pool.";
                  }
                }  // container vpn-instance
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
    
                container bind-up-authorization-group {
                  description
                    "Configure the UP authorization group bound to the dynamic prefix pool.";
                  leaf name {
                    type leafref {
                      path "/bras-cu-controller:bras-cu-controller/bras-ipv4-address-manage:ipv4-address-manage/bras-ipv4-address-manage:up-authorization-groups/bras-ipv4-address-manage:up-authorization-group/bras-ipv4-address-manage:name";
                    }
                    must
                      "count(/bras-cu-controller:bras-cu-controller/bras-ipv4-address-manage:ipv4-address-manage/bras-ipv4-address-manage:up-authorization-groups/bras-ipv4-address-manage:up-authorization-group[bras-ipv4-address-manage:name=current()]/bras-ipv4-address-manage:ups/bras-ipv4-address-manage:up) >= 1";
                    description
                      "Specify the name of the UP authorization group bound to the dynamic prefix pool.";
                  }
                }  // container bind-up-authorization-group
              }  // container dynamic
            }  // list ipv6-prefix
          }  // container ipv6-prefixs
    
          container ipv6-pools {
            description
              "List of IPv6 address pools.";
            list ipv6-pool {
              key "name";
              max-elements 16384;
              description
                "Configure an IPv6 address pool.";
              leaf name {
                ext:case-sensitivity "lower-only";
                type string {
                  length "1..32";
                  pattern '[a-z0-9._-]{1,32}';
                }
                must
                  "../name != '-' and ../name != '--'";
                description
                  "Specify the name of an IPv6 address pool.";
              }
    
              leaf type {
                ext:operation-exclude "update";
                type pool-type;
                mandatory true;
                description
                  "Specify the type of the IPv6 address pool, and the type cannot be modified.";
              }
    
              leaf rui-slave {
                ext:operation-exclude "update|delete";
                when "not(../type = 'relay')";
                type boolean;
                default "false";
                description
                  "Enable/disable a hybrid IP address pool that can be used as a local address pool or remote address pool or delegation address pool. The rui-slave cannot be modified.";
              }
    
              container local {
                when "../type = 'local'";
                description
                  "Configure a local IPv6 address pool.";
                container bind-prefix {
                  description
                    "Configure binding an IPv6 prefix pool to an IPv6 address pool.";
                  leaf prefix-name {
                    type leafref {
                      path "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix/bras-ipv6-address-manage:name";
                    }
                    must
                      "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix[name=current()]/bras-ipv6-address-manage:type ='local'";
                    description
                      "Bind an IPv6 prefix pool to an IPv6 address pool.";
                  }
                }  // container bind-prefix
    
                container dns-server {
                  must
                    "not(./ipv6-address1) or not(./ipv6-address2) or ./ipv6-address1!=./ipv6-address2";
                  description
                    "Configure an IPv6 address for binding a DNS server to an IPv6 address pool.";
                  leaf ipv6-address1 {
                    type inet:ipv6-address-no-zone;
                    description
                      "Specify the first IPv6 address of a DNS server.";
                  }
    
                  leaf ipv6-address2 {
                    type inet:ipv6-address-no-zone;
                    description
                      "Specify the second IPv6 address of a DNS server.";
                  }
                }  // container dns-server
    
                container dns-search-list {
                  description
                    "Configure a domain name suffix.";
                  leaf name {
                    type string {
                      length "1..32";
                      pattern
                        '[a-zA-Z0-9._-]{1,32}';
                    }
                    must
                      "../name != '-' and ../name != '--'";
                    description
                      "Specify the domain name suffix.";
                  }
                }  // container dns-search-list
    
                container renew-rebind-time {
                  must
                    "./rebind-time-percent >= ./renew-time-percent + 10";
                  description
                    "Configure the renewal time of an IPv6 address pool. renew-time-percent is the percentage of the renewal time to the preferred lifetime.";
                  leaf renew-time-percent {
                    type uint8 {
                      range "10..99";
                    }
                    units "%";
                    default "50";
                    description
                      "Set the renewal time and rebinding time of an IPv6 address pool.";
                  }
    
                  leaf rebind-time-percent {
                    type uint8 {
                      range "10..99";
                    }
                    units "%";
                    default "80";
                    description
                      "Specify the rebinding time of an IPv6 address pool. rebind-time-percent is the percentage of the rebinding time to the preferred lifetime.";
                  }
                }  // container renew-rebind-time
    
                container rapid-commit {
                  description
                    "Configure the DHCPv6 server to support a rapid two-message exchange (solicit, reply).";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable rapid commit.";
                  }
                }  // container rapid-commit
    
                container weight {
                  when
                    "../../rui-slave = 'true'";
                  description
                    "Configure a weight for an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..100";
                    }
                    default "5";
                    description
                      "Specify a weight for an IPv6 address pool.";
                  }
                }  // container weight
    
                container preference {
                  description
                    "Configure the preference value of an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..255";
                    }
                    default "255";
                    description
                      "Specify the preference value of an IPv6 address pool.";
                  }
                }  // container preference
    
                container lock {
                  presence "Create lock pool";
                  description
                    "Enable/disable an IPv6 address pool.";
                  leaf drain {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable an IPv6 address pool. If it is disable, the address pool cannot be used to assign IPv6 addresses to new users and DHCP renew or rebind.";
                  }
                }  // container lock
    
                container wait-request-time {
                  description
                    "Configure the timeout period for a router to wait for a request message from a client in response to an advertise message sent to the client.";
                  leaf value {
                    type uint8 {
                      range "5..60";
                    }
                    units "s";
                    description
                      "Specify the timeout period for a router to wait for a request message from a client.";
                  }
                }  // container wait-request-time
    
                container warning {
                  description
                    "Configure warning of IPv6 address usage.";
                  leaf threshold-value {
                    type uint8 {
                      range "0..100";
                    }
                    default "80";
                    description
                      "The alarm threshold for the address usage of an IPv6 address pool is a percentage.";
                  }
    
                  leaf exhaust {
                    type empty;
                    description
                      "Enable the address exhaustion alarm function for an IPv6 address pool.";
                  }
                }  // container warning
    
                container unr-tag {
                  description
                    "Configure a route tag for an IPv6 address pool.";
                  leaf value {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Specify the route tag for the IPv6 address pool.";
                  }
                }  // container unr-tag
    
                container aftr {
                  description
                    "Configure an Address Family Transition Router (AFTR) name.";
                  leaf name {
                    type string {
                      length "1..63";
                      pattern
                        '[a-zA-Z0-9._-]{1,63}';
                    }
                    must
                      "../name != '-' and ../name != '--'";
                    description
                      "Specify an AFTR name.";
                  }
                }  // container aftr
    
                container export-host-route {
                  description
                    "Configure a device to advertise host routes in a remote address pool.";
                  leaf ipv6-address {
                    type empty;
                    description
                      "Advertise IPv6 routes.";
                  }
                }  // container export-host-route
    
                container unicast-option {
                  description
                    "Configure server unicast option.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable server unicast option.";
                  }
                }  // container unicast-option
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
              }  // container local
    
              container delegation {
                when "../type = 'delegation'";
                description
                  "Configure a delegation IPv6 address pool.";
                container bind-prefix {
                  description
                    "Configure binding an IPv6 prefix pool to an IPv6 address pool.";
                  leaf prefix-name {
                    type leafref {
                      path "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix/bras-ipv6-address-manage:name";
                    }
                    must
                      "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix[name=current()]/bras-ipv6-address-manage:type ='delegation'";
                    description
                      "Bind an IPv6 prefix pool to an IPv6 address pool.";
                  }
                }  // container bind-prefix
    
                container dns-server {
                  must
                    "not(./ipv6-address1) or not(./ipv6-address2) or ./ipv6-address1!=./ipv6-address2";
                  description
                    "Configure an IPv6 address for binding a DNS server to an IPv6 address pool.";
                  leaf ipv6-address1 {
                    type inet:ipv6-address-no-zone;
                    description
                      "Specify the first IPv6 address of a DNS server.";
                  }
    
                  leaf ipv6-address2 {
                    type inet:ipv6-address-no-zone;
                    description
                      "Specify the second IPv6 address of a DNS server.";
                  }
                }  // container dns-server
    
                container dns-search-list {
                  description
                    "Configure a domain name suffix.";
                  leaf name {
                    type string {
                      length "1..32";
                      pattern
                        '[a-zA-Z0-9._-]{1,32}';
                    }
                    must
                      "../name != '-' and ../name != '--'";
                    description
                      "Specify the domain name suffix.";
                  }
                }  // container dns-search-list
    
                container renew-rebind-time {
                  must
                    "./rebind-time-percent >= ./renew-time-percent + 10";
                  description
                    "Configure the renewal time of an IPv6 address pool. renew-time-percent is the percentage of the renewal time to the preferred lifetime.";
                  leaf renew-time-percent {
                    type uint8 {
                      range "10..99";
                    }
                    units "%";
                    default "50";
                    description
                      "Set the renewal time and rebinding time of an IPv6 address pool.";
                  }
    
                  leaf rebind-time-percent {
                    type uint8 {
                      range "10..99";
                    }
                    units "%";
                    default "80";
                    description
                      "Specify the rebinding time of an IPv6 address pool. rebind-time-percent is the percentage of the rebinding time to the preferred lifetime.";
                  }
                }  // container renew-rebind-time
    
                container rapid-commit {
                  description
                    "Configure the DHCPv6 server to support a rapid two-message exchange (solicit, reply).";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable rapid commit.";
                  }
                }  // container rapid-commit
    
                container weight {
                  when
                    "../../rui-slave = 'true'";
                  description
                    "Configure a weight for an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..100";
                    }
                    default "5";
                    description
                      "Specify a weight for an IPv6 address pool.";
                  }
                }  // container weight
    
                container preference {
                  description
                    "Configure the preference value of an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..255";
                    }
                    default "255";
                    description
                      "Specify the preference value of an IPv6 address pool.";
                  }
                }  // container preference
    
                container lock {
                  presence "Create lock pool";
                  description
                    "Enable/disable an IPv6 address pool.";
                  leaf drain {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable an IPv6 address pool. If it is disable, the address pool cannot be used to assign IPv6 addresses to new users and DHCP renew or rebind.";
                  }
                }  // container lock
    
                container wait-request-time {
                  description
                    "Configure the timeout period for a router to wait for a request message from a client in response to an advertise message sent to the client.";
                  leaf value {
                    type uint8 {
                      range "5..60";
                    }
                    units "s";
                    description
                      "Specify the timeout period for a router to wait for a request message from a client.";
                  }
                }  // container wait-request-time
    
                container warning {
                  description
                    "Configure warning of IPv6 address usage.";
                  leaf threshold-value {
                    type uint8 {
                      range "0..100";
                    }
                    default "80";
                    description
                      "The alarm threshold for the address usage of an IPv6 address pool is a percentage.";
                  }
    
                  leaf exhaust {
                    type empty;
                    description
                      "Enable the address exhaustion alarm function for an IPv6 address pool.";
                  }
                }  // container warning
    
                container unr-tag {
                  description
                    "Configure a route tag for an IPv6 address pool.";
                  leaf value {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Specify the route tag for the IPv6 address pool.";
                  }
                }  // container unr-tag
    
                container aftr {
                  description
                    "Configure an Address Family Transition Router (AFTR) name.";
                  leaf name {
                    type string {
                      length "1..63";
                      pattern
                        '[a-zA-Z0-9._-]{1,63}';
                    }
                    must
                      "../name != '-' and ../name != '--'";
                    description
                      "Specify an AFTR name.";
                  }
                }  // container aftr
    
                container export-host-route {
                  description
                    "Configure a device to advertise host routes in a remote address pool.";
                  leaf ipv6-address {
                    type empty;
                    description
                      "Advertise IPv6 routes.";
                  }
    
                  leaf pd-prefix {
                    type empty;
                    description
                      "Advertise PD routes.";
                  }
    
                  leaf nd-prefix {
                    type empty;
                    description
                      "Advertise ND routes.";
                  }
                }  // container export-host-route
    
                container unicast-option {
                  description
                    "Configure server unicast option.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable server unicast option.";
                  }
                }  // container unicast-option
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
              }  // container delegation
    
              container remote {
                when "../type = 'remote'";
                description
                  "Configure a remote IPv6 address pool.";
                container bind-prefix {
                  description
                    "Configure binding an IPv6 prefix pool to an IPv6 address pool.";
                  leaf prefix-name {
                    type leafref {
                      path "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix/bras-ipv6-address-manage:name";
                    }
                    must
                      "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix[name=current()]/bras-ipv6-address-manage:type ='remote'";
                    description
                      "Bind an IPv6 prefix pool to an IPv6 address pool.";
                  }
                }  // container bind-prefix
    
                container weight {
                  description
                    "Configure a weight for an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..100";
                    }
                    default "5";
                    description
                      "Specify a weight for an IPv6 address pool.";
                  }
                }  // container weight
    
                container preference {
                  description
                    "Configure the preference value of an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..255";
                    }
                    default "255";
                    description
                      "Specify the preference value of an IPv6 address pool.";
                  }
                }  // container preference
    
                container lock {
                  presence "Create lock pool";
                  description
                    "Enable/disable an IPv6 address pool.";
                  leaf drain {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable an IPv6 address pool. If it is disable, the address pool cannot be used to assign IPv6 addresses to new users and DHCP renew or rebind.";
                  }
                }  // container lock
    
                container wait-request-time {
                  description
                    "Configure the timeout period for a router to wait for a request message from a client in response to an advertise message sent to the client.";
                  leaf value {
                    type uint8 {
                      range "5..60";
                    }
                    units "s";
                    description
                      "Specify the timeout period for a router to wait for a request message from a client.";
                  }
                }  // container wait-request-time
    
                container warning {
                  description
                    "Configure warning of IPv6 address usage.";
                  leaf threshold-value {
                    type uint8 {
                      range "0..100";
                    }
                    default "80";
                    description
                      "The alarm threshold for the address usage of an IPv6 address pool is a percentage.";
                  }
    
                  leaf exhaust {
                    type empty;
                    description
                      "Enable the address exhaustion alarm function for an IPv6 address pool.";
                  }
                }  // container warning
    
                container unr-tag {
                  description
                    "Configure a route tag for an IPv6 address pool.";
                  leaf value {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Specify the route tag for the IPv6 address pool.";
                  }
                }  // container unr-tag
    
                container export-host-route {
                  description
                    "Configure a device to advertise host routes in a remote address pool.";
                  leaf ipv6-address {
                    type empty;
                    description
                      "Advertise IPv6 routes.";
                  }
    
                  leaf pd-prefix {
                    type empty;
                    description
                      "Advertise PD routes.";
                  }
    
                  leaf nd-prefix {
                    type empty;
                    description
                      "Advertise ND routes.";
                  }
                }  // container export-host-route
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
    
                container dhcpv6-server-group {
                  description
                    "Configure the DHCPv6 server group for this IPv6 address pool.";
                  leaf name {
                    type leafref {
                      path "/bras-dhcpv6-server:bras-dhcpv6-server/bras-dhcpv6-server:dhcpv6-server-groups/bras-dhcpv6-server:dhcpv6-server-group/bras-dhcpv6-server:name";
                    }
                    description
                      "The DHCPv6 server group name.";
                  }
                }  // container dhcpv6-server-group
              }  // container remote
    
              container relay {
                when "../type = 'relay'";
                description
                  "Configure a relay IPv6 address pool.";
                container bind-prefix {
                  description
                    "Configure binding an IPv6 prefix pool to an IPv6 address pool.";
                  leaf prefix-name {
                    type leafref {
                      path "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix/bras-ipv6-address-manage:name";
                    }
                    must
                      "/bras-ipv6-address-manage:bras-ipv6-address-manage/bras-ipv6-address-manage:ipv6-prefixs/bras-ipv6-address-manage:ipv6-prefix[name=current()]/bras-ipv6-address-manage:type ='local'";
                    description
                      "Bind an IPv6 prefix pool to an IPv6 address pool.";
                  }
                }  // container bind-prefix
    
                container dns-server {
                  must
                    "not(./ipv6-address1) or not(./ipv6-address2) or ./ipv6-address1!=./ipv6-address2";
                  description
                    "Configure an IPv6 address for binding a DNS server to an IPv6 address pool.";
                  leaf ipv6-address1 {
                    type inet:ipv6-address-no-zone;
                    description
                      "Specify the first IPv6 address of a DNS server.";
                  }
    
                  leaf ipv6-address2 {
                    type inet:ipv6-address-no-zone;
                    description
                      "Specify the second IPv6 address of a DNS server.";
                  }
                }  // container dns-server
    
                container dns-search-list {
                  description
                    "Configure a domain name suffix.";
                  leaf name {
                    type string {
                      length "1..32";
                      pattern
                        '[a-zA-Z0-9._-]{1,32}';
                    }
                    must
                      "../name != '-' and ../name != '--'";
                    description
                      "Specify the domain name suffix.";
                  }
                }  // container dns-search-list
    
                container renew-rebind-time {
                  must
                    "./rebind-time-percent >= ./renew-time-percent + 10";
                  description
                    "Configure the renewal time of an IPv6 address pool. renew-time-percent is the percentage of the renewal time to the preferred lifetime.";
                  leaf renew-time-percent {
                    type uint8 {
                      range "10..99";
                    }
                    units "%";
                    default "50";
                    description
                      "Set the renewal time and rebinding time of an IPv6 address pool.";
                  }
    
                  leaf rebind-time-percent {
                    type uint8 {
                      range "10..99";
                    }
                    units "%";
                    default "80";
                    description
                      "Specify the rebinding time of an IPv6 address pool. rebind-time-percent is the percentage of the rebinding time to the preferred lifetime.";
                  }
                }  // container renew-rebind-time
    
                container rapid-commit {
                  description
                    "Configure the DHCPv6 server to support a rapid two-message exchange (solicit, reply).";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable rapid commit.";
                  }
                }  // container rapid-commit
    
                container preference {
                  description
                    "Configure the preference value of an IPv6 address pool.";
                  leaf value {
                    type uint8 {
                      range "0..255";
                    }
                    default "255";
                    description
                      "Specify the preference value of an IPv6 address pool.";
                  }
                }  // container preference
    
                container lock {
                  presence "Create lock pool";
                  description
                    "Enable/disable an IPv6 address pool.";
                  leaf drain {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable an IPv6 address pool. If it is disable, the address pool cannot be used to assign IPv6 addresses to new users and DHCP renew or rebind.";
                  }
                }  // container lock
    
                container wait-request-time {
                  description
                    "Configure the timeout period for a router to wait for a request message from a client in response to an advertise message sent to the client.";
                  leaf value {
                    type uint8 {
                      range "5..60";
                    }
                    units "s";
                    description
                      "Specify the timeout period for a router to wait for a request message from a client.";
                  }
                }  // container wait-request-time
    
                container warning {
                  description
                    "Configure warning of IPv6 address usage.";
                  leaf threshold-value {
                    type uint8 {
                      range "0..100";
                    }
                    default "80";
                    description
                      "The alarm threshold for the address usage of an IPv6 address pool is a percentage.";
                  }
    
                  leaf exhaust {
                    type empty;
                    description
                      "Enable the address exhaustion alarm function for an IPv6 address pool.";
                  }
                }  // container warning
    
                container unr-tag {
                  description
                    "Configure a route tag for an IPv6 address pool.";
                  leaf value {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Specify the route tag for the IPv6 address pool.";
                  }
                }  // container unr-tag
    
                container unicast-option {
                  description
                    "Configure server unicast option.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable server unicast option.";
                  }
                }  // container unicast-option
    
                container constant-index {
                  config false;
                  description
                    "Statistics of a constant index for an IPv6 address or prefix pool.";
                  leaf value {
                    type uint16 {
                      range "0..16383";
                    }
                    description
                      "Specify an index for an IPv6 address or prefix pool.";
                  }
                }  // container constant-index
              }  // container relay
    
              container usage {
                config false;
                description
                  "Display the usage statistics for IPv6 address pool.";
                leaf vpn-instance {
                  ext:support-filter "true";
                  type leafref {
                    path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                  }
                  description
                    "Specify the VPN instance name.";
                }
    
                leaf address-total-number {
                  type uint32;
                  description
                    "Total number of IPv6 address.";
                }
    
                leaf address-used-number {
                  type uint32;
                  description
                    "Used number of IPv6 address.";
                }
    
                leaf address-used-radio {
                  type uint32;
                  description
                    "IPv6 address usage (in percentage).";
                }
    
                leaf ndra-total-number {
                  type uint32;
                  description
                    "Total number of in-use unshare NDRA prefixs.";
                }
    
                leaf ndra-used-number {
                  type uint32;
                  description
                    "Used number of in-use unshare NDRA prefixs.";
                }
    
                leaf ndra-used-radio {
                  type uint32;
                  description
                    "Usage (in percentage) of unshared NDRA prefixes.";
                }
    
                leaf delegation-total-number {
                  type uint32;
                  description
                    "Total number of delegation prefixs.";
                }
    
                leaf delegation-used-number {
                  type uint32;
                  description
                    "Used number of delegation prefixs.";
                }
    
                leaf delegation-used-radio {
                  type uint32;
                  description
                    "Usage (in percentage) of delegation prefixes.";
                }
              }  // container usage
    
              container statistic {
                config false;
                description
                  "Display the IPv6 address or prefix statistics.";
                leaf pool-index {
                  type int32 {
                    range "0..16383";
                  }
                  description
                    "The index of IPv6 pool.";
                }
    
                leaf address-idle-total-number {
                  type int32;
                  description
                    "Number of idle IPv6 addresses on the equipment.";
                }
    
                leaf address-used-total-number {
                  type int32;
                  description
                    "Number of IPv6 addresses in use on the equipment.";
                }
    
                leaf prefix-idle-total-number {
                  type int32;
                  description
                    "Number of idle IPv6 prefixes on the equipment.";
                }
    
                leaf prefix-used-total-number {
                  type int32;
                  description
                    "Number of IPv6 prefixes in use on the equipment.";
                }
    
                leaf address-total-number {
                  type int32;
                  description
                    "The total IPv6 address number.";
                }
    
                leaf address-used-number {
                  type int32;
                  description
                    "The used IPv6 address number.";
                }
    
                leaf address-idle-number {
                  type int32;
                  description
                    "The free IPv6 address number.";
                }
    
                leaf address-conflict-number {
                  type int32;
                  description
                    "The conflict IPv6 address number.";
                }
    
                leaf address-excluded-number {
                  type int32;
                  description
                    "The excluded IPv6 address number.";
                }
    
                leaf address-used-percent {
                  type int32;
                  description
                    "The percent of used IPv6 address.";
                }
    
                leaf ndra-total-number {
                  type int32;
                  description
                    "The total NDRA prefix number.";
                }
    
                leaf ndra-used-number {
                  type int32;
                  description
                    "The used NDRA prefix number.";
                }
    
                leaf ndra-free-number {
                  type int32;
                  description
                    "The free NDRA prefix number.";
                }
    
                leaf ndra-conflict-number {
                  type int32;
                  description
                    "The conflict NDRA prefix number.";
                }
    
                leaf ndra-excluded-number {
                  type int32;
                  description
                    "The excluded NDRA prefix number.";
                }
    
                leaf ndra-used-percent {
                  type int32;
                  description
                    "The percent of used IPv6 NDRA prefix.";
                }
    
                leaf pd-total-number {
                  type int32;
                  description
                    "The total PD prefix number.";
                }
    
                leaf pd-used-number {
                  type int32;
                  description
                    "The used PD prefix number.";
                }
    
                leaf pd-free-number {
                  type int32;
                  description
                    "The free PD prefix number.";
                }
    
                leaf pd-conflict-number {
                  type int32;
                  description
                    "The conflict PD prefix number.";
                }
    
                leaf pd-excluded-number {
                  type int32;
                  description
                    "The excluded PD prefix number.";
                }
    
                leaf pd-used-percent {
                  type int32;
                  description
                    "The percent of used IPv6 PD prefix.";
                }
              }  // container statistic
            }  // list ipv6-pool
          }  // container ipv6-pools
    
          container ipv6-unr-route-tag {
            description
              "Configure route tags for IPv6 users.";
            leaf delegated-ipv6-prefix-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for PD IPv6 addresses delivered by a RADIUS server.";
            }
    
            leaf delegated-pool-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for delegation IPv6 address pools.";
            }
    
            leaf framed-ipv6-address-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for IA_NA IPv6 addresses delivered by a RADIUS server.";
            }
    
            leaf framed-ipv6-prefix-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for ND IPv6 addresses delivered by a RADIUS server.";
            }
    
            leaf framed-ipv6-route-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for IPv6 route addresses delivered by a RADIUS server.";
            }
    
            leaf local-pool-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for local IPv6 address pools.";
            }
    
            leaf relay-pool-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for relay IPv6 address pools.";
            }
    
            leaf remote-pool-tag {
              type uint32;
              default "0";
              description
                "Set a route tag for remote IPv6 address pools.";
            }
          }  // container ipv6-unr-route-tag
    
          container address-assign-eui-64 {
            description
              "Configure an interface ID to be in the standard EUI-64 format when DHCPv6 is used to allocate addresses.";
            leaf enable {
              type boolean;
              default "false";
              description
                "Enable/disable an interface ID to be in the standard EUI-64 format when DHCPv6 is used to allocate addresses.";
            }
          }  // container address-assign-eui-64
    
          container statistic-include-shared-user {
            description
              "Configure the IPv6 address pool statistics to include statistics about users sharing the prefix pool.";
            leaf enable {
              type boolean;
              default "false";
              description
                "Enable/disable the IPv6 address pool statistics to include statistics about users sharing the prefix pool.";
            }
          }  // container statistic-include-shared-user
    
          container pool-select-algorithm {
            must
              "not (./remote-loading-share = 'true' and ./remote-round-robin = 'true')";
            description
              "Configure a device to assign addresses from IPv6 remote address pools based on weights of the address pools.";
            leaf remote-loading-share {
              type boolean;
              default "false";
              description
                "Enable/disable a device to assign addresses from IPv6 remote address pools based on weights of the address pools.";
            }
    
            leaf remote-round-robin {
              type boolean;
              default "false";
              description
                "Enable/disable the round robin algorithm for remote IPv6 address pool.";
            }
    
            leaf local-round-robin {
              type boolean;
              default "false";
              description
                "Enable/disable the round robin algorithm for local IPv6 address pool.";
            }
          }  // container pool-select-algorithm
    
          container auto-block {
            description
              "Configure automatic isolation of IPv6 prefix pools.";
            leaf enable {
              type boolean;
              default "true";
              description
                "Enable/disable automatic isolation of IPv6 prefix pools.";
            }
    
            leaf slave-switch {
              type boolean;
              default "true";
              description
                "Enable/disable the switchover function for IPv6 prefix pool isolation.";
            }
          }  // container auto-block
    
          container import-ribs {
            description
              "List of bas unr import-ribs policy.";
            list import-rib {
              must
                "not(./source-vpn-instance=./destination-vpn-instance)";
              key "source-vpn-instance destination-vpn-instance";
              max-elements 256;
              description
                "Configure a bas unr import-ribs policy.";
              leaf source-vpn-instance {
                type leafref {
                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                }
                must
                  "/ni:network-instance/ni:instances/ni:instance[ni:name=current()]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] or ../source-vpn-instance='_public_'";
                description
                  "The name of source vpn-instance.";
              }
    
              leaf destination-vpn-instance {
                type leafref {
                  path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                }
                must
                  "/ni:network-instance/ni:instances/ni:instance[ni:name=current()]/l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] or ../destination-vpn-instance='_public_'";
                description
                  "The name of destination vpn-instance.";
              }
            }  // list import-rib
          }  // container import-ribs
    
          container statistics-by-domains {
            config false;
            description
              "List of domain-based statistics.";
            list statistics-by-domain {
              key "domain-name";
              description
                "Domain-based statistics.";
              leaf domain-name {
                type leafref {
                  path "/aaa:aaa/aaa:domains/aaa:domain/aaa:name";
                }
                description
                  "Specify the name of a domain.";
              }
    
              container pool-usage {
                description
                  "Display the statistics for IPv6 address pool usage.";
                leaf address-total-number {
                  type uint32;
                  description
                    "Total number of IPv6 address.";
                }
    
                leaf address-used-number {
                  type uint32;
                  description
                    "Used number of IPv6 address.";
                }
    
                leaf address-used-radio {
                  type uint32;
                  description
                    "IPv6 address usage (in percentage).";
                }
    
                leaf ndra-total-number {
                  type uint32;
                  description
                    "Total number of in-use unshare NDRA prefixs.";
                }
    
                leaf ndra-used-number {
                  type uint32;
                  description
                    "Used number of in-use unshare NDRA prefixs.";
                }
    
                leaf ndra-used-radio {
                  type uint32;
                  description
                    "Usage (in percentage) of unshared NDRA prefixes.";
                }
    
                leaf delegation-total-number {
                  type uint32;
                  description
                    "Total number of delegation prefixs.";
                }
    
                leaf delegation-used-number {
                  type uint32;
                  description
                    "Used number of delegation prefixs.";
                }
    
                leaf delegation-used-radio {
                  type uint32;
                  description
                    "Usage (in percentage) of delegation prefixes.";
                }
              }  // container pool-usage
    
              container cu-pool-usages {
                description
                  "List of statistics for IPv6 addresses pool usage.";
                list cu-pool-usage {
                  key "up-id";
                  description
                    "Display the statistics for IPv6 address pool usage.";
                  leaf up-id {
                    type uint16 {
                      range
                        "1024..2023 | 2048..3047 | 3072..4071 | 4096..5095";
                    }
                    must
                      "(../up-id<=(/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id + 999) and ../up-id>=/bras-cu-controller:bras-cu-controller/bras-cu-controller:global-attribute/bras-cu-controller:up-base-id)";
                    description
                      "The ID of a vBRAS-UP.";
                  }
    
                  leaf address-total-number {
                    type uint32;
                    description
                      "Total number of IPv6 address.";
                  }
    
                  leaf address-used-number {
                    type uint32;
                    description
                      "Used number of IPv6 address.";
                  }
    
                  leaf address-used-radio {
                    type uint32;
                    description
                      "IPv6 address usage (in percentage).";
                  }
    
                  leaf ndra-total-number {
                    type uint32;
                    description
                      "Total number of in-use unshare NDRA prefixs.";
                  }
    
                  leaf ndra-used-number {
                    type uint32;
                    description
                      "Used number of in-use unshare NDRA prefixs.";
                  }
    
                  leaf ndra-used-radio {
                    type uint32;
                    description
                      "Usage (in percentage) of unshared NDRA prefixes.";
                  }
    
                  leaf delegation-total-number {
                    type uint32;
                    description
                      "Total number of delegation prefixs.";
                  }
    
                  leaf delegation-used-number {
                    type uint32;
                    description
                      "Used number of delegation prefixs.";
                  }
    
                  leaf delegation-used-radio {
                    type uint32;
                    description
                      "Usage (in percentage) of delegation prefixes.";
                  }
                }  // list cu-pool-usage
              }  // container cu-pool-usages
    
              container usage-threshold {
                description
                  "Display the statistics for domains whose IPv6 address pool or prefix pool usage exceeds a specified threshold.";
                leaf threshold-type {
                  ext:support-filter "true";
                  type threshold-type;
                  description
                    "Include upper-threshold and lower-threshold.";
                }
    
                leaf address-total-number {
                  type uint32;
                  description
                    "Total number of IPv6 address.";
                }
    
                leaf address-used-number {
                  type uint32;
                  description
                    "Used number of IPv6 address.";
                }
    
                leaf address-used-radio {
                  type uint32;
                  description
                    "IPv6 address usage (in percentage).";
                }
    
                leaf ndra-total-number {
                  type uint32;
                  description
                    "Total number of in-use unshare NDRA prefixs.";
                }
    
                leaf ndra-used-number {
                  type uint32;
                  description
                    "Used number of in-use unshare NDRA prefixs.";
                }
    
                leaf ndra-used-radio {
                  type uint32;
                  description
                    "Usage (in percentage) of unshared NDRA prefixes.";
                }
    
                leaf delegation-total-number {
                  type uint32;
                  description
                    "Total number of delegation prefixs.";
                }
    
                leaf delegation-used-number {
                  type uint32;
                  description
                    "Used number of delegation prefixs.";
                }
    
                leaf delegation-used-radio {
                  type uint32;
                  description
                    "Usage (in percentage) of delegation prefixes.";
                }
              }  // container usage-threshold
            }  // list statistics-by-domain
          }  // container statistics-by-domains
    
          container pool-statistics {
            config false;
            description
              "Statistics of IPv6 pool usage.";
            leaf statistical-unit {
              type pool-usage-type;
              default "domain";
              description "Statistical unit.";
            }
    
            leaf address-total-number {
              type uint32;
              description
                "Total number of IPv6 address.";
            }
    
            leaf address-used-number {
              type uint32;
              description
                "Used number of IPv6 address.";
            }
    
            leaf address-used-radio {
              type uint32;
              description
                "IPv6 address usage (in percentage).";
            }
    
            leaf ndra-total-number {
              type uint32;
              description
                "Total number of in-use unshare NDRA prefixs.";
            }
    
            leaf ndra-used-number {
              type uint32;
              description
                "Used number of in-use unshare NDRA prefixs.";
            }
    
            leaf ndra-used-radio {
              type uint32;
              description
                "Usage (in percentage) of unshared NDRA prefixes.";
            }
    
            leaf delegation-total-number {
              type uint32;
              description
                "Total number of delegation prefixs.";
            }
    
            leaf delegation-used-number {
              type uint32;
              description
                "Used number of delegation prefixs.";
            }
    
            leaf delegation-used-radio {
              type uint32;
              description
                "Usage (in percentage) of delegation prefixes.";
            }
          }  // container pool-statistics
    
          container statistics-by-vpn-instance {
            config false;
            description
              "Display the statistics for IPv6 address pools bound by the vpn-instance.";
            container statistics {
              description
                "List of statistics for IPv6 address pools bound by the vpn-instance.";
              list statistic {
                key "vpn-instance";
                description
                  "Display the statistics for IPv6 address pools bound by the vpn-instance.";
                leaf vpn-instance {
                  type leafref {
                    path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                  }
                  description
                    "Specify the VPN instance name.";
                }
    
                container usage {
                  description
                    "Display the usage statistics for IPv6 address pools bound by vpn-instance.";
                  leaf address-total-number {
                    type uint32;
                    description
                      "Total number of IPv6 address.";
                  }
    
                  leaf address-used-number {
                    type uint32;
                    description
                      "Used number of IPv6 address.";
                  }
    
                  leaf address-used-radio {
                    type uint32;
                    description
                      "IPv6 address usage (in percentage).";
                  }
    
                  leaf ndra-total-number {
                    type uint32;
                    description
                      "Total number of in-use unshare NDRA prefixs.";
                  }
    
                  leaf ndra-used-number {
                    type uint32;
                    description
                      "Used number of in-use unshare NDRA prefixs.";
                  }
    
                  leaf ndra-used-radio {
                    type uint32;
                    description
                      "Usage (in percentage) of unshared NDRA prefixes.";
                  }
    
                  leaf delegation-total-number {
                    type uint32;
                    description
                      "Total number of delegation prefixs.";
                  }
    
                  leaf delegation-used-number {
                    type uint32;
                    description
                      "Used number of delegation prefixs.";
                  }
    
                  leaf delegation-used-radio {
                    type uint32;
                    description
                      "Usage (in percentage) of delegation prefixes.";
                  }
                }  // container usage
    
                container usage-warning-threshold {
                  config false;
                  description
                    "Display the statistics for address pool usage based on a specified VPN instance.";
                  leaf total-number {
                    type int32;
                    description
                      "Total number of IP addresses.";
                  }
    
                  leaf used-number {
                    type int32;
                    description
                      "Number of used IP addresses.";
                  }
    
                  leaf idle-number {
                    type int32;
                    description
                      "Number of idle IP addresses.";
                  }
    
                  leaf conflict-number {
                    type int32;
                    description
                      "Number of conflicting IP addresses.";
                  }
    
                  leaf exclude-number {
                    type int32;
                    description
                      "Number of excluded IP addresses.";
                  }
    
                  leaf used-ratio {
                    type int32;
                    description
                      "IP address usage.";
                  }
                }  // container usage-warning-threshold
              }  // list statistic
            }  // container statistics
    
            container total-usage {
              description
                "Display the usage statistics for IPv6 address pools which are for all vpn-instance.";
              leaf address-total-number {
                type uint32;
                description
                  "Total number of IPv6 address.";
              }
    
              leaf address-used-number {
                type uint32;
                description
                  "Used number of IPv6 address.";
              }
    
              leaf address-used-radio {
                type uint32;
                description
                  "IPv6 address usage (in percentage).";
              }
    
              leaf ndra-total-number {
                type uint32;
                description
                  "Total number of in-use unshare NDRA prefixs.";
              }
    
              leaf ndra-used-number {
                type uint32;
                description
                  "Used number of in-use unshare NDRA prefixs.";
              }
    
              leaf ndra-used-radio {
                type uint32;
                description
                  "Usage (in percentage) of unshared NDRA prefixes.";
              }
    
              leaf delegation-total-number {
                type uint32;
                description
                  "Total number of delegation prefixs.";
              }
    
              leaf delegation-used-number {
                type uint32;
                description
                  "Used number of delegation prefixs.";
              }
    
              leaf delegation-used-radio {
                type uint32;
                description
                  "Usage (in percentage) of delegation prefixes.";
              }
            }  // container total-usage
          }  // container statistics-by-vpn-instance
    
          container global-statistic {
            config false;
            description
              "Statistics of IPv6 pool.";
            leaf total-pool-number {
              type int32;
              description
                "Number of configured IPv6 address pools.";
            }
    
            leaf address-idle-total-number {
              type int32;
              description
                "Number of idle IPv6 addresses on the equipment.";
            }
    
            leaf address-used-total-number {
              type int32;
              description
                "Number of IPv6 addresses in use on the equipment.";
            }
    
            leaf prefix-idle-total-number {
              type int32;
              description
                "Number of idle IPv6 prefixes on the equipment.";
            }
    
            leaf prefix-used-total-number {
              type int32;
              description
                "Number of IPv6 prefixes in use on the equipment.";
            }
    
            leaf address-total-number {
              type int32;
              description
                "The total IPv6 address number.";
            }
    
            leaf address-used-number {
              type int32;
              description
                "The used IPv6 address number.";
            }
    
            leaf address-idle-number {
              type int32;
              description
                "The free IPv6 address number.";
            }
    
            leaf address-conflict-number {
              type int32;
              description
                "The conflict IPv6 address number.";
            }
    
            leaf address-excluded-number {
              type int32;
              description
                "The excluded IPv6 address number.";
            }
    
            leaf address-used-percent {
              type int32;
              description
                "The percent of used IPv6 address.";
            }
    
            leaf ndra-total-number {
              type int32;
              description
                "The total NDRA prefix number.";
            }
    
            leaf ndra-used-number {
              type int32;
              description
                "The used NDRA prefix number.";
            }
    
            leaf ndra-free-number {
              type int32;
              description
                "The free NDRA prefix number.";
            }
    
            leaf ndra-conflict-number {
              type int32;
              description
                "The conflict NDRA prefix number.";
            }
    
            leaf ndra-excluded-number {
              type int32;
              description
                "The excluded NDRA prefix number.";
            }
    
            leaf ndra-used-percent {
              type int32;
              description
                "The percent of used IPv6 NDRA prefix.";
            }
    
            leaf pd-total-number {
              type int32;
              description
                "The total PD prefix number.";
            }
    
            leaf pd-used-number {
              type int32;
              description
                "The used PD prefix number.";
            }
    
            leaf pd-free-number {
              type int32;
              description
                "The free PD prefix number.";
            }
    
            leaf pd-conflict-number {
              type int32;
              description
                "The conflict PD prefix number.";
            }
    
            leaf pd-excluded-number {
              type int32;
              description
                "The excluded PD prefix number.";
            }
    
            leaf pd-used-percent {
              type int32;
              description
                "The percent of used IPv6 PD prefix.";
            }
          }  // container global-statistic
        }  // container bras-ipv6-address-manage
    
        rpc reserved-ipv6-address-or-prefix {
          description
            "Recycle all the reserved addresses or prefixes in the prefix pool.";
          input {
            leaf prefix-name {
              type string {
                length "1..32";
              }
              mandatory true;
              description
                "Specify the prefix name.";
            }
          }
        }  // rpc reserved-ipv6-address-or-prefix
      }  // module huawei-bras-ipv6-address-manage
    

© 2023 YumaWorks, Inc. All rights reserved.