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

module upf {
  namespace "http://opennetworking.org/aether/upf";
  prefix upf;

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

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description "A Aether UPF List is a named User Plane Function.";

  revision "2021-06-02" {
    description "An Aether User Plane Function";
    reference "RFC 6087";
  }

  typedef upf-id {
        type yg:yang-identifier {
            length 1..32;
        }
  }

  container upf {
    description "The top level container";

    list upf {
      key "id";
      description
        "A list of named upfs.";

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

      leaf address {
        type inet:host;
        mandatory true;
        description
          "Address of UPF";
      }

      leaf port {
        type inet:port-number;
        mandatory true;
        description
            "Port for UPF";
      }

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

      // UPFs are always owned by an Enterprise, since they typically exist on the
      // Enterprise's edge. TODO: Consider whether they should be owned by a Site
      // instead of Enterprise.
      leaf enterprise {
        type leafref {
          path "/ent:enterprise/ent:enterprise/ent:id";
        }
        mandatory true;
        description
          "Link to enterprise that owns this Access Point List";
      }      
    }
  } 
}
