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
+ }
+ }
+}