// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.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";
      }
    }
  }
}
