AETHER-2874 Bootstrap Aether-2.x models

Change-Id: Ia987596109584df696aaa57703f9148075569422
diff --git a/config-models/aether-2.0.x/files/yang/onf-device-group.yang b/config-models/aether-2.0.x/files/yang/onf-device-group.yang
new file mode 100755
index 0000000..a93c295
--- /dev/null
+++ b/config-models/aether-2.0.x/files/yang/onf-device-group.yang
@@ -0,0 +1,141 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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";
+      }
+    }
+  }
+}