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

module onf-device-group {
  namespace "http://opennetworking.org/aether/device-group";
  prefix dg;

  import ietf-yang-types{ prefix yg; }
  import onf-aether-types { prefix at; }
  import onf-ip-domain{ prefix ipd; }
  import onf-site{ prefix st; }
  import onf-traffic-class{ prefix tc; }

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

  container device-group {
    description "The top level container";

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

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

      leaf description {
        type at:description;
        description "description of this device group";
      }

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      list imsis {
        // TODO: imsi-range-from cannot be used as a list index
        key "imsi-id";
        leaf imsi-id {
          type yg:yang-identifier;
          description
              "Id of this imsi-range";
        }
        leaf imsi-range-from {
          type uint64;
          description
              "value of imsi-range-from";
        }
        leaf imsi-range-to {
          type uint64;
          description
              "value of imsi-range-to";
        }
        leaf display-name {
          type string {
              length 1..80;
          }
          description "display name to use in GUI or CLI";
        }
        description
          "List of imsi ranges that comprise this group. It's acceptable for
           a range to degenerate to being a singleton";
      }

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

      container device {
        description "Per-device QOS Settings";
        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 "/tc:traffic-class/tc:traffic-class/tc:id";
          }
          mandatory true;
          description
            "Link to traffic class";
        }
      }

      leaf site {
        type leafref {
          path "/st:site/st:site/st:id";
        }
        mandatory true;
        description
          "Link to site";
      }
    }
  }
}
