// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0

module ap-list {
  namespace "http://opennetworking.org/aether/ap-list";
  prefix apl;

  import ietf-inet-types { prefix inet; }
  import aether-types { prefix at; }
  import enterprise{ prefix ent; }
  import ietf-yang-types{ prefix yg; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether AP List is a named list of access points.";

  revision "2021-06-02" {
    description "An Aether Access Point List";
    reference "RFC 6087";
  }

  typedef ap-list-id {
        type yg:yang-identifier {
            length 1..32;
        }
    description "The typedef ap-list-id";
  }

  container ap-list {
    description "The top level container";

    list ap-list {
      key "id";
      description
        "A list of named ap-lists.";

      leaf id {
        type ap-list-id;
        description "ID for this ap-list.";
      }

      list access-points {
        key "address";
        leaf address {
          type inet:host;
          description
            "Address of access point";
        }
        leaf tac {
          type at:tac;
          mandatory true;
          description
              "Type Allocation Code";
        }
        leaf enable {
          type boolean;
          default true;
          description
            "Enable this access point";
        }
        description
          "List of access point addresses";
      }

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      leaf description {
        type at:description;
        description "description of this ap-list";
      }

      // Access point lists are always owned by an Enterprise, since they typically exist on the
      // Enterprise's edge. An ApList is not owned by Site, to cover the case where a ApList may
      // include access points that span multiple sites.
      leaf enterprise {
        type leafref {
          path "/ent:enterprise/ent:enterprise/ent:id";
        }
        mandatory true;
        description
          "Link to enterprise that owns this Access Point List";
      }
    }
  }
}
