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

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

  import ietf-inet-types{ prefix ietf; }
  import ietf-yang-types{ prefix yg; }
  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 yg:yang-identifier {
            length 1..32;
        }
    description "The typedef for application-id";
  }

  grouping application {
    description "The application grouping";

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

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