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