AETHER-2447 Application Traffic-Class;
Device-Group QoS;
Add Site to UPF

Change-Id: I5f82981d573d984c31d464a1e11481a4332e1aa8
diff --git a/aether-roc-umbrella/Chart.yaml b/aether-roc-umbrella/Chart.yaml
index f2565ec..82f3e2b 100644
--- a/aether-roc-umbrella/Chart.yaml
+++ b/aether-roc-umbrella/Chart.yaml
@@ -7,7 +7,7 @@
 description: Aether ROC Umbrella chart to deploy all Aether ROC
 kubeVersion: ">=1.18.0"
 type: application
-version: 1.4.13
+version: 1.4.14
 appVersion: v0.0.0
 keywords:
   - aether
@@ -28,7 +28,7 @@
   - name: config-model-aether-4
     condition: onos-config.models.aether.v4.enabled
     repository: "file://../config-models/aether-4.x"
-    version: 4.0.6
+    version: 4.0.7
   - name: onos-config
     condition: import.onos-config.enabled
     repository: https://charts.onosproject.org
diff --git a/config-models/aether-4.x/CHANGELOG.md b/config-models/aether-4.x/CHANGELOG.md
index 0f09984..35837db 100644
--- a/config-models/aether-4.x/CHANGELOG.md
+++ b/config-models/aether-4.x/CHANGELOG.md
@@ -3,6 +3,13 @@
 
 SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
 -->
+Changes on 10/13/2021
+=====================
+Application
+  * Add Traffic-Class to Application
+  * Add Site to UPF
+  * Add Device.Mbr.<Uplink,Downlink> to DeviceGroup
+
 Differences from Aether-3.0.0
 =============================
 
diff --git a/config-models/aether-4.x/Chart.yaml b/config-models/aether-4.x/Chart.yaml
index 5d21cd8..22a9700 100644
--- a/config-models/aether-4.x/Chart.yaml
+++ b/config-models/aether-4.x/Chart.yaml
@@ -4,7 +4,7 @@
 
 apiVersion: v2
 name: config-model-aether-4
-version: 4.0.6
+version: 4.0.7
 kubeVersion: ">=1.18.0"
 appVersion: 4.0.0
 description: Aether config model
diff --git a/config-models/aether-4.x/files/aether-4.0.0.tree b/config-models/aether-4.x/files/aether-4.0.0.tree
index 51ddf2f..3f42de7 100644
--- a/config-models/aether-4.x/files/aether-4.0.0.tree
+++ b/config-models/aether-4.x/files/aether-4.0.0.tree
@@ -6,13 +6,14 @@
         +--rw description?    at:description
         +--rw address         ietf:host
         +--rw endpoint* [name]
-        |  +--rw name          string
-        |  +--rw port-start    ietf:port-number
-        |  +--rw port-end?     ietf:port-number
-        |  +--rw protocol?     at:protocol
+        |  +--rw name             string
+        |  +--rw port-start       ietf:port-number
+        |  +--rw port-end?        ietf:port-number
+        |  +--rw protocol?        at:protocol
         |  +--rw mbr
-        |     +--rw uplink?     at:bitrate
-        |     +--rw downlink?   at:bitrate
+        |  |  +--rw uplink?     at:bitrate
+        |  |  +--rw downlink?   at:bitrate
+        |  +--rw traffic-class?   -> /tc:traffic-class/traffic-class/id
         +--rw enterprise      -> /ent:enterprise/enterprise/id
 
 module: onf-connectivity-service
@@ -37,6 +38,10 @@
         |  +--rw imsi-range-from?   uint64
         |  +--rw imsi-range-to?     uint64
         +--rw ip-domain?      -> /ipd:ip-domain/ip-domain/id
+        +--rw device
+        |  +--rw mbr
+        |     +--rw uplink?     at:bitrate
+        |     +--rw downlink?   at:bitrate
         +--rw site            -> /st:site/site/id
 
 module: onf-enterprise
@@ -125,6 +130,7 @@
         +--rw display-name?      string
         +--rw description?       at:description
         +--rw enterprise         -> /ent:enterprise/enterprise/id
