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

submodule onf-application {
  belongs-to onf-enterprise { prefix ent; }

  import ietf-inet-types{ prefix ietf; }
  import onf-aether-types{ prefix at; }

  include onf-traffic-class;

  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 "2022-01-14" {
    description "Refactored as submodule";
    reference "RFC 6020";
  }

  revision "2021-09-10" {
    description "Aether Application.";
    reference "RFC 6087";
  }

  typedef application-id {
    type at:aether-identifier;
    description "The typedef for application-id";
  }

  grouping application {
    description "The application grouping";

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

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

      uses at:desc-display-name;

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

      list endpoint {
        key "endpoint-id";
        leaf endpoint-id {
          type at:aether-identifier;
          description
              "Id of this endpoint";
        }

        uses at:desc-display-name;

        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 "../../../traffic-class/traffic-class-id";
          }
          description
            "Link to traffic class";
        }

        description "list for endpoint";
      }
    }
  }
}
