AETHER-2874 Bootstrap Aether-2.x models

Change-Id: Ia987596109584df696aaa57703f9148075569422
diff --git a/config-models/aether-2.0.x/files/yang/onf-vcs.yang b/config-models/aether-2.0.x/files/yang/onf-vcs.yang
new file mode 100755
index 0000000..c275565
--- /dev/null
+++ b/config-models/aether-2.0.x/files/yang/onf-vcs.yang
@@ -0,0 +1,187 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+module onf-vcs {
+  namespace "http://opennetworking.org/aether/vcs";
+  prefix sl;
+
+  import ietf-yang-types{ prefix yg; }
+  import onf-aether-types{ prefix at; }
+  import onf-application{ prefix app; }
+  import onf-device-group{ prefix dg; }
+  import onf-enterprise{ prefix ent; }
+  import onf-upf { prefix upf; }
+  import onf-site{ prefix st; }
+
+  organization "Open Networking Foundation.";
+  contact "Scott Baker";
+  description
+    "An Aether Virtual Cellular Service (VCS) is
+     used to connect devices with applications";
+
+  revision "2021-09-10" {
+    description "An Aether Virtual Cellular Service";
+    reference "RFC 6087";
+  }
+
+  typedef vcs-id {
+        type yg:yang-identifier {
+            length 1..32;
+        }
+    description "The typedef for vcs-id";
+  }
+
+  container vcs {
+    description "The top level container";
+
+    list vcs {
+      key "id";
+      description
+        "List of virtual cellular services";
+
+      leaf id {
+        type vcs-id;
+        description "ID for this vcs.";
+      }
+
+      leaf display-name {
+        type string {
+            length 1..80;
+        }
+        description "display name to use in GUI or CLI";
+      }
+
+      list device-group {
+        key "device-group";
+        leaf device-group {
+          type leafref {
+            path "/dg:device-group/dg:device-group/dg:id";
+          }
+          description
+            "Link to device group";
+        }
+        leaf enable {
+          type boolean;
+          default true;
+          description
+            "Enable this device group";
+        }
+        description
+          "A list of device groups. Groups will only participate in
+           the VCS if the enable field is set to True";
+      }
+
+      leaf default-behavior {
+        type at:behavior;
+        mandatory true;
+        description
+          "Default behavior if no filter rules match";
+      }
+
+      list filter {
+        key "application";
+        leaf application {
+          type leafref {
+            path "/app:application/app:application/app:id";
+          }
+          mandatory true;
+          description
+            "Link to application";
+        }
+        leaf priority {
+          type at:priority;
+          default 0;
+          description
+            "Priority of this application";
+        }
+        leaf allow {
+          type boolean;
+          default true;
+          description
+            "Allow or deny this application";
+        }
+        description
+          "A list of applications to allow and/or deny. Rules are executed in
+           priority order. The first rule to match will determine the fate
+           of the packet.";
+      }
+
+      leaf upf {
+        type leafref {
+          path "/upf:upf/upf:upf/upf:id";
+        }
+        description
+          "Link to user plane that implements this vcf";
+      }
+
+      leaf description {
+        type at:description;
+        description "description of this vcs";
+      }
+
+      leaf enterprise {
+        type leafref {
+          path "/ent:enterprise/ent:enterprise/ent:id";
+        }
+        mandatory true;
+        description
+          "Link to enterprise that owns this VCS";
+      }
+
+      leaf site {
+        type leafref {
+          path "/st:site/st:site/st:id";
+        }
+	mandatory true;
+        description
+          "Link to site where this VCS is deployed";
+      }
+
+      // the following are populated from the template
+      leaf sst {
+        type at:sst;
+        mandatory true;
+        description "Slice/Service type. Immutable.";
+      }
+
+      leaf sd {
+        type at:sd;
+        mandatory true;
+        description "Slice differentiator. Immutable.";
+      }
+
+      container slice {
+        description "Per-Slice QOS Settings";
+        container mbr {
+          description "Maximum bitrate";
+          leaf uplink {
+            type at:bitrate;
+            units bps;
+            description "Per-Slice MBR uplink data rate in bps";
+          }
+
+          leaf downlink {
+            type at:bitrate;
+            units bps;
+            description "Per-Slice MBR downlink data rate in bps";
+          }
+
+          leaf uplink-burst-size {
+            type at:burst;
+            units bytes;
+            description "Per-Slice Uplink burst size";
+          }
+
+          leaf downlink-burst-size {
+            type at:burst;
+            units bytes;
+            description "Per-Slice Downlink burst size";
+          }
+        }
+      }
+
+      // end of items populated from the template
+    }
+  }
+}