// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
        }
  }

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