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

module onf-template {
  namespace "http://opennetworking.org/aether/template";
  prefix tp;

  import ietf-yang-types{ prefix yg; }
  import onf-aether-types{ prefix at; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "The aether vcs-template holds common parameters used
     by a virtual connectivity service. Templates are used to
     populate a VCS.";

  revision "2021-09-10" {
    description "An Aether Virtual Cellular Service Template";
    reference "RFC 6087";
  }

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

  container template {
    description "The top level container";

    list template {
      key "id";
      description
        "List of vcs templates";

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

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      leaf sst {
        type at:sst;
        description "Slice/Service type";
      }

      leaf sd {
        type at:sd;
        description "Slice differentiator";
      }

      container slice {
        description "Per-Slice QOS Settings";
        container mbr {
          description "Maximum bitrate";
          leaf uplink {
            type at:bitrate;
            units bps;
            description "Per-Slice MBR uplink data rate in bps";
          }

          leaf downlink {
            type at:bitrate;
            units bps;
            description "Per-Slice MBR downlink data rate in bps";
          }

          leaf uplink-burst-size {
            type at:burst;
            units bytes;
            description "Per-Slice Uplink burst size";
          }

          leaf downlink-burst-size {
            type at:burst;
            units bytes;
            description "Per-Slice Downlink burst size";
          }
        }
      }

      leaf default-behavior {
        type at:behavior;
        mandatory true;
        description
          "Default behavior if no filter rules match";
      }

      leaf description {
        type at:description;
        description "description of this vcs template";
      }
    }
  }
}
