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

submodule onf-device-group {
  belongs-to onf-enterprise { prefix ent; }

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

  include onf-ip-domain;
  include onf-traffic-class;
  include onf-device;

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An aether device group represents a list of device IMSIS.
     This list is expressed as a set of ranges,
         [(from_imsi, to_imsi),
          (from_imsi, to_imsi),
          ...].
     Each device group belongs to a site and has associated
     with it an ip-profile that determines the IP address
     and DNS settings that apply to devices within the
     group";

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

  revision "2021-06-02" {
    description "An Aether Device Group";
    reference "RFC 6087";
  }

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

  grouping device-group {
    description "The device-group grouping";

    list device-group {
      key "device-group-id";
      description
        "List of device groups";

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

      uses at:desc-display-name;

      list device {
        key "device-id";
        leaf device-id {
          type leafref {
            path "../../../device/device-id";
          }
          description
             "Link to device";
        }
        leaf enable {
          type boolean;
          default true;
          description
            "Enable this device";
        }
        description "list of devices in this device-group";
      }

      leaf ip-domain {
        type leafref {
          path "../../ip-domain/ip-domain-id";
        }
        description
          "Link to ip-domain settings that determine the pool of IP addresses,
           as well as the domain resolver settings to use";
      }

      container mbr {
        description "Maximum bitrate";
        leaf uplink {
          type at:bitrate;
          units bps;
          mandatory true;
          description "Per-device MBR uplink data rate in bps";
        }

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

      leaf traffic-class {
        type leafref {
          path "../../../traffic-class/traffic-class-id";
        }
        mandatory true;
        description
          "Link to traffic class";
      }
    }
  }
}
