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

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

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

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "The aether slice-template holds common parameters used
     by a Slice. Templates are used to
     populate a Slice.";

  revision "2022-01-14" {
    description "Refactored as submodule";
    reference "RFC 6020";
  }

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

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

  grouping template {
    description "The template grouping";

    list template {
      key "tp-id";
      description
        "List of slice templates";

      leaf tp-id {
        type template-id;
        description "ID for this slice 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 mbr {
        description "Per-Slice QOS Settings Maximum Bit Rate";
        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 slice template";
      }
    }
  }
}
