AETHER-2752 Priority Traffic Rule, Device, Sim-Card

Change-Id: Ia68c94bcfa67ccf529f0eb0f51faea0566b34ef6
diff --git a/config-models/aether-2.0.x/Chart.yaml b/config-models/aether-2.0.x/Chart.yaml
index fd27292..0a815f3 100644
--- a/config-models/aether-2.0.x/Chart.yaml
+++ b/config-models/aether-2.0.x/Chart.yaml
@@ -4,7 +4,7 @@
 
 apiVersion: v2
 name: config-model-aether-2
-version: 2.0.1
+version: 2.0.2
 kubeVersion: ">=1.18.0"
 appVersion: 2.0.0
 description: Aether config model
diff --git a/config-models/aether-2.0.x/files/aether-2.0.0.tree b/config-models/aether-2.0.x/files/aether-2.0.0.tree
index 32b29fc..6648e7e 100644
--- a/config-models/aether-2.0.x/files/aether-2.0.0.tree
+++ b/config-models/aether-2.0.x/files/aether-2.0.0.tree
@@ -1,3 +1,12 @@
+module: onf-connectivity-service
+  +--rw connectivity-services
+     +--rw connectivity-service* [id]
+        +--rw id                    connectivity-service-id
+        +--rw display-name?         string
+        +--rw description?          at:description
+        +--rw core-5g-endpoint?     inet:uri
+        +--rw acc-prometheus-url?   inet:uri
+
 module: onf-enterprise
   +--rw enterprises
      +--rw enterprise* [ent-id]
@@ -44,8 +53,8 @@
         |  +--rw default-behavior    at:behavior
         |  +--rw description?        at:description
         +--rw site* [site-id]
-           +--rw site-id            site-id
-           +--rw display-name?      string
+           +--rw site-id                  site-id
+           +--rw display-name?            string
            +--rw small-cell* [small-cell-id]
            |  +--rw small-cell-id    yg:yang-identifier
            |  +--rw address?         inet:host
@@ -64,7 +73,32 @@
            |  +--rw mnc           at:mnc
            |  +--rw enterprise    at:ent
            |  +--rw format        string
-           +--rw description?       at:description
+           +--rw description?             at:description
+           +--rw device* [dev-id]
+           |  +--rw dev-id          device-id
+           |  +--rw imei?           at:imei
+           |  +--rw description?    at:description
+           |  +--rw display-name?   string
+           |  +--rw sim-card?       -> ../../sim-card/sim-id
+           +--rw priority-traffic-rule* [ptr-id]
+           |  +--rw ptr-id           priority-traffic-rule-id
+           |  +--rw display-name?    string
+           |  +--rw device           -> ../../device/dev-id
+           |  +--rw endpoint         -> ../../../application/endpoint/endpoint-id
+           |  +--rw mbr
+           |  |  +--rw uplink?     at:bitrate
+           |  |  +--rw downlink?   at:bitrate
+           |  +--rw gbr
+           |  |  +--rw uplink?     at:bitrate
+           |  |  +--rw downlink?   at:bitrate
+           |  +--rw traffic-class?   -> ../../../traffic-class/tc-id
+           |  +--rw description?     at:description
+           +--rw sim-card* [sim-id]
+           |  +--rw sim-id          sim-card-id
+           |  +--rw iccid?          at:iccid
+           |  +--rw description?    at:description
+           |  +--rw display-name?   string
+           |  +--rw imsi?           at:imsi
            +--rw upf* [upf-id]
            |  +--rw upf-id             upf-id
            |  +--rw address            inet:host
@@ -97,17 +131,14 @@
            |  +--rw dg-id           device-group-id
            |  +--rw description?    at:description
            |  +--rw display-name?   string
