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

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

  import ietf-inet-types{ prefix ietf; }
  import ietf-yang-types{ prefix yg; }
  import onf-aether-types{ prefix at; }
  import onf-enterprise{ prefix ent; }
  import onf-traffic-class{ prefix tc; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether Application is an application that devices may
     connect to. Includes a set of endpoints where services are
     provided.";

  revision "2021-09-10" {
    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";
      }

      leaf address {
        type ietf:host;
        mandatory true;
        description
            "Address of this application. Either a hostname, an IP, or a subnet.";
      }

      list endpoint {
        key "endpoint-id";
        leaf endpoint-id {
          type yg:yang-identifier;
          description
              "Id of this endpoint";
        }
        leaf port-start {
          type ietf:port-number;
          description
              "First port in range";
        }
        leaf port-end {
          type ietf:port-number;
          description
              "Last port in range";
        }
        leaf protocol {
          type at:protocol;
          description
              "Protocol of this endpoint";
        }
        container mbr {
          description "Maximum bitrate";
          leaf uplink {
            type at:bitrate;
            units bps;
            description "Per-Device per-Application MBR uplink data rate in bps";
          }

          leaf downlink {
            type at:bitrate;
            units bps;
            description "Per-Device per application MBR downlink data rate in bps";
          }
        }
        leaf traffic-class {
          type leafref {
            path "/tc:traffic-class/tc:traffic-class/tc:id";
          }
          description
            "Link to traffic class";
        }
        leaf display-name {
          type string {
              length 1..80;
          }
          description "display name to use in GUI or CLI";
        }
        description "list for endpoint";
      }

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