// 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 "template-id";
      description
        "List of slice templates";

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

      uses at:desc-display-name;

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