// 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;
        }
  }

  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";
      }       
    }
  } 
}