-           |  +--rw imsis* [imsi-id]
-           |  |  +--rw imsi-id            yg:yang-identifier
-           |  |  +--rw imsi-range-from?   uint64
-           |  |  +--rw imsi-range-to?     uint64
-           |  |  +--rw display-name?      string
+           |  +--rw device* [device-id]
+           |  |  +--rw device-id    -> ../../../device/dev-id
+           |  |  +--rw enable?      boolean
            |  +--rw ip-domain?      -> ../../ip-domain/ip-id
-           |  +--rw device
-           |     +--rw mbr
-           |     |  +--rw uplink      at:bitrate
-           |     |  +--rw downlink    at:bitrate
+           |  +--rw mbr
+           |     +--rw uplink           at:bitrate
            |     +--rw traffic-class    -> ../../../../traffic-class/tc-id
+           |     +--rw downlink         at:bitrate
            +--rw ip-domain* [ip-id]
               +--rw ip-id            ip-domain-id
               +--rw display-name?    string
@@ -119,11 +150,3 @@
               +--rw mtu?             at:mtu
               +--rw description?     at:description
 
-module: onf-connectivity-service
-  +--rw connectivity-services
-     +--rw connectivity-service* [id]
-        +--rw id                    connectivity-service-id
-        +--rw display-name?         string
-        +--rw description?          at:description
-        +--rw core-5g-endpoint?     inet:uri
-        +--rw acc-prometheus-url?   inet:uri
diff --git a/config-models/aether-2.0.x/files/yang/onf-aether-types.yang b/config-models/aether-2.0.x/files/yang/onf-aether-types.yang
index 679648e..908c8b2 100755
--- a/config-models/aether-2.0.x/files/yang/onf-aether-types.yang
+++ b/config-models/aether-2.0.x/files/yang/onf-aether-types.yang
@@ -17,6 +17,24 @@
     reference "RFC 6087";
   }
 
+  typedef imsi {
+      type uint64 {
+      }
+    description "International Mobile Subscriber Identity";
+  }
+
+  typedef imei {
+      type uint64 {
+      }
+    description "International Mobile Equipment Identity";
+  }
+
+  typedef iccid {
+      type uint64 {
+      }
+    description "Integrated Circuit Card ID";
+  }
+
   typedef bitrate {
       type uint64 {
       }
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
index 4b5371b..b57e8db 100755
--- 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
@@ -10,6 +10,7 @@
 
   include onf-ip-domain;
   include onf-traffic-class;
+  include onf-device;
 
   organization "Open Networking Foundation.";
   contact "Scott Baker";
@@ -66,33 +67,22 @@
         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;
+      list device {
+        key "device-id";
+        leaf device-id {
+          type leafref {
+            path "../../../device/dev-id";
           }
-          description "display name to use in GUI or CLI";
+          description
+             "Link to device";
         }
-        description
-          "List of imsi ranges that comprise this group. It's acceptable for
-           a range to degenerate to being a singleton";
+        leaf enable {
+          type boolean;
+          default true;
+          description
+            "Enable this device";
+        }
+        description "list of devices in this device-group";
       }
 
       leaf ip-domain {
@@ -104,24 +94,15 @@
            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";
-          }
+      container mbr {
+        description "Maximum bitrate";
+        leaf uplink {
+          type at:bitrate;
+          units bps;
+          mandatory true;
+          description "Per-device MBR uplink data rate in bps";
         }
+
         leaf traffic-class {
           type leafref {
             path "../../../../traffic-class/tc-id";
@@ -130,6 +111,13 @@
           description
             "Link to traffic class";
         }
+
+        leaf downlink {
+          type at:bitrate;
+          units bps;
+          mandatory true;
+          description "Per-device MBR downlink data rate in bps";
+        }
       }
     }
   }