+        +--rw site               -> /st:site/site/id
 
 module: onf-vcs
   +--rw vcs
diff --git a/config-models/aether-4.x/files/yang/onf-application.yang b/config-models/aether-4.x/files/yang/onf-application.yang
index 4c146c3..6bfbb4c 100755
--- a/config-models/aether-4.x/files/yang/onf-application.yang
+++ b/config-models/aether-4.x/files/yang/onf-application.yang
@@ -10,6 +10,7 @@
   import ietf-yang-types{ prefix yg; }
   import onf-aether-types{ prefix at; }
   import onf-enterprise{ prefix ent; }
+  import onf-traffic-class{ prefix tc; }
 
   organization "Open Networking Foundation.";
   contact "Scott Baker";
@@ -98,6 +99,13 @@
             description "Per-Device per application mbr downlink data rate in mbps";
           }
         }
+        leaf traffic-class {
+          type leafref {
+            path "/tc:traffic-class/tc:traffic-class/tc:id";
+          }
+          description
+            "Link to traffic class";
+        }
       }
 
       leaf enterprise {
diff --git a/config-models/aether-4.x/files/yang/onf-device-group.yang b/config-models/aether-4.x/files/yang/onf-device-group.yang
index 90ce834..788ea6c 100755
--- a/config-models/aether-4.x/files/yang/onf-device-group.yang
+++ b/config-models/aether-4.x/files/yang/onf-device-group.yang
@@ -80,12 +80,30 @@
       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;
+            description "Per-device mbr uplink data rate in mbps";
+          }
+
+          leaf downlink {
+            type at:bitrate;
+            units bps;
+            description "Per-device mbr downlink data rate in mbps";
+          }
+        }
+      }
+
       leaf site {
         type leafref {
           path "/st:site/st:site/st:id";
diff --git a/config-models/aether-4.x/files/yang/onf-upf.yang b/config-models/aether-4.x/files/yang/onf-upf.yang
index 3d1c764..a8a7c4c 100755
--- a/config-models/aether-4.x/files/yang/onf-upf.yang
+++ b/config-models/aether-4.x/files/yang/onf-upf.yang
@@ -7,9 +7,10 @@
   prefix upf;
 
   import ietf-inet-types { prefix inet; }
-  import ietf-yang-types{ prefix yg; }  
+  import ietf-yang-types{ prefix yg; }
   import onf-aether-types { prefix at; }
   import onf-enterprise{ prefix ent; }
+  import onf-site{ prefix st; }
 
   organization "Open Networking Foundation.";
   contact "Scott Baker";
@@ -71,8 +72,7 @@
       }
 
       // UPFs are always owned by an Enterprise, since they typically exist on the
-      // Enterprise's edge. TODO: Consider whether they should be owned by a Site
-      // instead of Enterprise.
+      // Enterprise's edge.
       leaf enterprise {
         type leafref {
           path "/ent:enterprise/ent:enterprise/ent:id";
@@ -80,7 +80,18 @@
         mandatory true;
         description
           "Link to enterprise that owns this Access Point List";
-      }      
+      }
+
+      // UPFs always reside at a site, as the exist on physical infrastructure. GUI
+      // will ensure that the tuple (DG, VCS, UPF) all exist on the same site.
+      leaf site {
+        type leafref {
+          path "/st:site/st:site/st:id";
+        }
+        mandatory true;
+        description
+          "Link to site";
+      }
     }
-  } 
+  }
 }
diff --git a/config-models/aether-4.x/files/yang/onf-vcs.yang b/config-models/aether-4.x/files/yang/onf-vcs.yang
index db0e993..183d6f6 100755
--- a/config-models/aether-4.x/files/yang/onf-vcs.yang
+++ b/config-models/aether-4.x/files/yang/onf-vcs.yang
@@ -144,6 +144,8 @@
         description "Slice differentiator. Immutable.";
       }
 
+      // This is deprecated. Per-device QOS is moving
+      // to DG.
       container device {
         description "Per-device QOS Settings";
         container mbr {