// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module application {
  namespace "http://opennetworking.org/enterprise/application";
  prefix app;

  import ietf-inet-types{ prefix ietf; }
  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 Application is an application that UE devices may
     connect to. Includes a set of endpoints where services are
     provided.";

  revision "2021-06-02" {
    description "Aether Application.";
    reference "RFC 6087";
  }

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

  container application {
    description "The top level container";

    list application {
      key "id";
      description
        "List of applications";

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

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

      list endpoint {
        key "name";
        max-elements 1;
        leaf name {
          type string;
          description
              "Name of this endpoint";
        }
        leaf address {
          type ietf:host;
          mandatory true;
          description
              "Address of this endpoint. Either a hostname, and IP, or a subnet.";
        }
        leaf port-start {
          type ietf:port-number;
          mandatory true;
          description
              "First port in range";
        }
        leaf port-end {
          type ietf:port-number;
          description
              "Last port in range";
        }
        leaf protocol {
          type at:protocol;
          description
              "Name of this endpoint";
        }
        description "The list for endpoints";
      }

      leaf enterprise {
        type leafref {
          path "/ent:enterprise/ent:enterprise/ent:id";
        }
        mandatory true;
        description
          "Link to enterprise that owns this Application. May be set to None if the application is global to all Enterprises.";
      }
    }
  }
}