diff --git a/config-models/aether-2.0.x/files/yang/onf-device.yang b/config-models/aether-2.0.x/files/yang/onf-device.yang
new file mode 100644
index 0000000..ce49e2c
--- /dev/null
+++ b/config-models/aether-2.0.x/files/yang/onf-device.yang
@@ -0,0 +1,72 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+submodule onf-device {
+  belongs-to onf-enterprise { prefix ent; }
+
+  import ietf-yang-types{ prefix yg; }
+  import onf-aether-types { prefix at; }
+  include onf-sim-card;
+
+  organization "Open Networking Foundation.";
+    contact "Scott Baker";
+    description
+      "A Aether Device...";
+
+  revision "2022-01-19" {
+    description "An Aether Device";
+    reference "RFC 6087";
+  }
+
+  typedef device-id {
+        type yg:yang-identifier {
+            length 1..32;
+        }
+    description "The typedef for device-id";
+  }
+
+  grouping device {
+    description "The top level container";
+
+    list device {
+      key "dev-id";
+      unique "imei";
+      description
+        "List of devices";
+
+      leaf dev-id {
+        type device-id;
+        description "ID for this device.";
+      }
+
+      leaf imei {
+        type at:imei;
+        description
+           "IMEI for this device";
+      }
+
+      leaf description {
+        type at:description;
+        description "description of this device";
+      }
+
+      leaf display-name {
+        type string {
+            length 1..80;
+        }
+        description "display name to use in GUI or CLI";
+      }
+
+      // TODO: Device Type
+
+      leaf sim-card {
+        type leafref {
+            path "../../sim-card/sim-id";
+        }
+        description
+          "Link to simcard";
+      }
+    }
+  }
+}
diff --git a/config-models/aether-2.0.x/files/yang/onf-enterprise.yang b/config-models/aether-2.0.x/files/yang/onf-enterprise.yang
index 95e691e..aba447f 100755
--- a/config-models/aether-2.0.x/files/yang/onf-enterprise.yang
+++ b/config-models/aether-2.0.x/files/yang/onf-enterprise.yang
@@ -16,8 +16,11 @@
   include onf-device-group;
   include onf-ip-domain;
   include onf-application;
+  include onf-sim-card;
   include onf-traffic-class;
   include onf-template;
+  include onf-device;
+  include onf-priority-traffic-rule;
 
   organization "Open Networking Foundation.";
   contact "Scott Baker";
@@ -25,6 +28,11 @@
     "An Aether Enterprise is an administration entity that
      has ownership of resrouces.";
 
