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

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

  import onf-aether-types{ prefix at; }

  include onf-upf;
  include onf-device-group;
  include onf-application;
  include onf-priority-traffic-rule;

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether Slice is
     used to connect devices with applications";

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

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

  typedef slice-id {
    type at:aether-identifier;
    description "The typedef for slice-id";
  }

  grouping slice {
    description "The slice grouping";

    list slice {
      key "slice-id";
      description
        "List of Slices";

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

      uses at:desc-display-name;

      list device-group {
        key "device-group";
        leaf device-group {
          type leafref {
            path "../../../device-group/device-group-id";
          }
          description
            "Link to device group";
        }
        leaf enable {
          type boolean;
          default true;
          description
            "Enable this device group";
        }
        description
          "A list of device groups. Groups will only participate in
           the Slice if the enable field is set to True";
      }

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

      list filter {
        key "application";
        leaf application {
          type leafref {
            path "../../../../application/application-id";
          }
          mandatory true;
          description
            "Link to application";
        }
        leaf priority {
          type at:priority;
          default 0;
          description
            "Priority of this application";
        }
        leaf allow {
          type boolean;
          default true;
          description
            "Allow or deny this application";
        }
        description
          "A list of applications to allow and/or deny. Rules are executed in
           priority order. The first rule to match will determine the fate
           of the packet.";
      }

      leaf upf {
        type leafref {
          path "../../upf/upf-id";
        }
        description
          "Link to user plane that implements this vcf";
      }

      // the following are populated from the template
      leaf sst {
        type at:sst;
        mandatory true;
        description "Slice/Service type. Immutable.";
      }

      leaf sd {
        type at:sd;
        mandatory true;
        description "Slice differentiator. Immutable.";
      }

      container mbr {
        description "Per slice 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";
        }
      }

      // end of items populated from the template
      uses priority-traffic-rule;

    }
  }
}