+  revision "2022-01-19" {
+    description "Sim-card, Device, and Priority-Traffic-Rule Support";
+    reference "RFC 6020";
+  }
+
   revision "2022-01-14" {
     description "Refactored to work with submodules";
     reference "RFC 6020";
diff --git a/config-models/aether-2.0.x/files/yang/onf-priority-traffic-rule.yang b/config-models/aether-2.0.x/files/yang/onf-priority-traffic-rule.yang
new file mode 100755
index 0000000..68f862c
--- /dev/null
+++ b/config-models/aether-2.0.x/files/yang/onf-priority-traffic-rule.yang
@@ -0,0 +1,115 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+submodule onf-priority-traffic-rule {
+  belongs-to onf-enterprise { prefix ent; }
+
+  import ietf-yang-types{ prefix yg; }
+  import onf-aether-types{ prefix at; }
+  include onf-device;
+  include onf-traffic-class;
+  include onf-application;
+
+  organization "Open Networking Foundation.";
+  contact "Scott Baker";
+  description
+    "The aether traffic class associates qos constants
+     with a named class of service";
+
+  revision "2022-01-19" {
+    description "An Aether Priority Traffic Rule";
+    reference "RFC 6087";
+  }
+
+  typedef priority-traffic-rule-id {
+        type yg:yang-identifier {
+            length 1..32;
+        }
+    description "The typedef for priority traffic rule id";
+  }
+
+  grouping priority-traffic-rule {
+    description "The top level container";
+
+    list priority-traffic-rule {
+      key "ptr-id";
+      unique "device endpoint";
+      description
+        "List of priority traffic rules";
+
+      leaf ptr-id {
+        type priority-traffic-rule-id;
+        description "ID for this priority traffic class.";
+      }
+
+      leaf display-name {
+        type string {
+            length 1..80;
+        }
+        description "display name to use in GUI or CLI";
+      }
+
+      leaf device {
+        type leafref {
+          path "../../device/dev-id";
+        }
+        mandatory true;
+        description
+          "Link to device";
+      }
+
+      leaf endpoint {
+        type leafref {
+          path "../../../application/endpoint/endpoint-id";
+        }
+        mandatory true;
+        description
+          "Link to application";
+      }
+
+      container mbr {
+        description "Maximum bitrate";
+        leaf uplink {
+          type at:bitrate;
+          units bps;
+          description "Per-Device per-Application MBR uplink data rate in bps";
+        }
+
+        leaf downlink {
+          type at:bitrate;
+          units bps;
+          description "Per-Device per application MBR downlink data rate in bps";
+        }
+      }
+
+      container gbr {
+        description "Guaranteed bitrate";
+        leaf uplink {
+          type at:bitrate;
+          units bps;
+          description "Per-Device per-Application GBR uplink data rate in bps";
+        }
+
+        leaf downlink {
+          type at:bitrate;
+          units bps;
+          description "Per-Device per application GBR downlink data rate in bps";
+        }
+      }
+
+      leaf traffic-class {
+        type leafref {
+          path "../../../traffic-class/tc-id";
+        }
+        description
+          "Link to traffic class";
+      }
+
+      leaf description {
+        type at:description;
+        description "description of this priority traffic rule";
+      }
+    }
+  }
+}
diff --git a/config-models/aether-2.0.x/files/yang/onf-sim-card.yang b/config-models/aether-2.0.x/files/yang/onf-sim-card.yang
new file mode 100644
index 0000000..1b7fe8a
--- /dev/null
+++ b/config-models/aether-2.0.x/files/yang/onf-sim-card.yang
@@ -0,0 +1,67 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+submodule onf-sim-card {
+  belongs-to onf-enterprise { prefix ent; }
+
+  import ietf-yang-types{ prefix yg; }
+  import onf-aether-types { prefix at; }
+
+  organization "Open Networking Foundation.";
+    contact "Scott Baker";
+    description
+      "A Aether Device...";
+
+  revision "2022-01-19" {
+    description "An Aether Device";
+    reference "RFC 6087";
+  }
+
+  typedef sim-card-id {
+        type yg:yang-identifier {
+            length 1..32;
+        }
+    description "The typedef for device-id";
+  }
+
+  grouping sim-card {
+    description "The top level container";
+
+    list sim-card {
+      key "sim-id";
+      unique "iccid";
+      description
+        "List of sim cards";
+
+      leaf sim-id {
+        type sim-card-id;
+        description "ID for this sim card.";
+      }
+
+      leaf iccid {
+        type at:iccid;
+        description
+           "ICCID for this sim card";
+      }
+
+      leaf description {
+        type at:description;
+        description "description of this sim card";
+      }
+
+      leaf display-name {
+        type string {
+            length 1..80;
+        }
+        description "display name to use in GUI or CLI";
+      }
+
+      leaf imsi {
+          type at:imsi;
+          description
+              "IMSI for this sim card";
+      }
+    }
+  }
+}
diff --git a/config-models/aether-2.0.x/files/yang/onf-site.yang b/config-models/aether-2.0.x/files/yang/onf-site.yang
index 2b782ff..17cf478 100755
--- a/config-models/aether-2.0.x/files/yang/onf-site.yang
+++ b/config-models/aether-2.0.x/files/yang/onf-site.yang
@@ -9,6 +9,9 @@
   import ietf-yang-types{ prefix yg; }
   import onf-aether-types{ prefix at; }
 
+  include onf-device;
+  include onf-priority-traffic-rule;
+  include onf-sim-card;
   include onf-upf;
   include onf-vcs;
   include onf-device-group;
@@ -167,6 +170,12 @@
         description "description of this site";
       }
 
+      uses device;
+
+      uses priority-traffic-rule;
+
+      uses sim-card;
+
       uses upf;
 
       uses vcs;