diff --git a/Makefile b/Makefile
index 6d9f127..1e858c7 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@
 all: test
 
 test: # @HELP run the acceptance tests
-test: deps yang-lint
+test: deps
 
 roc-test: # @HELP run the integration tests
 roc-test: deps # @HELP run the integration tests
@@ -33,17 +33,5 @@
         {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}; \
     '
 
-pyang:
-	pyang -v || pip install pyang
-
-yang-lint: pyang
-	pyang --lint ./config-models/aether-1.x/files/yang/*.yang
-	pyang --lint --lint-ensure-hyphenated-names -W error ./config-models/aether-2.0.x/files/yang/*.yang -p ./config-models/aether-2.0.x/files/yang
-	pyang --lint ./config-models/aether-2.1.x/files/yang/*.yang
-	pyang --lint ./config-models/aether-2.2.x/files/yang/*.yang
-	pyang --lint ./config-models/aether-3.x/files/yang/*.yang
-	pyang --lint --lint-ensure-hyphenated-names -W error ./config-models/aether-4.x/files/yang/*.yang -p ./config-models/aether-4.x/files/yang
-	pyang --lint --lint-ensure-hyphenated-names -W error ./config-models/plproxy-1.x/files/yang/*.yang -p ./config-models/plproxy-1.x/files/yang
-
 reuse-lint:
-	reuse --root . lint
\ No newline at end of file
+	reuse --root . lint
diff --git a/aether-roc-api/Chart.yaml b/aether-roc-api/Chart.yaml
index e47eedc..4e1ca69 100644
--- a/aether-roc-api/Chart.yaml
+++ b/aether-roc-api/Chart.yaml
@@ -7,8 +7,8 @@
 description: Aether ROC API
 kubeVersion: ">=1.15.0"
 type: application
-version: 1.4.7
-appVersion: v0.9.8
+version: 1.4.8
+appVersion: v0.9.9
 keywords:
   - aether
   - config
diff --git a/aether-roc-api/values.yaml b/aether-roc-api/values.yaml
index 3653b61..d2dab6f 100644
--- a/aether-roc-api/values.yaml
+++ b/aether-roc-api/values.yaml
@@ -10,7 +10,7 @@
 
 image:
   repository: onosproject/aether-roc-api
-  tag: v0.9.8
+  tag: v0.9.9
   pullPolicy: IfNotPresent
   pullSecrets: []
 
diff --git a/aether-roc-umbrella/Chart.yaml b/aether-roc-umbrella/Chart.yaml
index 63ddd5e..185527e 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: 2.0.26
+version: 2.0.27
 appVersion: v0.0.0
 keywords:
   - aether
@@ -20,36 +20,19 @@
   - name: onos-topo
     condition: import.onos-topo.enabled
     repository: https://charts.onosproject.org
-    version: 1.1.109
-  - name: config-model-aether-2
-    condition: onos-config.models.aether.v2.enabled
-    repository: "file://../config-models/aether-2.0.x"
-    version: 2.0.10
-  - name: config-model-aether-4
-    condition: onos-config.models.aether.v4.enabled
-    repository: "file://../config-models/aether-4.x"
-    version: 4.0.18
-  - name: config-model-plproxy
-    condition: onos-config.models.plproxy.v1.enabled
-    repository: "file://../config-models/plproxy-1.x"
-    version: 1.0.2
-    alias: config-model-plproxy-1-0-0
+    version: 1.2.2
   - name: onos-config
     condition: import.onos-config.enabled
     repository: https://charts.onosproject.org
-    version: 1.4.6
-  - name: onos-gui
-    condition: import.onos-gui.enabled
-    repository: https://charts.onosproject.org
-    version: 1.0.8
+    version: 1.6.7
   - name: onos-cli
     condition: import.onos-cli.enabled
     repository: https://charts.onosproject.org
-    version: 1.1.11
+    version: 1.2.7
   - name: aether-roc-api
     condition: import.aether-roc-api.enabled
     repository: "file://../aether-roc-api"
-    version: 1.4.7
+    version: 1.4.8
   - name: aether-roc-websocket
     condition: import.aether-roc-websocket.enabled
     repository: "file://../aether-roc-websocket"
diff --git a/aether-roc-umbrella/files/opa-rbac/aether-2.0.0.rego b/aether-roc-umbrella/files/opa-rbac/aether-2.0.0.rego
index 3f79874..80ea78e 100644
--- a/aether-roc-umbrella/files/opa-rbac/aether-2.0.0.rego
+++ b/aether-roc-umbrella/files/opa-rbac/aether-2.0.0.rego
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 
-package aether_2_0_0
+package aether_2_0_x
 
 echo[config] {
     config := input
diff --git a/aether-roc-umbrella/files/opa-rbac/aether-4.0.0.rego b/aether-roc-umbrella/files/opa-rbac/aether-4.0.0.rego
index 27a638f..f17cbcf 100644
--- a/aether-roc-umbrella/files/opa-rbac/aether-4.0.0.rego
+++ b/aether-roc-umbrella/files/opa-rbac/aether-4.0.0.rego
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 
-package aether_4_0_0
+package aether_4_0_18
 
 echo[config] {
     config := input
diff --git a/aether-roc-umbrella/templates/topo.yaml b/aether-roc-umbrella/templates/topo.yaml
index 18f393b..717e47a 100644
--- a/aether-roc-umbrella/templates/topo.yaml
+++ b/aether-roc-umbrella/templates/topo.yaml
@@ -23,8 +23,8 @@
   aspects:
     onos.topo.Configurable:
       address: sdcore-adapter-v2:5150
-      version: 2.0.0
-      type: Aether
+      version: 2.0.x
+      type: aether
     onos.topo.Location:
       lat: 52.5150
       lng: 13.3885
@@ -47,8 +47,8 @@
   aspects:
     onos.topo.Configurable:
       address: sdcore-adapter-v4:5150
-      version: 4.0.0
-      type: Aether
+      version: 4.0.18
+      type: aether
     onos.topo.Location:
       lat: 52.5150
       lng: 13.3885
diff --git a/aether-roc-umbrella/values.yaml b/aether-roc-umbrella/values.yaml
index bd4d9f0..abac6b5 100644
--- a/aether-roc-umbrella/values.yaml
+++ b/aether-roc-umbrella/values.yaml
@@ -35,8 +35,6 @@
     enabled: true
   onos-config:
     enabled: true
-  onos-gui:
-    enabled: false
   onos-cli:
     enabled: true
   aether-roc-api:
@@ -214,7 +212,7 @@
       username_claim: name
       email_claim: email
       jwk_set_url: "https://keycloak.opennetworking.org/auth/realms/master/protocol/openid-connect/certs"
-      cache_ttl: 60m  
+      cache_ttl: 60m
     auth.generic_oauth:
       enabled: true
       client_id: aether-roc-gui
@@ -310,7 +308,7 @@
           static_configs:
             - targets:
                 - demo-exporter:2112
-  
+
 prometheus-ace:
   pushgateway:
     enabled: false
@@ -346,17 +344,19 @@
   store:
     consensus:
       enabled: false
-  models:
-    aether:
-      v2:
-        enabled: true
-      v4:
-        enabled: true
-    plproxy:
-      v1:
-        enabled: true
+  modelPlugins:
+    - name: aether-2
+      image: onosproject/aether-2.0.x:2.0.0-dev-aether-2.0.x
+      endpoint: localhost
+      port: 5152
+    - name: aether-4
+      image: onosproject/aether-4.x:4.0.19-dev-aether-4.0.18
+      endpoint: localhost
+      port: 5153
+
   plugin:
     compiler:
+      version: v1.0.1
       target: ""
   openpolicyagent:
     enabled: true
diff --git a/config-models/aether-1.x/.helmignore b/config-models/aether-1.x/.helmignore
deleted file mode 100644
index 862263b..0000000
--- a/config-models/aether-1.x/.helmignore
+++ /dev/null
@@ -1,25 +0,0 @@
-# SPDX-FileCopyrightText: 2021 Open Networking Foundation
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Patterns to ignore when building packages.
-# This supports shell glob matching, relative path matching, and
-# negation (prefixed with !). Only one pattern per line.
-.DS_Store
-# Common VCS dirs
-.git/
-.gitignore
-.bzr/
-.bzrignore
-.hg/
-.hgignore
-.svn/
-# Common backup files
-*.swp
-*.bak
-*.tmp
-*~
-# Various IDEs
-.project
-.idea/
-*.tmproj
diff --git a/config-models/aether-1.x/Chart.yaml b/config-models/aether-1.x/Chart.yaml
deleted file mode 100644
index 71ab3d5..0000000
--- a/config-models/aether-1.x/Chart.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-aether
-version: 1.0.6
-kubeVersion: ">=1.18.0"
-appVersion: 1.0.0
-description: Aether config model
-keywords:
-  - onos
-  - sdn
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
diff --git a/config-models/aether-1.x/files/aether-1.0.0.tree b/config-models/aether-1.x/files/aether-1.0.0.tree
deleted file mode 100644
index 7c24828..0000000
--- a/config-models/aether-1.x/files/aether-1.0.0.tree
+++ /dev/null
@@ -1,54 +0,0 @@
-module: access-profile
-  +--rw access-profile
-     +--rw access-profile* [id]
-        +--rw id             access-profile-id
-        +--rw type?          string
-        +--rw filter?        string
-        +--rw description?   string
-
-module: aether-subscriber
-  +--rw subscriber
-     +--rw ue* [ueid]
-        +--rw ueid             ueid
-        +--rw serving-plmn
-        |  +--rw mcc?   mcc
-        |  +--rw mnc?   mnc
-        |  +--rw tac?   tac
-        +--rw requested-apn?   string
-        +--rw priority?        uint32
-        +--rw enabled?         boolean
-        +--rw profiles
-           +--rw apn-profile?      -> /apn:apn-profile/apn-profile/id
-           +--rw up-profile?       -> /up:up-profile/up-profile/id
-           +--rw qos-profile?      -> /qos:qos-profile/qos-profile/id
-           +--rw access-profile* [access-profile]
-              +--rw access-profile    -> /ap:access-profile/access-profile/id
-              +--rw allowed?          boolean
-
-module: apn-profile
-  +--rw apn-profile
-     +--rw apn-profile* [id]
-        +--rw id               apn-profile-id
-        +--rw apn-name?        string
-        +--rw dns-primary?     inet:ip-address
-        +--rw dns-secondary?   inet:ip-address
-        +--rw mtu?             uint32
-        +--rw gx-enabled?      boolean
-        +--rw description?     string
-
-module: qos-profile
-  +--rw qos-profile
-     +--rw qos-profile* [id]
-        +--rw id             qos-profile-id
-        +--rw apn-ambr
-        |  +--rw uplink?     uint32
-        |  +--rw downlink?   uint32
-        +--rw description?   string
-
-module: up-profile
-  +--rw up-profile
-     +--rw up-profile* [id]
-        +--rw id                up-profile-id
-        +--rw user-plane?       string
-        +--rw access-control?   string
-        +--rw description?      string
diff --git a/config-models/aether-1.x/files/yang/access-profile.yang b/config-models/aether-1.x/files/yang/access-profile.yang
deleted file mode 100755
index dac8d76..0000000
--- a/config-models/aether-1.x/files/yang/access-profile.yang
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module access-profile {
-  namespace "http://opennetworking.org/aether/access-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-08-18" {
-    description "An Aether access Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef access-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for access-profile-id";
-  }
-
-  container access-profile {
-    description "The top level container";
-
-    list access-profile {
-      key "id";
-      description
-        "List of access profiles";
-
-      leaf id {
-        type access-profile-id;
-        description "ID for this access profile.";
-      }
-
-      leaf type {
-        type string {
-          length 1..32;
-        }
-        description "type of profile";
-      }
-
-      leaf filter {
-        type string {
-          length 0..32;
-        }
-        description "filter";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-1.x/files/yang/aether-subscriber.yang b/config-models/aether-1.x/files/yang/aether-subscriber.yang
deleted file mode 100644
index 880dd82..0000000
--- a/config-models/aether-1.x/files/yang/aether-subscriber.yang
+++ /dev/null
@@ -1,154 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module aether-subscriber {
-  namespace "http://opennetworking.org/aether/subscriber";
-  prefix sub;
-
-  import apn-profile{ prefix apn; }
-  import qos-profile{ prefix qos; }
-  import up-profile{ prefix up; }
-  import access-profile{ prefix ap; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-08-18" {
-    description "An Aether Subscriber";
-    reference "RFC 6087";
-  }
-
-  // User Equipment ID (UEID), Basically an IMSI range
-  // examples:
-  //    123456789???????  ... wildcard at the end
-  //    123456???0123455  ... wildcard in the middle
-  //    1234567890000000-123456789000005 ... range
-  typedef ueid {
-      type string {
-          length 1..31;
-      }
-    description "The typedef for ueid";
-  }
-
-  typedef mcc {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for mcc";
-  }
-
-  typedef mnc {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for mnc";
-  }
-
-  typedef tac {
-      type uint32 {
-        range 0..99999999;
-      }
-    description "The typedef for tac";
-  }
-
-  container subscriber {
-    description "The top level container";
-
-    list ue {
-      key "ueid";
-      description
-        "List of subscriber devices";
-
-      leaf ueid {
-	type ueid;
-        description "identifier for this subscriber, may or may not be an IMSI";
-      }
-
-      container serving-plmn {
-        leaf mcc {
-          type mcc;
-          description "mobile country code";
-        }
-        leaf mnc {
-          type mnc;
-          description "mobile network code";
-        }
-        leaf tac {
-          type tac;
-          description "type allocation code";
-        }
-	description "The contaiber for serving-plmn";
-      }
-
-      leaf requested-apn {
-        type string {
-            length 1..31;
-        }
-        description "requested access point name";
-      }
-
-      leaf priority {
-        type uint32 {
-          range 0..1000;
-        }
-        default 0;
-        description
-          "Priority for this subscriber range";
-      }
-
-      leaf enabled {
-        type boolean;
-        default false;
-        description
-          "Enable or disable this ue";
-      }
-
-      container profiles {
-        leaf apn-profile {
-          type leafref {
-            path "/apn:apn-profile/apn:apn-profile/apn:id";
-          }
-          description
-            "Link to apn profile";
-        }
-        leaf up-profile {
-          type leafref {
-            path "/up:up-profile/up:up-profile/up:id";
-          }
-          description
-            "Link to user plane profile";
-        }
-        leaf qos-profile {
-          type leafref {
-            path "/qos:qos-profile/qos:qos-profile/qos:id";
-          }
-          description
-            "Link to qos profile";
-        }
-        list access-profile {
-          key "access-profile";
-          leaf access-profile {
-            type leafref {
-              path "/ap:access-profile/ap:access-profile/ap:id";
-            }
-//            type ap:access-profile-id;
-            description
-                "Link to access profile";
-          }
-          leaf allowed {
-            type boolean;
-            default true;
-            description
-              "Allow or disallow this ue to use this access profile";
-          }
-          description "The list for access-profile";
-        }
-        description "The container for profiles";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-1.x/files/yang/apn-profile.yang b/config-models/aether-1.x/files/yang/apn-profile.yang
deleted file mode 100755
index 015f695..0000000
--- a/config-models/aether-1.x/files/yang/apn-profile.yang
+++ /dev/null
@@ -1,85 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module apn-profile {
-  namespace "http://opennetworking.org/aether/apn-profile";
-  prefix pro;
-
-  import ietf-inet-types { prefix inet; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-08-18" {
-    description "An Aether APN Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef apn-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for apn-profile-id";
-  }
-
-  container apn-profile {
-    description "The top level container";
-
-    list apn-profile {
-      key "id";
-      description
-        "List of apn profiles";
-
-      leaf id {
-        type apn-profile-id;
-        description "ID for this apn profile.";
-      }
-
-      leaf apn-name {
-        type string {
-          length 1..32;
-        }
-        description "apn name";
-      }
-
-      leaf dns-primary {
-        type inet:ip-address;
-        description "primary dns server name";
-      }
-
-      leaf dns-secondary {
-        type inet:ip-address;
-        description "secondary dns server name";
-      }
-
-      leaf mtu {
-        type uint32 {
-          range 68..65535;
-        }
-        units bytes;
-        default 1460;
-        description "maximum transmission unit";
-      }
-
-      leaf gx-enabled {
-        type boolean;
-        default false;
-        description "enable gx interface";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-1.x/files/yang/ietf-inet-types.yang b/config-models/aether-1.x/files/yang/ietf-inet-types.yang
deleted file mode 100644
index fa57f75..0000000
--- a/config-models/aether-1.x/files/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,458 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      length "1..253";
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/config-models/aether-1.x/files/yang/qos-profile.yang b/config-models/aether-1.x/files/yang/qos-profile.yang
deleted file mode 100755
index cde5273..0000000
--- a/config-models/aether-1.x/files/yang/qos-profile.yang
+++ /dev/null
@@ -1,73 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module qos-profile {
-  namespace "http://opennetworking.org/aether/qos-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-08-18" {
-    description "An Aether qos Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef qos-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for qos-profile-id";
-  }
-
-  container qos-profile {
-    description "The top level container";
-
-    list qos-profile {
-      key "id";
-      description
-        "List of qos profiles";
-
-      leaf id {
-        type qos-profile-id;
-        description "ID for this qos profile.";
-      }
-
-      container apn-ambr {
-        leaf uplink {
-          type uint32 {
-            range 0..4294967295;
-          }
-	  units bps;
-          default 0;
-          description
-            "Upstream aggregate maximum bit rate";
-        }
-        leaf downlink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Downstream aggregate maximum bit rate";
-        }
-        description "The container for apn-ambr";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-1.x/files/yang/up-profile.yang b/config-models/aether-1.x/files/yang/up-profile.yang
deleted file mode 100755
index 1c5052d..0000000
--- a/config-models/aether-1.x/files/yang/up-profile.yang
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module up-profile {
-  namespace "http://opennetworking.org/aether/user-plane-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-08-18" {
-    description "An Aether user plane Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef up-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for up-profile-id";
-  }
-
-  container up-profile {
-    description "The top level container";
-
-    list up-profile {
-      key "id";
-      description
-        "List of user plane profiles";
-
-      leaf id {
-        type up-profile-id;
-        description "ID for this user plane profile.";
-      }
-
-      leaf user-plane {
-        type string {
-          length 1..255;
-        }
-        description "user plane name";
-      }
-
-      leaf access-control {
-        type string {
-          length 1..32;
-        }
-        description "access control policy";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-1.x/templates/_helpers.tpl b/config-models/aether-1.x/templates/_helpers.tpl
deleted file mode 100644
index bb84c33..0000000
--- a/config-models/aether-1.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-{{/* vim: set filetype=mustache: */}}
-{{/*
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-SPDX-License-Identifier: Apache-2.0
-
-Expand the name of the chart.
-*/}}
-{{- define "aether.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "aether.fullname" -}}
-{{- if contains "config-model-aether" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-aether" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "aether.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "aether.labels" -}}
-helm.sh/chart: {{ include "aether.chart" . }}
-{{ include "aether.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "aether.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "aether.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/aether-1.x/templates/model.yaml b/config-models/aether-1.x/templates/model.yaml
deleted file mode 100644
index 0b2af15..0000000
--- a/config-models/aether-1.x/templates/model.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "aether.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "aether.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: Aether
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: aether-subscriber
-    organization: Open Networking Foundation
-    revision: 2020-08-18
-    file: aether-subscriber.yang
-  - name: apn-profile
-    organization: Open Networking Foundation
-    revision: 2020-08-18
-    file: apn-profile.yang
-  - name: up-profile
-    organization: Open Networking Foundation
-    revision: 2020-08-18
-    file: up-profile.yang
-  - name: qos-profile
-    organization: Open Networking Foundation
-    revision: 2020-08-18
-    file: qos-profile.yang
-  - name: access-profile
-    organization: Open Networking Foundation
-    revision: 2020-08-18
-    file: access-profile.yang
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/aether-1.x/values.yaml b/config-models/aether-1.x/values.yaml
deleted file mode 100644
index 114bfc5..0000000
--- a/config-models/aether-1.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
diff --git a/config-models/aether-2.0.x/CHANGELOG.md b/config-models/aether-2.0.x/CHANGELOG.md
deleted file mode 100644
index 2d66b6b..0000000
--- a/config-models/aether-2.0.x/CHANGELOG.md
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
-SPDX-FileCopyrightText: 2021 Open Networking Foundation
-
-SPDX-License-Identifier: Apache-2.0
--->
-
-Changes on 2/3/2022
-===================
-
-* IDs updated throughout. For example `DgId` to `DeviceGroupId`. 
-  Consult aether-2.0.0.tree to get the current IDs.
-
-Changes on 1/31/2022
-====================
-
-* Traffic-Class moved out of Slice.MBR
-
-Changes on 1/27/2022
-====================
-
-* VCS renamed to Slice
-* Slice container within VCS and Template removed and MBR moved up one level
-
-Changes on 1/20/2022
-====================
-
-* PriorityTrafficRule added
-* SimCard added
-* Device Added
-* Device-Group now includes a list of Devices
-
-Changes on 1/19/2022
-====================
-
-* Application model has been moved inside of Enterprise model
-* Traffic-Class model has been moved inside of Enterprise model
-* Template model has been moved inside of Enterprise model
-* Site model has been moved inside of Enterprise model
-* UPF model has been moved inside of Site model
-* VCS model has been moved inside of Site model
-* Device-Group model has been moved inside of Site model
-* IP-Domain model has been moved inside of Site model
-* Enterprise and Site links removed throughout
diff --git a/config-models/aether-2.0.x/Chart.yaml b/config-models/aether-2.0.x/Chart.yaml
deleted file mode 100644
index 8af477c..0000000
--- a/config-models/aether-2.0.x/Chart.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-aether-2
-version: 2.0.10
-kubeVersion: ">=1.18.0"
-appVersion: 2.0.0
-description: Aether config model
-keywords:
-  - onos
-  - sdn
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
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
deleted file mode 100644
index c818e22..0000000
--- a/config-models/aether-2.0.x/files/aether-2.0.0.tree
+++ /dev/null
@@ -1,156 +0,0 @@
-module: onf-connectivity-service
-  +--rw connectivity-services
-     +--rw connectivity-service* [connectivity-service-id]
-        +--rw connectivity-service-id    connectivity-service-id
-        +--rw display-name?              string
-        +--rw description?               description
-        +--rw core-5g-endpoint?          inet:uri
-        +--rw acc-prometheus-url?        inet:uri
-
-module: onf-enterprise
-  +--rw enterprises
-     +--rw enterprise* [enterprise-id]
-        +--rw enterprise-id           enterprise-id
-        +--rw display-name?           string
-        +--rw description?            description
-        +--rw connectivity-service* [connectivity-service]
-        |  +--rw connectivity-service    -> /cs:connectivity-services/connectivity-service/connectivity-service-id
-        |  +--rw enabled?                boolean
-        +--rw application* [application-id]
-        |  +--rw application-id    application-id
-        |  +--rw display-name?     string
-        |  +--rw description?      description
-        |  +--rw address           at:host-or-network
-        |  +--rw endpoint* [endpoint-id]
-        |     +--rw endpoint-id      at:aether-identifier
-        |     +--rw display-name?    string
-        |     +--rw description?     description
-        |     +--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 traffic-class?   -> ../../../traffic-class/traffic-class-id
-        +--rw traffic-class* [traffic-class-id]
-        |  +--rw traffic-class-id    traffic-class-id
-        |  +--rw display-name?       string
-        |  +--rw description?        description
-        |  +--rw arp?                at:arp
-        |  +--rw qci?                at:qci
-        |  +--rw pelr?               at:pelr
-        |  +--rw pdb?                at:pdb
-        +--rw template* [template-id]
-        |  +--rw template-id         template-id
-        |  +--rw display-name?       string
-        |  +--rw description?        description
-        |  +--rw sst?                at:sst
-        |  +--rw sd?                 at:sd
-        |  +--rw mbr
-        |  |  +--rw uplink?                at:bitrate
-        |  |  +--rw downlink?              at:bitrate
-        |  |  +--rw uplink-burst-size?     at:burst
-        |  |  +--rw downlink-burst-size?   at:burst
-        |  +--rw default-behavior    at:behavior
-        +--rw site* [site-id]
-           +--rw site-id            site-id
-           +--rw display-name?      string
-           +--rw description?       description
-           +--rw small-cell* [small-cell-id]
-           |  +--rw small-cell-id    at:aether-identifier
-           |  +--rw display-name?    string
-           |  +--rw description?     description
-           |  +--rw address?         inet:host
-           |  +--rw tac              at:tac
-           |  +--rw enable?          boolean
-           +--rw monitoring
-           |  +--rw edge-cluster-prometheus-url?      inet:uri
-           |  +--rw edge-monitoring-prometheus-url?   inet:uri
-           |  +--rw edge-device* [edge-device-id]
-           |     +--rw edge-device-id    at:aether-identifier
-           |     +--rw display-name?     string
-           |     +--rw description?      description
-           +--rw imsi-definition
-           |  +--rw mcc           at:mcc
-           |  +--rw mnc           at:mnc
-           |  +--rw enterprise    at:ent
-           |  +--rw format        string
-           +--rw device* [device-id]
-           |  +--rw device-id       device-id
-           |  +--rw display-name?   string
-           |  +--rw description?    description
-           |  +--rw imei?           at:imei
-           |  +--rw sim-card?       -> ../../sim-card/sim-id
-           +--rw sim-card* [sim-id]
-           |  +--rw sim-id          sim-card-id
-           |  +--rw display-name?   string
-           |  +--rw description?    description
-           |  +--rw iccid?          at:iccid
-           |  +--rw imsi?           at:imsi
-           +--rw upf* [upf-id]
-           |  +--rw upf-id             upf-id
-           |  +--rw display-name?      string
-           |  +--rw description?       description
-           |  +--rw address            inet:host
-           |  +--rw port               inet:port-number
-           |  +--rw config-endpoint?   inet:uri
-           +--rw slice* [slice-id]
-           |  +--rw slice-id                 slice-id
-           |  +--rw display-name?            string
-           |  +--rw description?             description
-           |  +--rw device-group* [device-group]
-           |  |  +--rw device-group    -> ../../../device-group/device-group-id
-           |  |  +--rw enable?         boolean
-           |  +--rw default-behavior         at:behavior
-           |  +--rw filter* [application]
-           |  |  +--rw application    -> ../../../../application/application-id
-           |  |  +--rw priority?      at:priority
-           |  |  +--rw allow?         boolean
-           |  +--rw upf?                     -> ../../upf/upf-id
-           |  +--rw sst                      at:sst
-           |  +--rw sd                       at:sd
-           |  +--rw mbr
-           |  |  +--rw uplink?                at:bitrate
-           |  |  +--rw downlink?              at:bitrate
-           |  |  +--rw uplink-burst-size?     at:burst
-           |  |  +--rw downlink-burst-size?   at:burst
-           |  +--rw priority-traffic-rule* [priority-traffic-rule-id]
-           |     +--rw priority-traffic-rule-id    priority-traffic-rule-id
-           |     +--rw display-name?               string
-           |     +--rw description?                description
-           |     +--rw device                      -> ../../../device/device-id
-           |     +--rw application                 -> ../../../../application/application-id
-           |     +--rw endpoint                    -> ../../../../application/endpoint/endpoint-id
-           |     +--rw (bitrate)?
-           |     |  +--:(mbr-case)
-           |     |  |  +--rw mbr
-           |     |  |     +--rw uplink?     at:bitrate
-           |     |  |     +--rw downlink?   at:bitrate
-           |     |  +--:(gbr-case)
-           |     |     +--rw gbr
-           |     |        +--rw uplink?     at:bitrate
-           |     |        +--rw downlink?   at:bitrate
-           |     +--rw traffic-class?              -> ../../../../traffic-class/traffic-class-id
-           +--rw device-group* [device-group-id]
-           |  +--rw device-group-id    device-group-id
-           |  +--rw display-name?      string
-           |  +--rw description?       description
-           |  +--rw device* [device-id]
-           |  |  +--rw device-id    -> ../../../device/device-id
-           |  |  +--rw enable?      boolean
-           |  +--rw ip-domain?         -> ../../ip-domain/ip-domain-id
-           |  +--rw mbr
-           |  |  +--rw uplink      at:bitrate
-           |  |  +--rw downlink    at:bitrate
-           |  +--rw traffic-class      -> ../../../traffic-class/traffic-class-id
-           +--rw ip-domain* [ip-domain-id]
-              +--rw ip-domain-id     ip-domain-id
-              +--rw display-name?    string
-              +--rw description?     description
-              +--rw dnn              at:dnn
-              +--rw dns-primary?     inet:ip-address
-              +--rw dns-secondary?   inet:ip-address
-              +--rw subnet           inet:ipv4-prefix
-              +--rw admin-status?    at:admin-status
-              +--rw mtu?             at:mtu
-
diff --git a/config-models/aether-2.0.x/files/yang/ietf-inet-types.yang b/config-models/aether-2.0.x/files/yang/ietf-inet-types.yang
deleted file mode 100644
index fa57f75..0000000
--- a/config-models/aether-2.0.x/files/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,458 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      length "1..253";
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/config-models/aether-2.0.x/files/yang/ietf-yang-types.yang b/config-models/aether-2.0.x/files/yang/ietf-yang-types.yang
deleted file mode 100644
index ee58fa3..0000000
--- a/config-models/aether-2.0.x/files/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,474 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
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
deleted file mode 100755
index e825723..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-aether-types.yang
+++ /dev/null
@@ -1,223 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-aether-types {
-  namespace "http://opennetworking.org/aether/aether-types";
-  prefix at;
-
-  import ietf-inet-types { prefix inet; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "A set of base types for aether modeling.";
-
-  revision "2021-09-10" {
-    description "Aether Base Types";
-    reference "RFC 6087";
-  }
-
-  typedef aether-identifier {
-    type string {
-        length 1..63;
-        pattern '[a-z]([a-z0-9-]?[a-z0-9])*';
-    }
-    description "Identifier for objects in the Aether modeling";
-  }
-
-  typedef imsi {
-      type uint64 {
-      }
-    description "International Mobile Subscriber Identity";
-  }
-
-  typedef imei {
-      type string {
-          length 14..16;
-          pattern '[0-9]{14,16}';
-      }
-    description "International Mobile Equipment Identity";
-  }
-
-  typedef iccid {
-      type string {
-          length 19..22;
-          pattern '[0-9]{18,21}[0-9A-F]';
-      }      
-    description "Integrated Circuit Card ID";
-  }
-
-  typedef bitrate {
-      type uint64 {
-      }
-    description "The typedef for bitrate";
-  }
-
-  typedef burst {
-      type uint32 {
-      }
-      default 625000;
-    description "The typedef for burst";
-  }
-
-  typedef mcc {
-      type string {
-        pattern '[0-9]{3}';
-      }
-    description "The typedef for mcc";
-  }
-
-  typedef mnc {
-      type string {
-        pattern '[0-9]{2,3}';
-      }
-    description "The typedef for mnc";
-  }
-
-  typedef tac {
-      type string {
-        length 4..8;
-        pattern '[0-9A-F\.]*';
-      }
-    description "The typedef for tac";
-  }
-
-  typedef ent {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for ent";
-  }
-
-  typedef dnn {
-      type string {
-        length 1..32;
-      }
-    description "The typedef for dnn";
-  }
-
-  typedef sst {
-      type uint8 {
-        range 1..255;
-      }
-    description "The typedef for sst";
-  }
-
-  typedef sd {
-      type uint32 {
-        range 0..16777215;
-      }
-    description "The typedef for sd";
-  }
-
-  typedef qci {
-      type uint8 {
-        range 1..32;
-      }
-    description "The typedef for qci";
-  }
-
-  typedef arp {
-      type uint8 {
-        range 1..15;
-      }
-    description "The typedef for arp";
-  }
-
-  typedef pelr {
-      type int8 {
-        range 0..10;
-      }
-    description "The typedef for pelr";
-  }
-
-  typedef pdb {
-      type uint16 {
-        range 0..1000;
-      }
-    description "The typedef for pdb";
-  }
-
-  typedef priority {
-    type uint8 {
-      // priorities 201-255 are reserved for system use
-      range 0..200;
-    }
-    description "The typedef for priority";
-  }
-
-  // "TCP" or "UDP"
-  typedef protocol {
-      type string {
-        length 3;
-        pattern "TCP|UDP";
-      }
-      default "TCP";
-    description "The typedef for protocol";
-  }
-
-  // "ENABLE" | "MAINTENTANCE" | "DISABLE"
-  typedef admin-status {
-      type string {
-        length 0..16;
-        pattern "ENABLE|MAINTENANCE|DISABLE";
-      }
-      default "ENABLE";
-    description "The typedef for admin-status";
-  }
-
-  typedef behavior {
-      type string {
-        length 0..20;
-        pattern "DENY-ALL|ALLOW-ALL|ALLOW-PUBLIC";
-      }
-    description "The typedef for behavior";
-  }
-
-  typedef mtu {
-      type inet:port-number;
-      default 1492;
-    description "The typedef for mtu";
-  }
-
-  typedef description {
-    type string {
-      length 1..1024;
-    }
-    description "The typedef for description";
-  }
-
-  grouping desc-display-name {
-    description "reusable leafs for description and display-name";
-    leaf display-name {
-      type string {
-          length 1..80;
-      }
-      description "display name to use in GUI or CLI";
-    }
-
-    leaf description {
-      type description;
-      description "long description field";
-    }
-  }
-
-  typedef ipv4-subnet {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(/([0-9]|[1-2][0-9]|3[0-2]))';      
-    }
-    description "IPv4 network in CIDR notation";
-  }
-
-  typedef host-or-network {
-    type union {
-      type inet:host;
-      type ipv4-subnet;
-    }
-    description "hostname, ip-address, or network";
-  } 
-}
- 
\ No newline at end of file
diff --git a/config-models/aether-2.0.x/files/yang/onf-application.yang b/config-models/aether-2.0.x/files/yang/onf-application.yang
deleted file mode 100755
index 28a1f1c..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-application.yang
+++ /dev/null
@@ -1,108 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-application {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import ietf-inet-types{ prefix ietf; }
-  import onf-aether-types{ prefix at; }
-
-  include onf-traffic-class;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Application is an application that devices may
-     connect to. Includes a set of endpoints where services are
-     provided.";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-09-10" {
-    description "Aether Application.";
-    reference "RFC 6087";
-  }
-
-  typedef application-id {
-    type at:aether-identifier;
-    description "The typedef for application-id";
-  }
-
-  grouping application {
-    description "The application grouping";
-
-    list application {
-      key "application-id";
-      description
-        "List of applications";
-
-      leaf application-id {
-        type application-id;
-        description "ID for this application.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf address {
-        type at:host-or-network;
-        mandatory true;
-        description
-            "Address of this application. Either a hostname, an IP, or a subnet.";
-      }
-
-      list endpoint {
-        key "endpoint-id";
-        leaf endpoint-id {
-          type at:aether-identifier;
-          description
-              "Id of this endpoint";
-        }
-
-        uses at:desc-display-name;
-
-        leaf port-start {
-          type ietf:port-number;
-          description
-              "First port in range";
-        }
-        leaf port-end {
-          type ietf:port-number;
-          description
-              "Last port in range";
-        }
-        leaf protocol {
-          type at:protocol;
-          description
-              "Protocol of this endpoint";
-        }
-        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";
-          }
-        }
-        leaf traffic-class {
-          type leafref {
-            path "../../../traffic-class/traffic-class-id";
-          }
-          description
-            "Link to traffic class";
-        }
-
-        description "list for endpoint";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/files/yang/onf-connectivity-service.yang b/config-models/aether-2.0.x/files/yang/onf-connectivity-service.yang
deleted file mode 100755
index 20bda31..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-connectivity-service.yang
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-connectivity-service {
-  namespace "http://opennetworking.org/aether/connectivity-service";
-  prefix cs;
-
-  import ietf-inet-types { prefix inet; }
-  import onf-aether-types { prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Connectivity service is the linkage between the
-     ROC and a core that provides connectivity.";
-
-  revision "2022-01-14" {
-    description "Renamed top level container as plural";
-    reference "RFC 6020";
-  }
-
-  revision "2021-10-21" {
-    description "An Aether Connectivity Service. Specifies the endpoints where the sdcore-adapter should push configuration to. A single connectivity service may be attached to multiple Enterprises.";
-    reference "RFC 6087";
-  }
-
-  typedef connectivity-service-id {
-    type at:aether-identifier;
-    description "The typedef for connectivity-service-id";
-  }
-
-  container connectivity-services {
-    description "The connectivity-services top level container";
-
-    list connectivity-service {
-      key "connectivity-service-id";
-      description
-        "List of connectivity services";
-
-      leaf connectivity-service-id {
-        type connectivity-service-id;
-        description "ID for this connectivity service.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf core-5g-endpoint {
-        type inet:uri;
-        description "url of the 5g core";
-      }
-
-      leaf acc-prometheus-url {
-          type inet:uri;
-          description
-            "URL of ACC prometheus";
-      }
-    }
-  }
-}
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
deleted file mode 100755
index 1e03806..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-device-group.yang
+++ /dev/null
@@ -1,111 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-device-group {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import onf-aether-types { prefix at; }
-
-  include onf-ip-domain;
-  include onf-traffic-class;
-  include onf-device;
-
-  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 "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-06-02" {
-    description "An Aether Device Group";
-    reference "RFC 6087";
-  }
-
-  typedef device-group-id {
-    type at:aether-identifier;
-    description "The typedef for device-group-id";
-  }
-
-  grouping device-group {
-    description "The device-group grouping";
-
-    list device-group {
-      key "device-group-id";
-      description
-        "List of device groups";
-
-      leaf device-group-id {
-        type device-group-id;
-        description "ID for this device group.";
-      }
-
-      uses at:desc-display-name;
-
-      list device {
-        key "device-id";
-        leaf device-id {
-          type leafref {
-            path "../../../device/device-id";
-          }
-          description
-             "Link to device";
-        }
-        leaf enable {
-          type boolean;
-          default true;
-          description
-            "Enable this device";
-        }
-        description "list of devices in this device-group";
-      }
-
-      leaf ip-domain {
-        type leafref {
-          path "../../ip-domain/ip-domain-id";
-        }
-        description
-          "Link to ip-domain settings that determine the pool of IP addresses,
-           as well as the domain resolver settings to use";
-      }
-
-      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 "../../../traffic-class/traffic-class-id";
-        }
-        mandatory true;
-        description
-          "Link to traffic class";
-      }
-    }
-  }
-}
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
deleted file mode 100644
index 3a8abd8..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-device.yang
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-device {
-  belongs-to onf-enterprise { prefix ent; }
-
-  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 at:aether-identifier;
-    description "The typedef for device-id";
-  }
-
-  grouping device {
-    description "The top level container";
-
-    list device {
-      key "device-id";
-      unique "imei";
-      description
-        "List of devices";
-
-      leaf device-id {
-        type device-id;
-        description "ID for this device.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf imei {
-        type at:imei;
-        description
-           "IMEI for this device";
-      }
-
-      // 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
deleted file mode 100755
index 61a453e..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-enterprise.yang
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-enterprise {
-  namespace "http://opennetworking.org/aether/enterprise";
-  prefix ent;
-
-  import onf-aether-types { prefix at; }
-  import onf-connectivity-service { prefix cs; }
-
-  include onf-site;
-  include onf-upf;
-  include onf-slice;
-  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";
-  description
-    "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";
-  }
-
-  revision "2021-06-02" {
-    description "An Aether Enterprise. Used to distinguish ownership of devices and other resources as well as a domain of configuration.";
-    reference "RFC 6087";
-  }
-
-  typedef enterprise-id {
-     type at:aether-identifier;
-     description "The typedef for enterprise-id";
-  }
-
-  container enterprises {
-    description "The top level enterprises container";
-
-    list enterprise {
-      key "enterprise-id";
-      description
-        "List of enterprises";
-
-      leaf enterprise-id {
-        type enterprise-id;
-        description "ID for this enterprise.";
-      }
-
-      uses at:desc-display-name;
-
-      list connectivity-service {
-        key "connectivity-service";
-        leaf connectivity-service {
-          type leafref {
-            path "/cs:connectivity-services/cs:connectivity-service/cs:connectivity-service-id";
-          }
-          description
-            "Link to connectivity services where configuration should be pushed for this enterprise's devices";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Allow or disallow pushes to this connectivity service";
-        }
-        description "The list for connectivity-service";
-      }
-
-      uses application;
-
-      uses traffic-class;
-
-      uses template;
-
-      uses site;
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/files/yang/onf-ip-domain.yang b/config-models/aether-2.0.x/files/yang/onf-ip-domain.yang
deleted file mode 100755
index dbd81ae..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-ip-domain.yang
+++ /dev/null
@@ -1,83 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-ip-domain {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import ietf-inet-types { prefix inet; }
-  import onf-aether-types { prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether IP-Domain. This is a list of available subnets
-     that may be assigned to UEs, as well as DNS servers and other
-     metadata";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-06-02" {
-    description "An Aether IP and Domain Specification";
-    reference "RFC 6087";
-  }
-
-  typedef ip-domain-id {
-    type at:aether-identifier;
-    description "The typedef for ip-domain-id";
-  }
-
-  grouping ip-domain {
-    description "The ip-domain grouping";
-
-    list ip-domain {
-      key "ip-domain-id";
-      description
-        "List of ip domains";
-
-      leaf ip-domain-id {
-        type ip-domain-id;
-        description "ID for this ip domain.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf dnn {
-        type at:dnn;
-        mandatory true;
-        description "DNN/APN";
-      }
-
-      leaf dns-primary {
-        type inet:ip-address;
-        description "primary dns server name";
-      }
-
-      leaf dns-secondary {
-        type inet:ip-address;
-        description "secondary dns server name";
-      }
-
-      // Note: Cannot use a subnet as a list key. Dropped support from a
-      // list of subnets to a single subnet. Revisit in the future.
-      leaf subnet {
-        type inet:ipv4-prefix;
-        mandatory true;
-        description "subnet to allocate ip addresses from";
-      }
-
-      leaf admin-status {
-        type at:admin-status;
-        description "administrative status";
-      }
-
-      leaf mtu {
-        type at:mtu;
-        description "maximum transmission unit";
-      }
-    }
-  }
-}
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
deleted file mode 100755
index 2706eba..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-priority-traffic-rule.yang
+++ /dev/null
@@ -1,112 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-priority-traffic-rule {
-  belongs-to onf-enterprise { prefix ent; }
-
-  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 at:aether-identifier;
-    description "The typedef for priority traffic rule id";
-  }
-
-  grouping priority-traffic-rule {
-    description "The top level container";
-
-    list priority-traffic-rule {
-      key "priority-traffic-rule-id";
-      unique "device endpoint";
-      description
-        "List of priority traffic rules";
-
-      leaf priority-traffic-rule-id {
-        type priority-traffic-rule-id;
-        description "ID for this priority traffic class.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf device {
-        type leafref {
-          path "../../../device/device-id";
-        }
-        mandatory true;
-        description
-          "Link to device";
-      }
-
-      leaf application {
-        type leafref {
-          path "../../../../application/application-id";
-        }
-        mandatory true;
-        description
-          "Link to application";
-      }
-
-      leaf endpoint {
-        type leafref {
-          path "../../../../application/endpoint/endpoint-id";
-        }
-        mandatory true;
-        description
-          "Link to endpoint in application";
-      }
-
-      choice bitrate {
-        description "Either an GBR or an MBR can be specified, but not both";
-        case mbr-case {
-          container mbr {
-            description "Per-Device per-Application MBR (Maximum BitRate) in bps";
-            uses bitrate;
-          }
-        }
-        case gbr-case {
-          container gbr {
-            description "Per-Device per-Application GBR (Guaranteed BitRate) in bps";
-            uses bitrate;
-          }
-        }
-      }
-
-      leaf traffic-class {
-        type leafref {
-          path "../../../../traffic-class/traffic-class-id";
-        }
-        description
-          "Link to traffic class";
-      }
-    }
-  }
-
-  grouping bitrate {
-      description "uplink and downlink leafs for GBR and MBR";
-      leaf uplink {
-        type at:bitrate;
-        units bps;
-        description "Per-Device per-Application uplink data rate in bps";
-      }
-
-      leaf downlink {
-        type at:bitrate;
-        units bps;
-        description "Per-Device per application downlink data rate in bps";
-      }
-  }
-}
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
deleted file mode 100644
index b263f33..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-sim-card.yang
+++ /dev/null
@@ -1,54 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-sim-card {
-  belongs-to onf-enterprise { prefix ent; }
-
-  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 at:aether-identifier;
-    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.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf iccid {
-        type at:iccid;
-        description
-           "ICCID for this sim card";
-      }
-
-      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
deleted file mode 100755
index ae89379..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-site.yang
+++ /dev/null
@@ -1,161 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-site {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import ietf-inet-types { prefix inet; }
-  import onf-aether-types{ prefix at; }
-
-  include onf-device;
-  include onf-sim-card;
-  include onf-upf;
-  include onf-slice;
-  include onf-device-group;
-  include onf-ip-domain;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether site is a location where resources are deployed.";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-09-10" {
-    description "An Aether Site.";
-    reference "RFC 6087";
-  }
-
-  typedef site-id {
-    type at:aether-identifier;
-    description "The typedef for site-id";
-  }
-
-  grouping site {
-    description "The site grouping";
-
-    list site {
-      key "site-id";
-      description
-        "List of site";
-
-      leaf site-id {
-        type site-id;
-        description "ID for this site.";
-      }
-
-      uses at:desc-display-name;
-
-      list small-cell {
-        key "small-cell-id";
-        leaf small-cell-id {
-          type at:aether-identifier;
-          description
-            "Id of small cell";
-        }
-
-        uses at:desc-display-name;
-
-        leaf address {
-          type inet:host;
-          description
-            "Address of small cell";
-        }
-        leaf tac {
-          type at:tac;
-          mandatory true;
-          description
-              "Type Allocation Code";
-        }
-        leaf enable {
-          type boolean;
-          default true;
-          description
-            "Enable this small cell";
-        }
-        description
-          "List of small cell addresses";
-      }
-
-      container monitoring {
-        leaf edge-cluster-prometheus-url {
-          type inet:uri;
-          description
-            "URL of edge cluster prometheus";
-        }
-        leaf edge-monitoring-prometheus-url {
-          type inet:uri;
-          description
-            "URL of monitoring prometheus";
-        }
-        list edge-device {
-          key "edge-device-id";
-          leaf edge-device-id {
-            type at:aether-identifier;
-            description
-              "Id of edge monitoring device";
-          }
-          uses at:desc-display-name;
-
-          description
-            "List of edge monitoring devices";
-        }
-        description
-            "container for monitoring";
-      }
-
-      container imsi-definition {
-        leaf mcc {
-          type at:mcc;
-          mandatory true;
-          description "mobile country code";
-        }
-        leaf mnc {
-          type at:mnc;
-          mandatory true;
-          description "mobile network code";
-        }
-        leaf enterprise {
-          type at:ent;
-          mandatory true;
-          description "enterprise-specific identifier";
-        }
-        leaf format {
-          type string {
-            length 15;
-          }
-          mandatory true;
-          description "IMSI format specifier, describes how fields are packed into an IMSI. Must be exactly 15 characters long. For example, CCCNNNEEESSSSSS.";
-          // Format specifiers:
-          //   C = MCC
-          //   N = MNC
-          //   E = Enterprise
-          //   0 = Forced Zero
-          //   S = Subscriber ID
-          // default is
-          //   3 digit MCC
-          //   3 digit MNC
-          //   3 digit enterprise ID
-          //   5 digit subscriber ID
-        }
-        description "container for imsi-defination";
-      }
-
-      uses device;
-
-      uses sim-card;
-
-      uses upf;
-
-      uses slice;
-
-      uses device-group;
-
-      uses ip-domain;
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/files/yang/onf-slice.yang b/config-models/aether-2.0.x/files/yang/onf-slice.yang
deleted file mode 100755
index cad763f..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-slice.yang
+++ /dev/null
@@ -1,159 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-slice {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import onf-aether-types{ prefix at; }
-
-  include onf-upf;
-  include onf-device-group;
-  include onf-application;
-  include onf-priority-traffic-rule;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Slice is
-     used to connect devices with applications";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-09-10" {
-    description "An Aether Slice";
-    reference "RFC 6087";
-  }
-
-  typedef slice-id {
-    type at:aether-identifier;
-    description "The typedef for slice-id";
-  }
-
-  grouping slice {
-    description "The slice grouping";
-
-    list slice {
-      key "slice-id";
-      description
-        "List of Slices";
-
-      leaf slice-id {
-        type slice-id;
-        description "ID for this slice.";
-      }
-
-      uses at:desc-display-name;
-
-      list device-group {
-        key "device-group";
-        leaf device-group {
-          type leafref {
-            path "../../../device-group/device-group-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 Slice 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 "../../../../application/application-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-id";
-        }
-        description
-          "Link to user plane that implements this vcf";
-      }
-
-      // 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 mbr {
-        description "Per slice Maximum Bit Rate";
-        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
-      uses priority-traffic-rule;
-
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/files/yang/onf-template.yang b/config-models/aether-2.0.x/files/yang/onf-template.yang
deleted file mode 100755
index a96b9bc..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-template.yang
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-template {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import onf-aether-types{ prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "The aether slice-template holds common parameters used
-     by a Slice. Templates are used to
-     populate a Slice.";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-09-10" {
-    description "An Aether Slice Template";
-    reference "RFC 6087";
-  }
-
-  typedef template-id {
-    type at:aether-identifier;
-    description "The typedef for template-id";
-  }
-
-  grouping template {
-    description "The template grouping";
-
-    list template {
-      key "template-id";
-      description
-        "List of slice templates";
-
-      leaf template-id {
-        type template-id;
-        description "ID for this slice template.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf sst {
-        type at:sst;
-        description "Slice/Service type";
-      }
-
-      leaf sd {
-        type at:sd;
-        description "Slice differentiator";
-      }
-
-      container mbr {
-        description "Per-Slice QOS Settings Maximum Bit Rate";
-        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";
-        }
-      }
-
-      leaf default-behavior {
-        type at:behavior;
-        mandatory true;
-        description
-          "Default behavior if no filter rules match";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/files/yang/onf-traffic-class.yang b/config-models/aether-2.0.x/files/yang/onf-traffic-class.yang
deleted file mode 100755
index 5f1e021..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-traffic-class.yang
+++ /dev/null
@@ -1,67 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-traffic-class {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import onf-aether-types{ prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "The aether traffic class associates qos constants
-     with a named class of service";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-09-10" {
-    description "An Aether Traffic Class";
-    reference "RFC 6087";
-  }
-
-  typedef traffic-class-id {
-    type at:aether-identifier;
-    description "The typedef for traffic-class-id";
-  }
-
-  grouping traffic-class {
-    description "The traffic-class grouping";
-
-    list traffic-class {
-      key "traffic-class-id";
-      description
-        "List of traffic class";
-
-      leaf traffic-class-id {
-        type traffic-class-id;
-        description "ID for this traffic class.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf arp {
-        type at:arp;
-        description "Allocation and Retention Priority. 1 is the highest. 15 is the lowest.";
-      }
-
-      leaf qci {
-        type at:qci;
-        description "QOS Class Identifier";
-      }
-
-      leaf pelr {
-        type at:pelr;
-        description "PELR exponent";
-      }
-
-      leaf pdb {
-        type at:pdb;
-        description "PDB";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/files/yang/onf-upf.yang b/config-models/aether-2.0.x/files/yang/onf-upf.yang
deleted file mode 100755
index fdfbafc..0000000
--- a/config-models/aether-2.0.x/files/yang/onf-upf.yang
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-submodule onf-upf {
-  belongs-to onf-enterprise { prefix ent; }
-
-  import ietf-inet-types { prefix inet; }
-  import onf-aether-types { prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "A Aether UPF List is a named User Plane Function.";
-
-  revision "2022-01-14" {
-    description "Refactored as submodule";
-    reference "RFC 6020";
-  }
-
-  revision "2021-09-16" {
-    description "An Aether User Plane Function";
-    reference "RFC 6087";
-  }
-
-  typedef upf-id {
-    type at:aether-identifier;
-    description "The typedef for upf-id";
-  }
-
-  grouping upf {
-    description "The upf grouping";
-
-    list upf {
-      key "upf-id";
-      description
-        "A list of named upfs.";
-
-      leaf upf-id {
-        type upf-id;
-        description "ID for this upf.";
-      }
-
-      uses at:desc-display-name;
-
-      leaf address {
-        type inet:host;
-        mandatory true;
-        description
-          "Address of UPF";
-      }
-
-      leaf port {
-        type inet:port-number;
-        mandatory true;
-        description
-            "Port for UPF";
-      }
-
-      leaf config-endpoint {
-        type inet:uri;
-        description "url for configuring the UPF";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.0.x/templates/_helpers.tpl b/config-models/aether-2.0.x/templates/_helpers.tpl
deleted file mode 100644
index bb84c33..0000000
--- a/config-models/aether-2.0.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-{{/* vim: set filetype=mustache: */}}
-{{/*
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-SPDX-License-Identifier: Apache-2.0
-
-Expand the name of the chart.
-*/}}
-{{- define "aether.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "aether.fullname" -}}
-{{- if contains "config-model-aether" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-aether" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "aether.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "aether.labels" -}}
-helm.sh/chart: {{ include "aether.chart" . }}
-{{ include "aether.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "aether.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "aether.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/aether-2.0.x/templates/model.yaml b/config-models/aether-2.0.x/templates/model.yaml
deleted file mode 100644
index f3a73f0..0000000
--- a/config-models/aether-2.0.x/templates/model.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "aether.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "aether.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: Aether
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: onf-connectivity-service
-    organization: Open Networking Foundation
-    revision: 2022-01-14
-    file: onf-connectivity-service.yang
-  - name: onf-enterprise
-    organization: Open Networking Foundation
-    revision: 2022-01-14
-    file: onf-enterprise.yang
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/aether-2.0.x/values.yaml b/config-models/aether-2.0.x/values.yaml
deleted file mode 100644
index aec2bd5..0000000
--- a/config-models/aether-2.0.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
diff --git a/config-models/aether-2.1.x/.helmignore b/config-models/aether-2.1.x/.helmignore
deleted file mode 100644
index 862263b..0000000
--- a/config-models/aether-2.1.x/.helmignore
+++ /dev/null
@@ -1,25 +0,0 @@
-# SPDX-FileCopyrightText: 2021 Open Networking Foundation
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Patterns to ignore when building packages.
-# This supports shell glob matching, relative path matching, and
-# negation (prefixed with !). Only one pattern per line.
-.DS_Store
-# Common VCS dirs
-.git/
-.gitignore
-.bzr/
-.bzrignore
-.hg/
-.hgignore
-.svn/
-# Common backup files
-*.swp
-*.bak
-*.tmp
-*~
-# Various IDEs
-.project
-.idea/
-*.tmproj
diff --git a/config-models/aether-2.1.x/Chart.yaml b/config-models/aether-2.1.x/Chart.yaml
deleted file mode 100644
index f073808..0000000
--- a/config-models/aether-2.1.x/Chart.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-aether-2
-version: 2.1.6
-kubeVersion: ">=1.18.0"
-appVersion: 2.1.0
-description: Aether config model
-keywords:
-  - onos
-  - sdn
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
diff --git a/config-models/aether-2.1.x/files/aether-2.1.0.tree b/config-models/aether-2.1.x/files/aether-2.1.0.tree
deleted file mode 100644
index 84dd39a..0000000
--- a/config-models/aether-2.1.x/files/aether-2.1.0.tree
+++ /dev/null
@@ -1,153 +0,0 @@
-module: access-profile
-  +--rw access-profile
-     +--rw access-profile* [id]
-        +--rw id              access-profile-id
-        +--rw display-name?   string
-        +--rw type?           string
-        +--rw filter?         string
-        +--rw description?    string
-
-module: aether-subscriber
-  +--rw subscriber
-     +--rw ue* [id]
-        +--rw id                       ietf:uuid
-        +--rw display-name?            string
-        +--rw (imsi)?
-        |  +--:(wildcard)
-        |  |  +--rw imsi-wildcard?     string
-        |  +--:(range)
-        |     +--rw imsi-range-from?   uint64
-        |     +--rw imsi-range-to?     uint64
-        +--rw serving-plmn
-        |  +--rw mcc?   mcc
-        |  +--rw mnc?   mnc
-        |  +--rw tac?   tac
-        +--rw requested-apn?           string
-        +--rw priority?                uint32
-        +--rw enabled?                 boolean
-        +--rw enterprise?              -> /ent:enterprise/enterprise/id
-        +--rw profiles
-           +--rw apn-profile?        -> /apn:apn-profile/apn-profile/id
-           +--rw up-profile?         -> /up:up-profile/up-profile/id
-           +--rw qos-profile?        -> /qos:qos-profile/qos-profile/id
-           +--rw access-profile* [access-profile]
-           |  +--rw access-profile    -> /ap:access-profile/access-profile/id
-           |  +--rw allowed?          boolean
-           +--rw security-profile?   -> /sec:security-profile/security-profile/id
-
-module: apn-profile
-  +--rw apn-profile
-     +--rw apn-profile* [id]
-        +--rw id               apn-profile-id
-        +--rw display-name?    string
-        +--rw apn-name?        string
-        +--rw dns-primary?     inet:ip-address
-        +--rw dns-secondary?   inet:ip-address
-        +--rw mtu?             uint32
-        +--rw gx-enabled?      boolean
-        +--rw description?     string
-        +--rw service-group?   -> /sg:service-group/service-group/id
-
-module: connectivity-service
-  +--rw connectivity-service
-     +--rw connectivity-service* [id]
-        +--rw id                connectivity-service-id
-        +--rw display-name?     string
-        +--rw description?      string
-        +--rw spgwc-endpoint?   inet:uri
-        +--rw hss-endpoint?     inet:uri
-        +--rw pcrf-endpoint?    inet:uri
-
-module: enterprise
-  +--rw enterprise
-     +--rw enterprise* [id]
-        +--rw id                      enterprise-id
-        +--rw display-name?           string
-        +--rw description?            string
-        +--rw connectivity-service* [connectivity-service]
-           +--rw connectivity-service    -> /cs:connectivity-service/connectivity-service/id
-           +--rw enabled?                boolean
-
-module: qos-profile
-  +--rw qos-profile
-     +--rw qos-profile* [id]
-        +--rw id              qos-profile-id
-        +--rw display-name?   string
-        +--rw apn-ambr
-        |  +--rw uplink?     uint32
-        |  +--rw downlink?   uint32
-        +--rw qci?            uint32
-        +--rw arp
-        |  +--rw priority?                   uint32
-        |  +--rw preemption-capability?      boolean
-        |  +--rw preemption-vulnerability?   boolean
-        +--rw description?    string
-
-module: security-profile
-  +--rw security-profile
-     +--rw security-profile* [id]
-        +--rw id              security-profile-id
-        +--rw display-name?   string
-        +--rw key?            string
-        +--rw opc?            string
-        +--rw sqn?            uint32
-        +--rw description?    string
-
-module: service-group
-  +--rw service-group
-     +--rw service-group* [id]
-        +--rw id                  service-group-id
-        +--rw display-name?       string
-        +--rw service-policies* [service-policy]
-        |  +--rw service-policy    -> /serv:service-policy/service-policy/id
-        |  +--rw kind?             service-kind
-        +--rw description?        string
-
-module: service-policy
-  +--rw service-policy
-     +--rw service-policy* [id]
-        +--rw id              service-policy-id
-        +--rw display-name?   string
-        +--rw qci?            uint32
-        +--rw arp?            uint32
-        +--rw ambr
-        |  +--rw uplink?     uint32
-        |  +--rw downlink?   uint32
-        +--rw rules* [rule]
-        |  +--rw rule       -> /sr:service-rule/service-rule/id
-        |  +--rw enabled?   boolean
-        +--rw description?    string
-
-module: service-rule
-  +--rw service-rule
-     +--rw service-rule* [id]
-        +--rw id                    service-rule-id
-        +--rw display-name?         string
-        +--rw charging-rule-name?   string
-        +--rw qos
-        |  +--rw qci?                           uint32
-        |  +--rw arp
-        |  |  +--rw priority?                   uint32
-        |  |  +--rw preemption-capability?      boolean
-        |  |  +--rw preemption-vulnerability?   boolean
-        |  +--rw maximum-requested-bandwidth
-        |  |  +--rw uplink?     uint32
-        |  |  +--rw downlink?   uint32
-        |  +--rw guaranteed-bitrate
-        |  |  +--rw uplink?     uint32
-        |  |  +--rw downlink?   uint32
-        |  +--rw aggregate-maximum-bitrate
-        |     +--rw uplink?     uint32
-        |     +--rw downlink?   uint32
-        +--rw flow
-        |  +--rw specification?   string
-        +--rw description?          string
-
-module: up-profile
-  +--rw up-profile
-     +--rw up-profile* [id]
-        +--rw id                up-profile-id
-        +--rw display-name?     string
-        +--rw user-plane?       string
-        +--rw access-control?   string
-        +--rw description?      string
diff --git a/config-models/aether-2.1.x/files/yang/access-profile.yang b/config-models/aether-2.1.x/files/yang/access-profile.yang
deleted file mode 100755
index 49009fe..0000000
--- a/config-models/aether-2.1.x/files/yang/access-profile.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module access-profile {
-  namespace "http://opennetworking.org/aether/access-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether access Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef access-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for access-profile-id";
-  }
-
-  container access-profile {
-    description "The top level container";
-
-    list access-profile {
-      key "id";
-      description
-        "List of access profiles";
-
-      leaf id {
-        type access-profile-id;
-        description "ID for this access profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf type {
-        type string {
-          length 1..32;
-        }
-        description "type of profile";
-      }
-
-      leaf filter {
-        type string {
-          length 0..32;
-        }
-        description "filter";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/aether-subscriber.yang b/config-models/aether-2.1.x/files/yang/aether-subscriber.yang
deleted file mode 100755
index 397bd97..0000000
--- a/config-models/aether-2.1.x/files/yang/aether-subscriber.yang
+++ /dev/null
@@ -1,188 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module aether-subscriber {
-  namespace "http://opennetworking.org/aether/subscriber";
-  prefix sub;
-
-  import apn-profile{ prefix apn; }
-  import qos-profile{ prefix qos; }
-  import up-profile{ prefix up; }
-  import access-profile{ prefix ap; }
-  import security-profile{ prefix sec; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix ietf; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether Subscriber";
-    reference "RFC 6087";
-  }
-
-  typedef mcc {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for mcc";
-  }
-
-  typedef mnc {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for mnc";
-  }
-
-  typedef tac {
-      type uint32 {
-        range 0..99999999;
-      }
-    description "The typedef for tac";
-  }
-
-  container subscriber {
-    description "The top level container";
-
-    list ue {
-      key "id";
-      description
-        "List of subscriber devices";
-
-      leaf id {
-	type ietf:uuid;
-        description "identifier for this subscriber, typically a UUID";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      choice imsi {
-        case wildcard {
-          leaf imsi-wildcard {
-            type string {
-              length 1..15;
-            }
-            description "leaf for imsi-wildcard";
-          }
-        }
-        case range {
-          leaf imsi-range-from {
-            type uint64;
-            description "leaf for imsi-range-from";
-          }
-          leaf imsi-range-to {
-            type uint64;
-            description "leaf for imsi-range-to";
-          }
-        }
-        description "The choice for imsi";
-      }
-
-      container serving-plmn {
-        leaf mcc {
-          type mcc;
-          description "mobile country code";
-        }
-        leaf mnc {
-          type mnc;
-          description "mobile network code";
-        }
-        leaf tac {
-          type tac;
-          description "type allocation code";
-        }
-        description "The container for serving-plmn";
-      }
-
-      leaf requested-apn {
-        type string {
-            length 0..31;
-        }
-        description "requested access point name";
-      }
-
-      leaf priority {
-        type uint32 {
-          range 0..1000;
-        }
-        default 0;
-        description
-          "Priority for this subscriber range";
-      }
-
-      leaf enabled {
-        type boolean;
-        default false;
-        description
-          "Enable or disable this ue";
-      }
-
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        description
-          "Link to enterprise that owns this UE range";
-      }
-
-      container profiles {
-        leaf apn-profile {
-          type leafref {
-            path "/apn:apn-profile/apn:apn-profile/apn:id";
-          }
-          description
-            "Link to apn profile";
-        }
-        leaf up-profile {
-          type leafref {
-            path "/up:up-profile/up:up-profile/up:id";
-          }
-          description
-            "Link to user plane profile";
-        }
-        leaf qos-profile {
-          type leafref {
-            path "/qos:qos-profile/qos:qos-profile/qos:id";
-          }
-          description
-            "Link to qos profile";
-        }
-        list access-profile {
-          key "access-profile";
-          leaf access-profile {
-            type leafref {
-              path "/ap:access-profile/ap:access-profile/ap:id";
-            }
-            description
-                "Link to access profile";
-          }
-          leaf allowed {
-            type boolean;
-            default true;
-            description
-              "Allow or disallow this ue to use this access profile";
-          }
-	  description "The list for access-profile";
-        }
-        leaf security-profile {
-          type leafref {
-            path "/sec:security-profile/sec:security-profile/sec:id";
-          }
-          description
-            "Link to security profile";
-        }
-        description "The container for profiles";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/apn-profile.yang b/config-models/aether-2.1.x/files/yang/apn-profile.yang
deleted file mode 100755
index 3d0ba48..0000000
--- a/config-models/aether-2.1.x/files/yang/apn-profile.yang
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module apn-profile {
-  namespace "http://opennetworking.org/aether/apn-profile";
-  prefix pro;
-
-  import ietf-inet-types { prefix inet; }
-  import service-group { prefix sg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether APN Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef apn-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for apn-profile-id";
-  }
-
-  container apn-profile {
-    description "The top level container";
-
-    list apn-profile {
-      key "id";
-      description
-        "List of apn profiles";
-
-      leaf id {
-        type apn-profile-id;
-        description "ID for this apn profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf apn-name {
-        type string {
-          length 1..32;
-        }
-        description "apn name";
-      }
-
-      leaf dns-primary {
-        type inet:ip-address;
-        description "primary dns server name";
-      }
-
-      leaf dns-secondary {
-        type inet:ip-address;
-        description "secondary dns server name";
-      }
-
-      leaf mtu {
-        type uint32 {
-          range 68..65535;
-        }
-        units bytes;
-        default 1460;
-        description "maximum transmission unit";
-      }
-
-      leaf gx-enabled {
-        type boolean;
-        default false;
-        description "enable gx interface";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-
-      leaf service-group {
-        type leafref {
-          path "/sg:service-group/sg:service-group/sg:id";
-        }
-        description
-          "Link to service group";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/connectivity-service.yang b/config-models/aether-2.1.x/files/yang/connectivity-service.yang
deleted file mode 100755
index 7a00b2f..0000000
--- a/config-models/aether-2.1.x/files/yang/connectivity-service.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module connectivity-service {
-  namespace "http://opennetworking.org/aether/connectivity-service";
-  prefix cs;
-
-  import ietf-inet-types { prefix inet; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-18" {
-    description "An Aether Connectivity Service. Specifies the endpoints where the sdcore-adapter should push configuration to. A single connectivity service may be attached to multiple Enterprises.";
-    reference "RFC 6087";
-  }
-
-  typedef connectivity-service-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for connectivity-service-id";
-  }
-
-  container connectivity-service {
-    description "The top level container";
-
-    list connectivity-service {
-      key "id";
-      description
-        "List of connectivity services";
-
-      leaf id {
-        type connectivity-service-id;
-        description "ID for this connectivity service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this connectivity service";
-      }
-
-      leaf spgwc-endpoint {
-        type inet:uri;
-        description "url of the spgwc service";
-      }
-
-      leaf hss-endpoint {
-        type inet:uri;
-        description "url of the hss service";
-      }
-
-      leaf pcrf-endpoint {
-        type inet:uri;
-        description "url of the pcrf service";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/enterprise.yang b/config-models/aether-2.1.x/files/yang/enterprise.yang
deleted file mode 100755
index dfb1b60..0000000
--- a/config-models/aether-2.1.x/files/yang/enterprise.yang
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module enterprise {
-  namespace "http://opennetworking.org/aether/enterprise";
-  prefix ent;
-
-  import connectivity-service { prefix cs; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-11-30" {
-    description "An Aether Enterprise. Used to distinguish ownership of devices and other resources as well as a domain of configuration.";
-    reference "RFC 6087";
-  }
-
-  typedef enterprise-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for enterprise-id";
-  }
-
-  container enterprise {
-    description "The top level container";
-
-    list enterprise {
-      key "id";
-      description
-        "List of enterprises";
-
-      leaf id {
-        type enterprise-id;
-        description "ID for this enterprise.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this enterprise";
-      }
-
-      list connectivity-service {
-        key "connectivity-service";
-        leaf connectivity-service {
-          type leafref {
-            path "/cs:connectivity-service/cs:connectivity-service/cs:id";
-          }
-          description
-            "Link to connectivity services where configuration should be pushed for this enterprise's devices";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Allow or disallow pushes to this connectivity service";
-        }
-	description "The list for connectivity-service";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/ietf-inet-types.yang b/config-models/aether-2.1.x/files/yang/ietf-inet-types.yang
deleted file mode 100644
index fa57f75..0000000
--- a/config-models/aether-2.1.x/files/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,458 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      length "1..253";
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/config-models/aether-2.1.x/files/yang/ietf-yang-types.yang b/config-models/aether-2.1.x/files/yang/ietf-yang-types.yang
deleted file mode 100644
index ee58fa3..0000000
--- a/config-models/aether-2.1.x/files/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,474 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/qos-profile.yang b/config-models/aether-2.1.x/files/yang/qos-profile.yang
deleted file mode 100755
index 35204d9..0000000
--- a/config-models/aether-2.1.x/files/yang/qos-profile.yang
+++ /dev/null
@@ -1,113 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module qos-profile {
-  namespace "http://opennetworking.org/aether/qos-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether qos Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef qos-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for qos-profile-id";
-  }
-
-  container qos-profile {
-    description "The top level container";
-
-    list qos-profile {
-      key "id";
-      description
-        "List of qos profiles";
-
-      leaf id {
-        type qos-profile-id;
-        description "ID for this qos profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      container apn-ambr {
-        leaf uplink {
-          type uint32 {
-            range 0..4294967295;
-          }
-	  units bps;
-          default 0;
-          description
-            "Upstream aggregate maximum bit rate";
-        }
-        leaf downlink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Downstream aggregate maximum bit rate";
-        }
-        description "The container for apn-ambr";
-      }
-
-      leaf qci {
-        type uint32 {
-          range 0..85;
-        }
-        default 9;
-        description
-          "QoS Class Identifier";
-      }
-
-      container arp {
-        leaf priority {
-          type uint32 {
-            range 0..15;
-          }
-          default 0;
-          description
-            "Priority";
-        }
-        leaf preemption-capability {
-          type boolean;
-          default true;
-          description
-            "True if a bearer with lower priority should be dropped";
-        }
-        leaf preemption-vulnerability {
-          type boolean;
-          default true;
-          description
-            "This bearer may be dropped for a bearer with higher priority";
-        }
-        description "Evolved-ARP";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/security-profile.yang b/config-models/aether-2.1.x/files/yang/security-profile.yang
deleted file mode 100755
index e6c5367..0000000
--- a/config-models/aether-2.1.x/files/yang/security-profile.yang
+++ /dev/null
@@ -1,74 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module security-profile {
-  namespace "http://opennetworking.org/aether/security-profile";
-  prefix sec;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-11-30" {
-    description "An Aether Security Profile. Contains keys and other security items associated with devices. Configured by the operator.";
-    reference "RFC 6087";
-  }
-
-  typedef security-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for security-profile-id";
-  }
-
-  container security-profile {
-    description "The top level container";
-
-    list security-profile {
-      key "id";
-      description
-        "List of security profiles";
-
-      leaf id {
-        type security-profile-id;
-        description "ID for this security profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf key {
-        type string {
-          length 1..32;
-        }
-        description "Secret key for USIM";
-      }
-
-      leaf opc {
-        type string {
-          length 1..32;
-        }
-        description "Secret key for Operator";
-      }
-
-      leaf sqn {
-        type uint32;
-        description "sequence number";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this security profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/service-group.yang b/config-models/aether-2.1.x/files/yang/service-group.yang
deleted file mode 100755
index 55f0f6b..0000000
--- a/config-models/aether-2.1.x/files/yang/service-group.yang
+++ /dev/null
@@ -1,83 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module service-group {
-  namespace "http://opennetworking.org/aether/service-group";
-  prefix sg;
-
-  import service-policy { prefix serv; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether Service Group";
-    reference "RFC 6087";
-  }
-
-  typedef service-group-id {
-        type string {
-            length 1..32;
-        }
-    description "The typede for service-group-id";
-  }
-
-  typedef service-kind {
-    type string {
-      length 1..32;
-      pattern "default|on-demand";
-    }
-    description "The typedef for service-kind";
-  }
-
-  container service-group {
-    description "The top level container";
-
-    list service-group {
-      key "id";
-      description
-        "List of service groups";
-
-      leaf id {
-        type service-group-id;
-        description "ID for this service group.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      list service-policies {
-        key "service-policy";
-        leaf service-policy {
-          type leafref {
-            path "/serv:service-policy/serv:service-policy/serv:id";
-          }
-          description
-              "Link to service policy";
-        }
-        leaf kind {
-          type service-kind;
-          default "default";
-          description
-            "Type of service link";
-        }
-        description "The container for service-policies";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this service group";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/service-policy.yang b/config-models/aether-2.1.x/files/yang/service-policy.yang
deleted file mode 100755
index a169402..0000000
--- a/config-models/aether-2.1.x/files/yang/service-policy.yang
+++ /dev/null
@@ -1,115 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module service-policy {
-  namespace "http://opennetworking.org/aether/service-policy";
-  prefix serv;
-
-  import service-rule { prefix sr; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether Service";
-    reference "RFC 6087";
-  }
-
-  typedef service-policy-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for service-policy-id";
-  }
-
-  container service-policy {
-    description "The top level container";
-
-    list service-policy {
-      key "id";
-      description
-        "List of services";
-
-      leaf id {
-        type service-policy-id;
-        description "ID for this service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf qci {
-        type uint32 {
-          range 0..85;
-        }
-        default 9;
-        description
-          "QoS Class Identifier";
-      }
-
-      leaf arp {
-        type uint32 {
-          range 0..15;
-        }
-        default 9;
-        description
-          "Evolved-ARP";
-      }
-
-      container ambr {
-        leaf uplink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Upstream aggregate maximum bit rate";
-        }
-        leaf downlink {
-          type uint32 {
-            range 0..4294967295;
-          }
-	  units bps;
-          default 0;
-          description
-            "Downstream aggregate maximum bit rate";
-        }
-        description "The container for ambr";
-      }
-
-      list rules {
-        key "rule";
-        leaf rule {
-          type leafref {
-            path "/sr:service-rule/sr:service-rule/sr:id";
-          }
-          description
-              "Link to service rule";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Enable or disable this service to use this rule";
-        }
-        description "The list for rules";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }      
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/service-rule.yang b/config-models/aether-2.1.x/files/yang/service-rule.yang
deleted file mode 100755
index 49af65f..0000000
--- a/config-models/aether-2.1.x/files/yang/service-rule.yang
+++ /dev/null
@@ -1,174 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module service-rule {
-  namespace "http://opennetworking.org/aether/service-rule";
-  prefix sr;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether Service Rule";
-    reference "RFC 6087";
-  }
-
-  typedef service-rule-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for service-rule-id";
-  }
-
-  container service-rule {
-    description "The top level container";
-
-    list service-rule {
-      key "id";
-      description
-        "List of service rules";
-
-      leaf id {
-        type service-rule-id;
-        description "ID for this service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf charging-rule-name {
-        type string {
-            length 1..80;
-        }
-        description "name of charging rule";
-      }
-
-      container qos {
-        leaf qci {
-          type uint32 {
-            range 0..85;
-          }
-          default 9;
-          description
-            "QoS Class Identifier";
-        }
-
-        container arp {
-          leaf priority {
-            type uint32 {
-              range 0..15;
-            }
-            default 0;
-            description
-              "Priority";
-          }
-          leaf preemption-capability {
-            type boolean;
-            default true;
-            description
-              "True if a bearer with lower priority should be dropped";
-          }
-          leaf preemption-vulnerability {
-            type boolean;
-            default true;
-            description
-              "This bearer may be dropped for a bearer with higher priority";
-          }
-          description "Evolved-ARP";
-        }
-
-        container maximum-requested-bandwidth {
-          leaf uplink {
-            type uint32 {
-              range 0..4294967295;
-            }
-	    units bps;
-            default 0;
-            description
-              "Upstream maximum requested bandwidth";
-          }
-          leaf downlink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Downstream maximum requested bandwidth";
-          }
-          description "The container for maximum-requested-bandwidth";
-        }
-
-        container guaranteed-bitrate {
-          leaf uplink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Upstream guaranteed bitrate";
-          }
-          leaf downlink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Downstream guaranteed bitrate";
-          }
-          description "The container for guaranteed-bitrate";
-        }
-
-        container aggregate-maximum-bitrate {
-          leaf uplink {
-            type uint32 {
-              range 0..4294967295;
-            }
-	    units bps;
-            default 0;
-            description
-              "Upstream aggregate maximum bitrate";
-          }
-          leaf downlink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Downstream aggregate maximum bitrate";
-          }
-	  description "The container for aggregate-maximum-bitrate";
-        }
-        description "The container for qos";
-      }
-
-      container flow {
-        leaf specification {
-          type string {
-            length 1..1024;
-          }
-          description "specification of this flow";
-        }
-        description "The container for flow";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this rule";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/files/yang/up-profile.yang b/config-models/aether-2.1.x/files/yang/up-profile.yang
deleted file mode 100755
index 723758f..0000000
--- a/config-models/aether-2.1.x/files/yang/up-profile.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module up-profile {
-  namespace "http://opennetworking.org/aether/user-plane-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether user plane Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef up-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for up-profile-id";
-  }
-
-  container up-profile {
-    description "The top level container";
-
-    list up-profile {
-      key "id";
-      description
-        "List of user plane profiles";
-
-      leaf id {
-        type up-profile-id;
-        description "ID for this user plane profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf user-plane {
-        type string {
-          length 1..255;
-        }
-        description "user plane name";
-      }
-
-      leaf access-control {
-        type string {
-          length 1..32;
-        }
-        description "access control policy";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.1.x/templates/_helpers.tpl b/config-models/aether-2.1.x/templates/_helpers.tpl
deleted file mode 100644
index bb84c33..0000000
--- a/config-models/aether-2.1.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-{{/* vim: set filetype=mustache: */}}
-{{/*
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-SPDX-License-Identifier: Apache-2.0
-
-Expand the name of the chart.
-*/}}
-{{- define "aether.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "aether.fullname" -}}
-{{- if contains "config-model-aether" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-aether" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "aether.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "aether.labels" -}}
-helm.sh/chart: {{ include "aether.chart" . }}
-{{ include "aether.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "aether.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "aether.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/aether-2.1.x/templates/model.yaml b/config-models/aether-2.1.x/templates/model.yaml
deleted file mode 100644
index b86c57e..0000000
--- a/config-models/aether-2.1.x/templates/model.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "aether.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "aether.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: Aether
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: aether-subscriber
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: aether-subscriber.yang
-  - name: apn-profile
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: apn-profile.yang
-  - name: up-profile
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: up-profile.yang
-  - name: qos-profile
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: qos-profile.yang
-  - name: access-profile
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: access-profile.yang
-  - name: enterprise
-    organization: Open Networking Foundation
-    revision: 2020-11-30
-    file: enterprise.yang
-  - name: connectivity-service
-    organization: Open Networking Foundation
-    revision: 2021-03-18
-    file: connectivity-service.yang
-  - name: security-profile
-    organization: Open Networking Foundation
-    revision: 2020-11-30
-    file: security-profile.yang
-  - name: service-group
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: service-group.yang
-  - name: service-policy
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: service-policy.yang
-  - name: service-rule
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: service-rule.yang
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/aether-2.1.x/values.yaml b/config-models/aether-2.1.x/values.yaml
deleted file mode 100644
index aec2bd5..0000000
--- a/config-models/aether-2.1.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
diff --git a/config-models/aether-2.2.x/Chart.yaml b/config-models/aether-2.2.x/Chart.yaml
deleted file mode 100644
index ad85a67..0000000
--- a/config-models/aether-2.2.x/Chart.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-aether
-version: 2.2.5
-kubeVersion: ">=1.18.0"
-appVersion: 2.2.0
-description: Aether config model
-keywords:
-  - onos
-  - sdn
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
diff --git a/config-models/aether-2.2.x/files/aether-2.2.0.tree b/config-models/aether-2.2.x/files/aether-2.2.0.tree
deleted file mode 100644
index 2336f65..0000000
--- a/config-models/aether-2.2.x/files/aether-2.2.0.tree
+++ /dev/null
@@ -1,155 +0,0 @@
-module: access-profile
-  +--rw access-profile
-     +--rw access-profile* [id]
-        +--rw id              access-profile-id
-        +--rw display-name?   string
-        +--rw type?           string
-        +--rw filter?         string
-        +--rw description?    string
-
-module: aether-subscriber
-  +--rw subscriber
-     +--rw ue* [id]
-        +--rw id                       ietf:uuid
-        +--rw display-name?            string
-        +--rw (imsi)?
-        |  +--:(wildcard)
-        |  |  +--rw imsi-wildcard?     string
-        |  +--:(range)
-        |     +--rw imsi-range-from?   uint64
-        |     +--rw imsi-range-to?     uint64
-        +--rw serving-plmn
-        |  +--rw mcc?   mcc
-        |  +--rw mnc?   mnc
-        |  +--rw tac?   tac
-        +--rw requested-apn?           string
-        +--rw priority?                uint32
-        +--rw enabled?                 boolean
-        +--rw enterprise?              -> /ent:enterprise/enterprise/id
-        +--rw profiles
-           +--rw apn-profile?        -> /apn:apn-profile/apn-profile/id
-           +--rw up-profile?         -> /up:up-profile/up-profile/id
-           +--rw qos-profile?        -> /qos:qos-profile/qos-profile/id
-           +--rw access-profile* [access-profile]
-           |  +--rw access-profile    -> /ap:access-profile/access-profile/id
-           |  +--rw allowed?          boolean
-           +--rw security-profile?   -> /sec:security-profile/security-profile/id
-
-module: apn-profile
-  +--rw apn-profile
-     +--rw apn-profile* [id]
-        +--rw id               apn-profile-id
-        +--rw display-name?    string
-        +--rw apn-name?        string
-        +--rw dns-primary?     inet:ip-address
-        +--rw dns-secondary?   inet:ip-address
-        +--rw mtu?             uint32
-        +--rw gx-enabled?      boolean
-        +--rw description?     string
-        +--rw service-group?   -> /sg:service-group/service-group/id
-
-module: connectivity-service
-  +--rw connectivity-service
-     +--rw connectivity-service* [id]
-        +--rw id                connectivity-service-id
-        +--rw display-name?     string
-        +--rw description?      string
-        +--rw spgwc-endpoint?   inet:uri
-        +--rw hss-endpoint?     inet:uri
-        +--rw pcrf-endpoint?    inet:uri
-
-module: enterprise
-  +--rw enterprise
-     +--rw enterprise* [id]
-        +--rw id                      enterprise-id
-        +--rw display-name?           string
-        +--rw description?            string
-        +--rw connectivity-service* [connectivity-service]
-           +--rw connectivity-service    -> /cs:connectivity-service/connectivity-service/id
-           +--rw enabled?                boolean
-
-module: qos-profile
-  +--rw qos-profile
-     +--rw qos-profile* [id]
-        +--rw id              qos-profile-id
-        +--rw display-name?   string
-        +--rw apn-ambr
-        |  +--rw uplink?     uint32
-        |  +--rw downlink?   uint32
-        +--rw qci?            uint32
-        +--rw arp
-        |  +--rw priority?                   uint32
-        |  +--rw preemption-capability?      boolean
-        |  +--rw preemption-vulnerability?   boolean
-        +--rw description?    string
-
-module: security-profile
-  +--rw security-profile
-     +--rw security-profile* [id]
-        +--rw id                 security-profile-id
-        +--rw display-name?      string
-        +--rw imsi-range-from?   uint64
-        +--rw imsi-range-to?     uint64
-        +--rw key?               string
-        +--rw opc?               string
-        +--rw sqn?               uint32
-        +--rw description?       string
-
-module: service-group
-  +--rw service-group
-     +--rw service-group* [id]
-        +--rw id                  service-group-id
-        +--rw display-name?       string
-        +--rw service-policies* [service-policy]
-        |  +--rw service-policy    -> /serv:service-policy/service-policy/id
-        |  +--rw kind?             service-kind
-        +--rw description?        string
-
-module: service-policy
-  +--rw service-policy
-     +--rw service-policy* [id]
-        +--rw id              service-policy-id
-        +--rw display-name?   string
-        +--rw qci?            uint32
-        +--rw arp?            uint32
-        +--rw ambr
-        |  +--rw uplink?     uint32
-        |  +--rw downlink?   uint32
-        +--rw rules* [rule]
-        |  +--rw rule       -> /sr:service-rule/service-rule/id
-        |  +--rw enabled?   boolean
-        +--rw description?    string
-
-module: service-rule
-  +--rw service-rule
-     +--rw service-rule* [id]
-        +--rw id                    service-rule-id
-        +--rw display-name?         string
-        +--rw charging-rule-name?   string
-        +--rw qos
-        |  +--rw qci?                           uint32
-        |  +--rw arp
-        |  |  +--rw priority?                   uint32
-        |  |  +--rw preemption-capability?      boolean
-        |  |  +--rw preemption-vulnerability?   boolean
-        |  +--rw maximum-requested-bandwidth
-        |  |  +--rw uplink?     uint32
-        |  |  +--rw downlink?   uint32
-        |  +--rw guaranteed-bitrate
-        |  |  +--rw uplink?     uint32
-        |  |  +--rw downlink?   uint32
-        |  +--rw aggregate-maximum-bitrate
-        |     +--rw uplink?     uint32
-        |     +--rw downlink?   uint32
-        +--rw flow
-        |  +--rw specification?   string
-        +--rw description?          string
-
-module: up-profile
-  +--rw up-profile
-     +--rw up-profile* [id]
-        +--rw id                up-profile-id
-        +--rw display-name?     string
-        +--rw user-plane?       string
-        +--rw access-control?   string
-        +--rw description?      string
diff --git a/config-models/aether-2.2.x/files/yang/access-profile.yang b/config-models/aether-2.2.x/files/yang/access-profile.yang
deleted file mode 100755
index 49009fe..0000000
--- a/config-models/aether-2.2.x/files/yang/access-profile.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module access-profile {
-  namespace "http://opennetworking.org/aether/access-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether access Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef access-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for access-profile-id";
-  }
-
-  container access-profile {
-    description "The top level container";
-
-    list access-profile {
-      key "id";
-      description
-        "List of access profiles";
-
-      leaf id {
-        type access-profile-id;
-        description "ID for this access profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf type {
-        type string {
-          length 1..32;
-        }
-        description "type of profile";
-      }
-
-      leaf filter {
-        type string {
-          length 0..32;
-        }
-        description "filter";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/aether-subscriber.yang b/config-models/aether-2.2.x/files/yang/aether-subscriber.yang
deleted file mode 100755
index 01d419a..0000000
--- a/config-models/aether-2.2.x/files/yang/aether-subscriber.yang
+++ /dev/null
@@ -1,188 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module aether-subscriber {
-  namespace "http://opennetworking.org/aether/subscriber";
-  prefix sub;
-
-  import apn-profile{ prefix apn; }
-  import qos-profile{ prefix qos; }
-  import up-profile{ prefix up; }
-  import access-profile{ prefix ap; }
-  import security-profile{ prefix sec; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix ietf; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether Subscriber";
-    reference "RFC 6087";
-  }
-
-  typedef mcc {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typede for mcc";
-  }
-
-  typedef mnc {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typede for mnc";
-  }
-
-  typedef tac {
-      type uint32 {
-        range 0..99999999;
-      }
-    description "The typede for tac";
-  }
-
-  container subscriber {
-    description "The top level container";
-
-    list ue {
-      key "id";
-      description
-        "List of subscriber devices";
-
-      leaf id {
-        type ietf:uuid;
-        description "identifier for this subscriber, typically a UUID";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      choice imsi {
-        case wildcard {
-          leaf imsi-wildcard {
-            type string {
-              length 1..15;
-            }
-            description "The leaf for imsi-wildcard";
-          }
-        }
-        case range {
-          leaf imsi-range-from {
-            type uint64;
-            description "The leaf for imsi-range-from";
-          }
-          leaf imsi-range-to {
-            type uint64;
-            description "The leaf for imsi-range-to";
-          }
-        }
-        description "The choise for imsi";
-      }
-
-      container serving-plmn {
-        leaf mcc {
-          type mcc;
-          description "mobile country code";
-        }
-        leaf mnc {
-          type mnc;
-          description "mobile network code";
-        }
-        leaf tac {
-          type tac;
-          description "type allocation code";
-        }
-        description "The container for serving-plmn";
-      }
-
-      leaf requested-apn {
-        type string {
-            length 0..31;
-        }
-        description "requested access point name";
-      }
-
-      leaf priority {
-        type uint32 {
-          range 0..1000;
-        }
-        default 0;
-        description
-          "Priority for this subscriber range";
-      }
-
-      leaf enabled {
-        type boolean;
-        default false;
-        description
-          "Enable or disable this ue";
-      }
-
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        description
-          "Link to enterprise that owns this UE range";
-      }
-
-      container profiles {
-        leaf apn-profile {
-          type leafref {
-            path "/apn:apn-profile/apn:apn-profile/apn:id";
-          }
-          description
-            "Link to apn profile";
-        }
-        leaf up-profile {
-          type leafref {
-            path "/up:up-profile/up:up-profile/up:id";
-          }
-          description
-            "Link to user plane profile";
-        }
-        leaf qos-profile {
-          type leafref {
-            path "/qos:qos-profile/qos:qos-profile/qos:id";
-          }
-          description
-            "Link to qos profile";
-        }
-        list access-profile {
-          key "access-profile";
-          leaf access-profile {
-            type leafref {
-              path "/ap:access-profile/ap:access-profile/ap:id";
-            }
-            description
-                "Link to access profile";
-          }
-          leaf allowed {
-            type boolean;
-            default true;
-            description
-              "Allow or disallow this ue to use this access profile";
-          }
-          description "The list for access-profile";
-        }
-        leaf security-profile {
-          type leafref {
-            path "/sec:security-profile/sec:security-profile/sec:id";
-          }
-          description
-            "Link to security profile";
-        }
-        description "The container for profiles";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/apn-profile.yang b/config-models/aether-2.2.x/files/yang/apn-profile.yang
deleted file mode 100755
index 3d0ba48..0000000
--- a/config-models/aether-2.2.x/files/yang/apn-profile.yang
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module apn-profile {
-  namespace "http://opennetworking.org/aether/apn-profile";
-  prefix pro;
-
-  import ietf-inet-types { prefix inet; }
-  import service-group { prefix sg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether APN Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef apn-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for apn-profile-id";
-  }
-
-  container apn-profile {
-    description "The top level container";
-
-    list apn-profile {
-      key "id";
-      description
-        "List of apn profiles";
-
-      leaf id {
-        type apn-profile-id;
-        description "ID for this apn profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf apn-name {
-        type string {
-          length 1..32;
-        }
-        description "apn name";
-      }
-
-      leaf dns-primary {
-        type inet:ip-address;
-        description "primary dns server name";
-      }
-
-      leaf dns-secondary {
-        type inet:ip-address;
-        description "secondary dns server name";
-      }
-
-      leaf mtu {
-        type uint32 {
-          range 68..65535;
-        }
-        units bytes;
-        default 1460;
-        description "maximum transmission unit";
-      }
-
-      leaf gx-enabled {
-        type boolean;
-        default false;
-        description "enable gx interface";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-
-      leaf service-group {
-        type leafref {
-          path "/sg:service-group/sg:service-group/sg:id";
-        }
-        description
-          "Link to service group";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/connectivity-service.yang b/config-models/aether-2.2.x/files/yang/connectivity-service.yang
deleted file mode 100755
index 7a00b2f..0000000
--- a/config-models/aether-2.2.x/files/yang/connectivity-service.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module connectivity-service {
-  namespace "http://opennetworking.org/aether/connectivity-service";
-  prefix cs;
-
-  import ietf-inet-types { prefix inet; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-18" {
-    description "An Aether Connectivity Service. Specifies the endpoints where the sdcore-adapter should push configuration to. A single connectivity service may be attached to multiple Enterprises.";
-    reference "RFC 6087";
-  }
-
-  typedef connectivity-service-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for connectivity-service-id";
-  }
-
-  container connectivity-service {
-    description "The top level container";
-
-    list connectivity-service {
-      key "id";
-      description
-        "List of connectivity services";
-
-      leaf id {
-        type connectivity-service-id;
-        description "ID for this connectivity service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this connectivity service";
-      }
-
-      leaf spgwc-endpoint {
-        type inet:uri;
-        description "url of the spgwc service";
-      }
-
-      leaf hss-endpoint {
-        type inet:uri;
-        description "url of the hss service";
-      }
-
-      leaf pcrf-endpoint {
-        type inet:uri;
-        description "url of the pcrf service";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/enterprise.yang b/config-models/aether-2.2.x/files/yang/enterprise.yang
deleted file mode 100755
index 2bf1bdf..0000000
--- a/config-models/aether-2.2.x/files/yang/enterprise.yang
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module enterprise {
-  namespace "http://opennetworking.org/aether/enterprise";
-  prefix ent;
-
-  import connectivity-service { prefix cs; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-11-30" {
-    description "An Aether Enterprise. Used to distinguish ownership of devices and other resources as well as a domain of configuration.";
-    reference "RFC 6087";
-  }
-
-  typedef enterprise-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for enterprise-id";
-  }
-
-  container enterprise {
-    description "The top level container";
-
-    list enterprise {
-      key "id";
-      description
-        "List of enterprises";
-
-      leaf id {
-        type enterprise-id;
-        description "ID for this enterprise.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this enterprise";
-      }
-
-      list connectivity-service {
-        key "connectivity-service";
-        leaf connectivity-service {
-          type leafref {
-            path "/cs:connectivity-service/cs:connectivity-service/cs:id";
-          }
-          description
-            "Link to connectivity services where configuration should be pushed for this enterprise's devices";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Allow or disallow pushes to this connectivity service";
-        }
-        description "The list for connectivity-service";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/ietf-inet-types.yang b/config-models/aether-2.2.x/files/yang/ietf-inet-types.yang
deleted file mode 100644
index fa57f75..0000000
--- a/config-models/aether-2.2.x/files/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,458 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      length "1..253";
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/config-models/aether-2.2.x/files/yang/ietf-yang-types.yang b/config-models/aether-2.2.x/files/yang/ietf-yang-types.yang
deleted file mode 100644
index ee58fa3..0000000
--- a/config-models/aether-2.2.x/files/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,474 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/qos-profile.yang b/config-models/aether-2.2.x/files/yang/qos-profile.yang
deleted file mode 100755
index 2dfaf20..0000000
--- a/config-models/aether-2.2.x/files/yang/qos-profile.yang
+++ /dev/null
@@ -1,113 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module qos-profile {
-  namespace "http://opennetworking.org/aether/qos-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether qos Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef qos-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for qos-profile-id";
-  }
-
-  container qos-profile {
-    description "The top level container";
-
-    list qos-profile {
-      key "id";
-      description
-        "List of qos profiles";
-
-      leaf id {
-        type qos-profile-id;
-        description "ID for this qos profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      container apn-ambr {
-        leaf uplink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Upstream aggregate maximum bit rate";
-        }
-        leaf downlink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Downstream aggregate maximum bit rate";
-        }
-        description "The container for apn-ambr";
-      }
-
-      leaf qci {
-        type uint32 {
-          range 0..85;
-        }
-        default 9;
-        description
-          "QoS Class Identifier";
-      }
-
-      container arp {
-        leaf priority {
-          type uint32 {
-            range 0..15;
-          }
-          default 0;
-          description
-            "Priority";
-        }
-        leaf preemption-capability {
-          type boolean;
-          default true;
-          description
-            "True if a bearer with lower priority should be dropped";
-        }
-        leaf preemption-vulnerability {
-          type boolean;
-          default true;
-          description
-            "This bearer may be dropped for a bearer with higher priority";
-        }
-        description "Evolved-ARP";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/security-profile.yang b/config-models/aether-2.2.x/files/yang/security-profile.yang
deleted file mode 100755
index 0655c34..0000000
--- a/config-models/aether-2.2.x/files/yang/security-profile.yang
+++ /dev/null
@@ -1,84 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module security-profile {
-  namespace "http://opennetworking.org/aether/security-profile";
-  prefix sec;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-05-10" {
-    description "An Aether Security Profile. Contains keys and other security items associated with devices. Configured by the operator.";
-    reference "RFC 6087";
-  }
-
-  typedef security-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for security-profile-id";
-  }
-
-  container security-profile {
-    description "The top level container";
-
-    list security-profile {
-      key "id";
-      description
-        "List of security profiles";
-
-      leaf id {
-        type security-profile-id;
-        description "ID for this security profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf imsi-range-from {
-        type uint64;
-        description "Starting IMSI in range to apply this security profile to";
-      }
-
-      leaf imsi-range-to {
-        type uint64;
-        description "Ending IMSI in range to apply this security profile to";
-      }
-
-      leaf key {
-        type string {
-          length 1..32;
-        }
-        description "Secret key for USIM";
-      }
-
-      leaf opc {
-        type string {
-          length 1..32;
-        }
-        description "Secret key for Operator";
-      }
-
-      leaf sqn {
-        type uint32;
-        description "sequence number";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this security profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/service-group.yang b/config-models/aether-2.2.x/files/yang/service-group.yang
deleted file mode 100755
index 460463f..0000000
--- a/config-models/aether-2.2.x/files/yang/service-group.yang
+++ /dev/null
@@ -1,83 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module service-group {
-  namespace "http://opennetworking.org/aether/service-group";
-  prefix sg;
-
-  import service-policy { prefix serv; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether Service Group";
-    reference "RFC 6087";
-  }
-
-  typedef service-group-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for service-group-id";
-  }
-
-  typedef service-kind {
-    type string {
-      length 1..32;
-      pattern "default|on-demand";
-    }
-    description "The typedef for service-kind";
-  }
-
-  container service-group {
-    description "The top level container";
-
-    list service-group {
-      key "id";
-      description
-        "List of service groups";
-
-      leaf id {
-        type service-group-id;
-        description "ID for this service group.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      list service-policies {
-        key "service-policy";
-        leaf service-policy {
-          type leafref {
-            path "/serv:service-policy/serv:service-policy/serv:id";
-          }
-          description
-              "Link to service policy";
-        }
-        leaf kind {
-          type service-kind;
-          default "default";
-          description
-            "Type of service link";
-        }
-        description "The list for service-policies";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this service group";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/service-policy.yang b/config-models/aether-2.2.x/files/yang/service-policy.yang
deleted file mode 100755
index e6598a7..0000000
--- a/config-models/aether-2.2.x/files/yang/service-policy.yang
+++ /dev/null
@@ -1,115 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module service-policy {
-  namespace "http://opennetworking.org/aether/service-policy";
-  prefix serv;
-
-  import service-rule { prefix sr; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether Service";
-    reference "RFC 6087";
-  }
-
-  typedef service-policy-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for service-policy-id";
-  }
-
-  container service-policy {
-    description "The top level container";
-
-    list service-policy {
-      key "id";
-      description
-        "List of services";
-
-      leaf id {
-        type service-policy-id;
-        description "ID for this service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf qci {
-        type uint32 {
-          range 0..85;
-        }
-        default 9;
-        description
-          "QoS Class Identifier";
-      }
-
-      leaf arp {
-        type uint32 {
-          range 0..15;
-        }
-        default 9;
-        description
-          "Evolved-ARP";
-      }
-
-      container ambr {
-        leaf uplink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Upstream aggregate maximum bit rate";
-        }
-        leaf downlink {
-          type uint32 {
-            range 0..4294967295;
-          }
-          units bps;
-          default 0;
-          description
-            "Downstream aggregate maximum bit rate";
-        }
-        description "The container for ambr";
-      }
-
-      list rules {
-        key "rule";
-        leaf rule {
-          type leafref {
-            path "/sr:service-rule/sr:service-rule/sr:id";
-          }
-          description
-              "Link to service rule";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Enable or disable this service to use this rule";
-        }
-        description "The list for rules";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/service-rule.yang b/config-models/aether-2.2.x/files/yang/service-rule.yang
deleted file mode 100755
index 2007f96..0000000
--- a/config-models/aether-2.2.x/files/yang/service-rule.yang
+++ /dev/null
@@ -1,174 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module service-rule {
-  namespace "http://opennetworking.org/aether/service-rule";
-  prefix sr;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2021-03-04" {
-    description "An Aether Service Rule";
-    reference "RFC 6087";
-  }
-
-  typedef service-rule-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for service-rule-id";
-  }
-
-  container service-rule {
-    description "The top level container";
-
-    list service-rule {
-      key "id";
-      description
-        "List of service rules";
-
-      leaf id {
-        type service-rule-id;
-        description "ID for this service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf charging-rule-name {
-        type string {
-            length 1..80;
-        }
-        description "name of charging rule";
-      }
-
-      container qos {
-        leaf qci {
-          type uint32 {
-            range 0..85;
-          }
-          default 9;
-          description
-            "QoS Class Identifier";
-        }
-
-        container arp {
-          leaf priority {
-            type uint32 {
-              range 0..15;
-            }
-            default 0;
-            description
-              "Priority";
-          }
-          leaf preemption-capability {
-            type boolean;
-            default true;
-            description
-              "True if a bearer with lower priority should be dropped";
-          }
-          leaf preemption-vulnerability {
-            type boolean;
-            default true;
-            description
-              "This bearer may be dropped for a bearer with higher priority";
-          }
-          description "Evolved-ARP";
-        }
-
-        container maximum-requested-bandwidth {
-          leaf uplink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Upstream maximum requested bandwidth";
-          }
-          leaf downlink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Downstream maximum requested bandwidth";
-          }
-          description "The container for maximum-requested-bandwidth";
-        }
-
-        container guaranteed-bitrate {
-          leaf uplink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Upstream guaranteed bitrate";
-          }
-          leaf downlink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Downstream guaranteed bitrate";
-          }
-          description "The container for guaranteed-bitrate";
-        }
-
-        container aggregate-maximum-bitrate {
-          leaf uplink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Upstream aggregate maximum bitrate";
-          }
-          leaf downlink {
-            type uint32 {
-              range 0..4294967295;
-            }
-            units bps;
-            default 0;
-            description
-              "Downstream aggregate maximum bitrate";
-          }
-          description "The container for aggregate-maximum-bitrate";
-        }
-        description "The container for qos";
-      }
-
-      container flow {
-        leaf specification {
-          type string {
-            length 1..1024;
-          }
-          description "specification of this flow";
-        }
-        description "The container for flow";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this rule";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/files/yang/up-profile.yang b/config-models/aether-2.2.x/files/yang/up-profile.yang
deleted file mode 100755
index 723758f..0000000
--- a/config-models/aether-2.2.x/files/yang/up-profile.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module up-profile {
-  namespace "http://opennetworking.org/aether/user-plane-profile";
-  prefix pro;
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "To generate JSON from this use command
-    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
-    Copied from YangUIComponents project";
-
-  revision "2020-10-22" {
-    description "An Aether user plane Profile";
-    reference "RFC 6087";
-  }
-
-  // TODO: Think more on whether this should be a UUID or
-  // simply a unique name. If it's a UUID, could fix the
-  // string length.
-  typedef up-profile-id {
-        type string {
-            length 1..32;
-        }
-    description "The typedef for up-profile-id";
-  }
-
-  container up-profile {
-    description "The top level container";
-
-    list up-profile {
-      key "id";
-      description
-        "List of user plane profiles";
-
-      leaf id {
-        type up-profile-id;
-        description "ID for this user plane profile.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf user-plane {
-        type string {
-          length 1..255;
-        }
-        description "user plane name";
-      }
-
-      leaf access-control {
-        type string {
-          length 1..32;
-        }
-        description "access control policy";
-      }
-
-      leaf description {
-        type string {
-          length 1..100;
-        }
-        description "description of this profile";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-2.2.x/templates/_helpers.tpl b/config-models/aether-2.2.x/templates/_helpers.tpl
deleted file mode 100644
index bb84c33..0000000
--- a/config-models/aether-2.2.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-{{/* vim: set filetype=mustache: */}}
-{{/*
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-SPDX-License-Identifier: Apache-2.0
-
-Expand the name of the chart.
-*/}}
-{{- define "aether.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "aether.fullname" -}}
-{{- if contains "config-model-aether" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-aether" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "aether.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "aether.labels" -}}
-helm.sh/chart: {{ include "aether.chart" . }}
-{{ include "aether.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "aether.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "aether.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/aether-2.2.x/templates/model.yaml b/config-models/aether-2.2.x/templates/model.yaml
deleted file mode 100644
index 1dac8f7..0000000
--- a/config-models/aether-2.2.x/templates/model.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "aether.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "aether.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: Aether
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: aether-subscriber
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: aether-subscriber.yang
-  - name: apn-profile
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: apn-profile.yang
-  - name: up-profile
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: up-profile.yang
-  - name: qos-profile
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: qos-profile.yang
-  - name: access-profile
-    organization: Open Networking Foundation
-    revision: 2020-10-22
-    file: access-profile.yang
-  - name: enterprise
-    organization: Open Networking Foundation
-    revision: 2020-11-30
-    file: enterprise.yang
-  - name: connectivity-service
-    organization: Open Networking Foundation
-    revision: 2021-03-18
-    file: connectivity-service.yang
-  - name: security-profile
-    organization: Open Networking Foundation
-    revision: 2021-05-10
-    file: security-profile.yang
-  - name: service-group
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: service-group.yang
-  - name: service-policy
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: service-policy.yang
-  - name: service-rule
-    organization: Open Networking Foundation
-    revision: 2021-03-04
-    file: service-rule.yang
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/aether-2.2.x/values.yaml b/config-models/aether-2.2.x/values.yaml
deleted file mode 100644
index aec2bd5..0000000
--- a/config-models/aether-2.2.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
diff --git a/config-models/aether-3.x/Chart.yaml b/config-models/aether-3.x/Chart.yaml
deleted file mode 100644
index e5e434c..0000000
--- a/config-models/aether-3.x/Chart.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-aether-3
-version: 3.0.16
-kubeVersion: ">=1.18.0"
-appVersion: 3.0.0
-description: Aether config model
-keywords:
-  - onos
-  - sdn
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
diff --git a/config-models/aether-3.x/files/aether-3.0.0.tree b/config-models/aether-3.x/files/aether-3.0.0.tree
deleted file mode 100644
index f23f176..0000000
--- a/config-models/aether-3.x/files/aether-3.0.0.tree
+++ /dev/null
@@ -1,140 +0,0 @@
-module: ap-list
-  +--rw ap-list
-     +--rw ap-list* [id]
-        +--rw id               ap-list-id
-        +--rw access-points* [address]
-        |  +--rw address    inet:host
-        |  +--rw tac        at:tac
-        |  +--rw enable?    boolean
-        +--rw display-name?    string
-        +--rw description?     at:description
-        +--rw enterprise       -> /ent:enterprise/enterprise/id
-
-module: application
-  +--rw application
-     +--rw application* [id]
-        +--rw id              application-id
-        +--rw display-name?   string
-        +--rw description?    at:description
-        +--rw endpoint* [name]
-        |  +--rw name          string
-        |  +--rw address       ietf:host
-        |  +--rw port-start    ietf:port-number
-        |  +--rw port-end?     ietf:port-number
-        |  +--rw protocol?     at:protocol
-        +--rw enterprise      -> /ent:enterprise/enterprise/id
-
-module: connectivity-service
-  +--rw connectivity-service
-     +--rw connectivity-service* [id]
-        +--rw id                  connectivity-service-id
-        +--rw display-name?       string
-        +--rw description?        at:description
-        +--rw spgwc-endpoint?     inet:uri
-        +--rw hss-endpoint?       inet:uri
-        +--rw pcrf-endpoint?      inet:uri
-        +--rw core-5g-endpoint?   inet:uri
-
-module: device-group
-  +--rw device-group
-     +--rw device-group* [id]
-        +--rw id              device-group-id
-        +--rw description?    at:description
-        +--rw display-name?   string
-        +--rw imsis* [name]
-        |  +--rw name               string
-        |  +--rw imsi-range-from?   uint64
-        |  +--rw imsi-range-to?     uint64
-        +--rw ip-domain?      -> /ipd:ip-domain/ip-domain/id
-        +--rw site            -> /st:site/site/id
-
-module: enterprise
-  +--rw enterprise
-     +--rw enterprise* [id]
-        +--rw id                      enterprise-id
-        +--rw display-name?           string
-        +--rw description?            at:description
-        +--rw connectivity-service* [connectivity-service]
-           +--rw connectivity-service    -> /cs:connectivity-service/connectivity-service/id
-           +--rw enabled?                boolean
-
-module: ip-domain
-  +--rw ip-domain
-     +--rw ip-domain* [id]
-        +--rw id               ip-domain-id
-        +--rw display-name?    string
-        +--rw dnn?             at:dnn
-        +--rw dns-primary?     inet:ip-address
-        +--rw dns-secondary?   inet:ip-address
-        +--rw subnet           inet:ipv4-prefix
-        +--rw admin-status?    at:admin-status
-        +--rw mtu?             at:mtu
-        +--rw description?     at:description
-        +--rw enterprise       -> /ent:enterprise/enterprise/id
-
-module: site
-  +--rw site
-     +--rw site* [id]
-        +--rw id                 site-id
-        +--rw display-name?      string
-        +--rw enterprise         -> /ent:enterprise/enterprise/id
-        +--rw imsi-definition
-        |  +--rw mcc           at:mcc
-        |  +--rw mnc           at:mnc
-        |  +--rw enterprise    at:ent
-        |  +--rw format        string
-        +--rw description?       at:description
-
-module: template
-  +--rw template
-     +--rw template* [id]
-        +--rw id               template-id
-        +--rw display-name?    string
-        +--rw sst?             at:sst
-        +--rw sd?              at:sd
-        +--rw uplink?          uint32
-        +--rw downlink?        uint32
-        +--rw traffic-class?   -> /tc:traffic-class/traffic-class/id
-        +--rw description?     at:description
-
-module: traffic-class
-  +--rw traffic-class
-     +--rw traffic-class* [id]
-        +--rw id              traffic-class-id
-        +--rw display-name?   string
-        +--rw pelr?           at:pelr
-        +--rw pdb?            at:pdb
-        +--rw qci?            at:qci
-        +--rw description?    at:description
-
-module: upf
-  +--rw upf
-     +--rw upf* [id]
-        +--rw id              upf-id
-        +--rw address         inet:host
-        +--rw port            inet:port-number
-        +--rw display-name?   string
-        +--rw description?    at:description
-        +--rw enterprise      -> /ent:enterprise/enterprise/id
-
-module: vcs
-  +--rw vcs
-     +--rw vcs* [id]
-        +--rw id               vcs-id
-        +--rw display-name?    string
-        +--rw device-group* [device-group]
-        |  +--rw device-group    -> /dg:device-group/device-group/id
-        |  +--rw enable?         boolean
-        +--rw template?        -> /vt:template/template/id
-        +--rw application* [application]
-        |  +--rw application    -> /app:application/application/id
-        |  +--rw allow?         boolean
-        +--rw upf?             -> /upf:upf/upf/id
-        +--rw ap?              -> /apl:ap-list/ap-list/id
-        +--rw description?     at:description
-        +--rw enterprise       -> /ent:enterprise/enterprise/id
-        +--rw sst              at:sst
-        +--rw sd               at:sd
-        +--rw uplink?          uint32
-        +--rw downlink?        uint32
-        +--rw traffic-class    -> /tc:traffic-class/traffic-class/id
diff --git a/config-models/aether-3.x/files/yang/aether-types.yang b/config-models/aether-3.x/files/yang/aether-types.yang
deleted file mode 100755
index 86ef630..0000000
--- a/config-models/aether-3.x/files/yang/aether-types.yang
+++ /dev/null
@@ -1,123 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module aether-types {
-  namespace "http://opennetworking.org/aether/aether-types";
-  prefix at;
-
-  import ietf-inet-types { prefix inet; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "A set of base types for aether modeling.";
-
-  revision "2021-06-02" {
-    description "Aether Base Types";
-    reference "RFC 6087";
-  }
-
-  typedef mcc {
-      type string {
-        pattern '[0-9]{3}';
-      }
-    description "The typedef for mcc";
-  }
-
-  typedef mnc {
-      type string {
-        pattern '[0-9]{2,3}';
-      }
-    description "The typedef for mnc";
-  }
-
-  typedef tac {
-      type string {
-        length 4..8;
-        pattern '[0-9A-F\.]*';
-      }
-    description "The typedef for tac";
-  }
-
-  typedef ent {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for ent";
-  }
-
-  typedef dnn {
-      type string {
-        length 1..32;
-      }
-    description "The typedef for dnn";
-  }
-
-  typedef sst {
-      type uint8 {
-        range 1..255;
-      }
-    description "The typedef for sst";
-  }
-
-  typedef sd {
-      type uint32 {
-        range 0..16777215;
-      }
-    description "The typedef for sd";
-  }
-
-  typedef qci {
-      type uint8 {
-        range 1..32;
-      }
-    description "The typedef for qci";
-  }
-
-  typedef pelr {
-      type int8 {
-        range 0..10;
-      }
-    description "The typedef for pelr";
-  }
-
-  typedef pdb {
-      type uint16 {
-        range 0..1000;
-      }
-    description "The typedef for pdb";
-  }
-
-  // "TCP" or "UDP"
-  typedef protocol {
-      type string {
-        length 3;
-        pattern "TCP|UDP";
-      }
-      default "TCP";
-    description "The typedef for protocol";
-  }
-
-  // "ENABLE" | "MAINTENTANCE" | "DISABLE"
-  typedef admin-status {
-      type string {
-        length 0..16;
-        pattern "ENABLE|MAINTENANCE|DISABLE";
-      }
-      default "ENABLE";
-    description "The typedef for admin-status";
-  }
-
-  typedef mtu {
-      type inet:port-number;
-      default 1492;
-    description "The typedef for mtu";
-  }
-
-  typedef description {
-    type string {
-      length 1..1024;
-    }
-    description "The typedef for description";
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/ap-list.yang b/config-models/aether-3.x/files/yang/ap-list.yang
deleted file mode 100755
index 49fc76a..0000000
--- a/config-models/aether-3.x/files/yang/ap-list.yang
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module ap-list {
-  namespace "http://opennetworking.org/aether/ap-list";
-  prefix apl;
-
-  import ietf-inet-types { prefix inet; }
-  import aether-types { prefix at; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether AP List is a named list of access points.";
-
-  revision "2021-06-02" {
-    description "An Aether Access Point List";
-    reference "RFC 6087";
-  }
-
-  typedef ap-list-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef ap-list-id";
-  }
-
-  container ap-list {
-    description "The top level container";
-
-    list ap-list {
-      key "id";
-      description
-        "A list of named ap-lists.";
-
-      leaf id {
-        type ap-list-id;
-        description "ID for this ap-list.";
-      }
-
-      list access-points {
-        key "address";
-        leaf address {
-          type inet:host;
-          description
-            "Address of access point";
-        }
-        leaf tac {
-          type at:tac;
-          mandatory true;
-          description
-              "Type Allocation Code";
-        }
-        leaf enable {
-          type boolean;
-          default true;
-          description
-            "Enable this access point";
-        }
-        description
-          "List of access point addresses";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this ap-list";
-      }
-
-      // Access point lists are always owned by an Enterprise, since they typically exist on the
-      // Enterprise's edge. An ApList is not owned by Site, to cover the case where a ApList may
-      // include access points that span multiple sites.
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this Access Point List";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/application.yang b/config-models/aether-3.x/files/yang/application.yang
deleted file mode 100755
index d62c957..0000000
--- a/config-models/aether-3.x/files/yang/application.yang
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module application {
-  namespace "http://opennetworking.org/enterprise/application";
-  prefix app;
-
-  import ietf-inet-types{ prefix ietf; }
-  import aether-types{ prefix at; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Application is an application that UE devices may
-     connect to. Includes a set of endpoints where services are
-     provided.";
-
-  revision "2021-06-02" {
-    description "Aether Application.";
-    reference "RFC 6087";
-  }
-
-  typedef application-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for application-id";
-  }
-
-  container application {
-    description "The top level container";
-
-    list application {
-      key "id";
-      description
-        "List of applications";
-
-      leaf id {
-        type application-id;
-        description "ID for this application.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this application";
-      }
-
-      list endpoint {
-        key "name";
-        max-elements 1;
-        leaf name {
-          type string;
-          description
-              "Name of this endpoint";
-        }
-        leaf address {
-          type ietf:host;
-          mandatory true;
-          description
-              "Address of this endpoint. Either a hostname, and IP, or a subnet.";
-        }
-        leaf port-start {
-          type ietf:port-number;
-          mandatory true;
-          description
-              "First port in range";
-        }
-        leaf port-end {
-          type ietf:port-number;
-          description
-              "Last port in range";
-        }
-        leaf protocol {
-          type at:protocol;
-          description
-              "Name of this endpoint";
-        }
-        description "The list for endpoints";
-      }
-
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this Application. May be set to None if the application is global to all Enterprises.";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/connectivity-service.yang b/config-models/aether-3.x/files/yang/connectivity-service.yang
deleted file mode 100755
index 0d6e929..0000000
--- a/config-models/aether-3.x/files/yang/connectivity-service.yang
+++ /dev/null
@@ -1,77 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module connectivity-service {
-  namespace "http://opennetworking.org/aether/connectivity-service";
-  prefix cs;
-
-  import aether-types { prefix at; }
-  import ietf-inet-types { prefix inet; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Connectivity service is the linkage between the
-     ROC and a core that provides connectivity.";
-
-  revision "2021-06-02" {
-    description "An Aether Connectivity Service. Specifies the endpoints where the sdcore-adapter should push configuration to. A single connectivity service may be attached to multiple Enterprises.";
-    reference "RFC 6087";
-  }
-
-  typedef connectivity-service-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for connectivity-service-id";
-  }
-
-  container connectivity-service {
-    description "The top level container";
-
-    list connectivity-service {
-      key "id";
-      description
-        "List of connectivity services";
-
-      leaf id {
-        type connectivity-service-id;
-        description "ID for this connectivity service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this connectivity service";
-      }
-
-      leaf spgwc-endpoint {
-        type inet:uri;
-        description "url of the spgwc service";
-      }
-
-      leaf hss-endpoint {
-        type inet:uri;
-        description "url of the hss service";
-      }
-
-      leaf pcrf-endpoint {
-        type inet:uri;
-        description "url of the pcrf service";
-      }
-
-      leaf core-5g-endpoint {
-        type inet:uri;
-        description "url of the 5g core";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/device-group.yang b/config-models/aether-3.x/files/yang/device-group.yang
deleted file mode 100755
index d6ae9a5..0000000
--- a/config-models/aether-3.x/files/yang/device-group.yang
+++ /dev/null
@@ -1,103 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module device-group {
-  namespace "http://opennetworking.org/aether/device-group";
-  prefix dg;
-
-  import aether-types { prefix at; }
-  import ip-domain{ prefix ipd; }
-  import site{ prefix st; }
-  import ietf-yang-types{ prefix yg; }
-
-  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 "name";
-        leaf name {
-          type string;
-          description "The leaf for imsi name";
-        }
-        leaf imsi-range-from {
-          type uint64;
-	  description "The leaf for imsi-range-from";
-        }
-        leaf imsi-range-to {
-          type uint64;
-          description "The leaf for imsi-range-to";
-        }
-        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";
-      }
-
-      leaf site {
-        type leafref {
-          path "/st:site/st:site/st:id";
-        }
-        mandatory true;
-        description
-          "Link to site";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/enterprise.yang b/config-models/aether-3.x/files/yang/enterprise.yang
deleted file mode 100755
index 160e691..0000000
--- a/config-models/aether-3.x/files/yang/enterprise.yang
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module enterprise {
-  namespace "http://opennetworking.org/aether/enterprise";
-  prefix ent;
-
-  import aether-types { prefix at; }
-  import connectivity-service { prefix cs; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Enterprise is an administration entity that
-     has ownership of resrouces.";
-
-  revision "2021-06-02" {
-    description "An Aether Enterprise. Used to distinguish ownership of devices and other resources as well as a domain of configuration.";
-    reference "RFC 6087";
-  }
-
-  typedef enterprise-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for enterprise-id";
-  }
-
-  container enterprise {
-    description "The top level container";
-
-    list enterprise {
-      key "id";
-      description
-        "List of enterprises";
-
-      leaf id {
-        type enterprise-id;
-        description "ID for this enterprise.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this enterprise";
-      }
-
-      list connectivity-service {
-        key "connectivity-service";
-        leaf connectivity-service {
-          type leafref {
-            path "/cs:connectivity-service/cs:connectivity-service/cs:id";
-          }
-          description
-            "Link to connectivity services where configuration should be pushed for this enterprise's devices";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Allow or disallow pushes to this connectivity service";
-        }
-        description "The list for connectivity-service";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/ietf-inet-types.yang b/config-models/aether-3.x/files/yang/ietf-inet-types.yang
deleted file mode 100644
index fa57f75..0000000
--- a/config-models/aether-3.x/files/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,458 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      length "1..253";
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/config-models/aether-3.x/files/yang/ietf-yang-types.yang b/config-models/aether-3.x/files/yang/ietf-yang-types.yang
deleted file mode 100644
index ee58fa3..0000000
--- a/config-models/aether-3.x/files/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,474 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/ip-domain.yang b/config-models/aether-3.x/files/yang/ip-domain.yang
deleted file mode 100755
index ee920b1..0000000
--- a/config-models/aether-3.x/files/yang/ip-domain.yang
+++ /dev/null
@@ -1,103 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module ip-domain {
-  namespace "http://opennetworking.org/aether/ip-domain";
-  prefix ipd;
-
-  import ietf-inet-types { prefix inet; }
-  import aether-types { prefix at; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether IP-Domain. This is a list of available subnets
-     that may be assigned to UEs, as well as DNS servers and other
-     metadata";
-
-  revision "2021-06-02" {
-    description "An Aether IP and Domain Specification";
-    reference "RFC 6087";
-  }
-
-  typedef ip-domain-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for ip-domain-id";
-  }
-
-  container ip-domain {
-    description "The top level container";
-
-    list ip-domain {
-      key "id";
-      description
-        "List of ip domains";
-
-      leaf id {
-        type ip-domain-id;
-        description "ID for this ip domain.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf dnn {
-        type at:dnn;
-        description "DNN/APN";
-      }
-
-      leaf dns-primary {
-        type inet:ip-address;
-        description "primary dns server name";
-      }
-
-      leaf dns-secondary {
-        type inet:ip-address;
-        description "secondary dns server name";
-      }
-
-      // Note: Cannot use a subnet as a list key. Dropped support from a
-      // list of subnets to a single subnet. Revisit in the future.
-      leaf subnet {
-        type inet:ipv4-prefix;
-        mandatory true;
-        description "subnet to allocate ip addresses from";
-      }
-
-      leaf admin-status {
-        type at:admin-status;
-        description "administrative status";
-      }
-
-      leaf mtu {
-        type at:mtu;
-        description "maximum transmission unit";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this ip domain";
-      }
-
-      // Ip-Domain is always owned by an Enterprise, because it contains
-      // IP addresses relative to that Enterprise.
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this IP-Domain";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/site.yang b/config-models/aether-3.x/files/yang/site.yang
deleted file mode 100755
index a8653f0..0000000
--- a/config-models/aether-3.x/files/yang/site.yang
+++ /dev/null
@@ -1,102 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module site {
-  namespace "http://opennetworking.org/aether/site";
-  prefix st;
-
-  import aether-types{ prefix at; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether site is a location where resources are deployed.";
-
-  revision "2021-06-02" {
-    description "An Aether Site.";
-    reference "RFC 6087";
-  }
-
-  typedef site-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for site-id";
-  }
-
-  container site {
-    description "The top level container";
-
-    list site {
-      key "id";
-      description
-        "List of site";
-
-      leaf id {
-        type site-id;
-        description "ID for this site.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this site";
-      }
-
-      container imsi-definition {
-        leaf mcc {
-          type at:mcc;
-	  mandatory true;
-          description "mobile country code";
-        }
-        leaf mnc {
-          type at:mnc;
-	  mandatory true;
-          description "mobile network code";
-        }
-        leaf enterprise {
-          type at:ent;
-	  mandatory true;
-          description "enterprise-specific identifier";
-        }
-        leaf format {
-          type string {
-            length 15;
-          }
-          mandatory true;
-          description "IMSI format specifier, describes how fields are packed into an IMSI. Must be exactly 15 characters long. For example, CCCNNNEEESSSSSS.";
-          // Format specifiers:
-          //   C = MCC
-          //   N = MNC
-          //   E = Enterprise
-          //   0 = Forced Zero
-          //   S = Subscriber ID
-          // default is
-          //   3 digit MCC
-          //   3 digit MNC
-          //   3 digit enterprise ID
-          //   5 digit subscriber ID
-        }
-        description "The container for imsi-definition";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this site";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/template.yang b/config-models/aether-3.x/files/yang/template.yang
deleted file mode 100755
index 6f9d291..0000000
--- a/config-models/aether-3.x/files/yang/template.yang
+++ /dev/null
@@ -1,86 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module template {
-  namespace "http://opennetworking.org/aether/template";
-  prefix tp;
-
-  import aether-types{ prefix at; }
-  import traffic-class{ prefix tc; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "The aether vcs-template holds common parameters used
-     by a virtual connectivity service. Templates are used to
-     populate a VCS.";
-
-  revision "2021-06-02" {
-    description "An Aether Virtual Cellular Service Template";
-    reference "RFC 6087";
-  }
-
-  typedef template-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for template-id";
-  }
-
-  container template {
-    description "The top level container";
-
-    list template {
-      key "id";
-      description
-        "List of vcs templates";
-
-      leaf id {
-        type template-id;
-        description "ID for this vcs template.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf sst {
-        type at:sst;
-        description "Slice/Service type";
-      }
-
-      leaf sd {
-        type at:sd;
-        description "Slice differentiator";
-      }
-
-      leaf uplink {
-        type uint32;
-        description "Uplink data rate in mbps";
-      }
-
-      leaf downlink {
-        type uint32;
-        description "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 description {
-        type at:description;
-        description "description of this vcs template";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/traffic-class.yang b/config-models/aether-3.x/files/yang/traffic-class.yang
deleted file mode 100755
index 88a9495..0000000
--- a/config-models/aether-3.x/files/yang/traffic-class.yang
+++ /dev/null
@@ -1,71 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module traffic-class {
-  namespace "http://opennetworking.org/aether/traffic-class";
-  prefix tp;
-
-  import aether-types{ prefix at; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "The aether traffic class associates qos constants
-     with a named class of service";
-
-  revision "2021-06-02" {
-    description "An Aether Traffic Class";
-    reference "RFC 6087";
-  }
-
-  typedef traffic-class-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for traffic-class-id";
-  }
-
-  container traffic-class {
-    description "The top level container";
-
-    list traffic-class {
-      key "id";
-      description
-        "List of traffic class";
-
-      leaf id {
-        type traffic-class-id;
-        description "ID for this traffic class.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf pelr {
-        type at:pelr;
-        description "PELR exponent";
-      }
-
-      leaf pdb {
-        type at:pdb;
-        description "PDB";
-      }
-
-      leaf qci {
-        type at:qci;
-        description "QCI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this traffic class";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/upf.yang b/config-models/aether-3.x/files/yang/upf.yang
deleted file mode 100755
index 433c23b..0000000
--- a/config-models/aether-3.x/files/yang/upf.yang
+++ /dev/null
@@ -1,82 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module upf {
-  namespace "http://opennetworking.org/aether/upf";
-  prefix upf;
-
-  import aether-types { prefix at; }
-  import ietf-inet-types { prefix inet; }
-  import enterprise{ prefix ent; }
-  import ietf-yang-types{ prefix yg; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "A Aether UPF List is a named User Plane Function.";
-
-  revision "2021-06-02" {
-    description "An Aether User Plane Function";
-    reference "RFC 6087";
-  }
-
-  typedef upf-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for upf-id";
-  }
-
-  container upf {
-    description "The top level container";
-
-    list upf {
-      key "id";
-      description
-        "A list of named upfs.";
-
-      leaf id {
-        type upf-id;
-        description "ID for this upf.";
-      }
-
-      leaf address {
-        type inet:host;
-        mandatory true;
-        description
-          "Address of UPF";
-      }
-
-      leaf port {
-        type inet:port-number;
-        mandatory true;
-        description
-            "Port for UPF";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this UPF";
-      }
-
-      // 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.
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this Access Point List";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-3.x/files/yang/vcs.yang b/config-models/aether-3.x/files/yang/vcs.yang
deleted file mode 100755
index 5e8c5f7..0000000
--- a/config-models/aether-3.x/files/yang/vcs.yang
+++ /dev/null
@@ -1,172 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module vcs {
-  namespace "http://opennetworking.org/aether/vcs";
-  prefix sl;
-
-  import template{ prefix vt; }
-  import upf { prefix upf; }
-  import ap-list{ prefix apl; }
-  import application{ prefix app; }
-  import aether-types{ prefix at; }
-  import device-group{ prefix dg; }
-  import traffic-class{ prefix tc; }
-  import ietf-yang-types{ prefix yg; }
-  import enterprise{ prefix ent; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Virtual Cellular Service (VCS) is
-     used to connect UE devices with applications";
-
-  revision "2021-06-02" {
-    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 template {
-        type leafref {
-          path "/vt:template/vt:template/vt:id";
-        }
-        description
-          "Link to user vcs template that was used to initialize
-           this VCS";
-      }
-
-      list application {
-        key "application";
-        leaf application {
-          type leafref {
-            path "/app:application/app:application/app:id";
-          }
-          mandatory true;
-          description
-            "Link to application";
-        }
-        leaf allow {
-          type boolean;
-          default true;
-          description
-            "Allow or deny this application";
-        }
-        description
-          "An ordered list of applications to allow and deny. The deny rules
-           will be executed first, followed by the allow rules. The first rule
-           to match is returned. An implicit DENY ALL lies at the end.";
-      }
-
-      leaf upf {
-        type leafref {
-          path "/upf:upf/upf:upf/upf:id";
-        }
-        description
-          "Link to user plane that implements this vcf";
-      }
-
-      leaf ap {
-        type leafref {
-          path "/apl:ap-list/apl:ap-list/apl:id";
-        }
-        description
-          "Link to access-point list";
-      }
-
-      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";
-      }
-
-      // 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.";
-      }
-
-      leaf uplink {
-        type uint32;
-        description "Uplink data rate in mbps";
-      }
-
-      leaf downlink {
-        type uint32;
-        description "Downlink data rate in mbps";
-      }
-
-      leaf traffic-class {
-        type leafref {
-          path "/tc:traffic-class/tc:traffic-class/tc:id";
-        }
-        mandatory true;
-        description
-          "Link to traffic class";
-      }
-      // end of items populated from the template
-    }
-  }
-}
diff --git a/config-models/aether-3.x/templates/_helpers.tpl b/config-models/aether-3.x/templates/_helpers.tpl
deleted file mode 100644
index bb84c33..0000000
--- a/config-models/aether-3.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-{{/* vim: set filetype=mustache: */}}
-{{/*
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-SPDX-License-Identifier: Apache-2.0
-
-Expand the name of the chart.
-*/}}
-{{- define "aether.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "aether.fullname" -}}
-{{- if contains "config-model-aether" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-aether" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "aether.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "aether.labels" -}}
-helm.sh/chart: {{ include "aether.chart" . }}
-{{ include "aether.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "aether.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "aether.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/aether-3.x/templates/model.yaml b/config-models/aether-3.x/templates/model.yaml
deleted file mode 100644
index 86db976..0000000
--- a/config-models/aether-3.x/templates/model.yaml
+++ /dev/null
@@ -1,70 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "aether.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "aether.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: Aether
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: connectivity-service
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: connectivity-service.yang
-  - name: enterprise
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: enterprise.yang
-# new 5G models
-  - name: aether-types
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: aether-types.yang
-  - name: ap-list
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: ap-list.yang
-  - name: application
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: application.yang
-  - name: device-group
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: device-group.yang
-  - name: ip-domain
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: ip-domain.yang
-  - name: site
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: site.yang
-  - name: upf-list
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: upf.yang
-  - name: vcs
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: vcs.yang
-  - name: template
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: template.yang
-  - name: traffic-class
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: traffic-class.yang    
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/aether-3.x/values.yaml b/config-models/aether-3.x/values.yaml
deleted file mode 100644
index aec2bd5..0000000
--- a/config-models/aether-3.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
diff --git a/config-models/aether-4.x/CHANGELOG.md b/config-models/aether-4.x/CHANGELOG.md
deleted file mode 100644
index c8d58ec..0000000
--- a/config-models/aether-4.x/CHANGELOG.md
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--
-SPDX-FileCopyrightText: 2021 Open Networking Foundation
-
-SPDX-License-Identifier: Apache-2.0
--->
-
-Changes on 11/1/2021
-====================
-Application.Endpoint:
-  * add `display-name` and rename `name` to `id`
-
-Device-Group.Imsi:
-  * add `display-name` and rename `name` to `id`
-
-Site:
-  * small-cell: add `display-name` and rename `name` to `id`
-  * edge-device: rename `name` to `id`
-
-
-Changes on 10/19/2021
-=====================
-
-Device-Group:
-  * Device.MBR and Device.Traffic-Class set to mandatory
-
-VCS:
-  * Add Allow-Internet boolean
-  * Restricted application filter priority to 0-200.
-  * Remove link to template
-
-Template:
-  * Add Allow-Internet boolean
-  * Remove Traffic-Class and Device.MBR
-
-Changes on 10/21/2021
-=====================
-Connectivity-Service
-  * Add acc-prometheus-url
-
-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
-=============================
-
-VCS and Template:
-  * Containerized device MBR Uplink and Download to device.mbr.uplink and device.mbr.downlink
-  * Added slice.mbr.uplink and slice.mbr.downlink
-  * Remove link to AP-List
-  * All bitrates are now uint64 and have units "bps"
-  * Renamed the application section to "filter"
-  * Added priority to application filters
-
-Site:
-  * Added link to AP-List
-  * Now includes a list of access points
-  * Small-cell (formerly access-point) list includes a name for each AP
-
-Application:
-  * Added mbr.uplink and mbr.downlink
-  * Moved address outside of the endpoint list
-
-Traffic-Class:
-  * Removed pelr and pdb
-  * Added arp
-
-AP-List
-  * Removed; contents added to slice
-
-UPF:
-  * Added config-endpoint
-
-Models prefixed with onf- throughout.
-
-Application Filtering
-=====================
-
-Application filtering is part of this release. A brief description of Application
-Filtering is below.
-
-* Each VCS contains a filter
-* The filter is a list of applications. Each application within the filter can
-  be set to Allow or Deny and can be given a priority.
-* The filter is executed in priority order. The first application to match a packet will
-  have its resulting action (Allow or Deny) executed for that packet.
-* Each application contains a single address and a set of endpoints.
-* Each endpoint is a port-range together with a maximum bitrate.
-
diff --git a/config-models/aether-4.x/Chart.yaml b/config-models/aether-4.x/Chart.yaml
deleted file mode 100644
index e7cf3ad..0000000
--- a/config-models/aether-4.x/Chart.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-aether-4
-version: 4.0.18
-kubeVersion: ">=1.18.0"
-appVersion: 4.0.0
-description: Aether config model
-keywords:
-  - onos
-  - sdn
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
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
deleted file mode 100644
index 24f7a1b..0000000
--- a/config-models/aether-4.x/files/aether-4.0.0.tree
+++ /dev/null
@@ -1,161 +0,0 @@
-module: onf-application
-  +--rw application
-     +--rw application* [id]
-        +--rw id              application-id
-        +--rw display-name?   string
-        +--rw description?    at:description
-        +--rw address         ietf:host
-        +--rw endpoint* [endpoint-id]
-        |  +--rw endpoint-id      yg:yang-identifier
-        |  +--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 traffic-class?   -> /tc:traffic-class/traffic-class/id
-        |  +--rw display-name?    string
-        +--rw enterprise      -> /ent:enterprise/enterprise/id
-
-module: onf-connectivity-service
-  +--rw connectivity-service
-     +--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-device-group
-  +--rw device-group
-     +--rw device-group* [id]
-        +--rw 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 ip-domain?      -> /ipd:ip-domain/ip-domain/id
-        +--rw device
-        |  +--rw mbr
-        |  |  +--rw uplink      at:bitrate
-        |  |  +--rw downlink    at:bitrate
-        |  +--rw traffic-class    -> /tc:traffic-class/traffic-class/id
-        +--rw site            -> /st:site/site/id
-
-module: onf-enterprise
-  +--rw enterprise
-     +--rw enterprise* [id]
-        +--rw id                      enterprise-id
-        +--rw display-name?           string
-        +--rw description?            at:description
-        +--rw connectivity-service* [connectivity-service]
-           +--rw connectivity-service    -> /cs:connectivity-service/connectivity-service/id
-           +--rw enabled?                boolean
-
-module: onf-ip-domain
-  +--rw ip-domain
-     +--rw ip-domain* [id]
-        +--rw id               ip-domain-id
-        +--rw display-name?    string
-        +--rw dnn              at:dnn
-        +--rw dns-primary?     inet:ip-address
-        +--rw dns-secondary?   inet:ip-address
-        +--rw subnet           inet:ipv4-prefix
-        +--rw admin-status?    at:admin-status
-        +--rw mtu?             at:mtu
-        +--rw description?     at:description
-        +--rw enterprise       -> /ent:enterprise/enterprise/id
-
-module: onf-site
-  +--rw site
-     +--rw site* [id]
-        +--rw id                 site-id
-        +--rw display-name?      string
-        +--rw small-cell* [small-cell-id]
-        |  +--rw small-cell-id    yg:yang-identifier
-        |  +--rw address?         inet:host
-        |  +--rw tac              at:tac
-        |  +--rw enable?          boolean
-        |  +--rw display-name?    string
-        +--rw monitoring
-        |  +--rw edge-cluster-prometheus-url?      inet:uri
-        |  +--rw edge-monitoring-prometheus-url?   inet:uri
-        |  +--rw edge-device* [edge-device-id]
-        |     +--rw edge-device-id    yg:yang-identifier
-        |     +--rw display-name?     string
-        |     +--rw description?      at:description
-        +--rw enterprise         -> /ent:enterprise/enterprise/id
-        +--rw imsi-definition
-        |  +--rw mcc           at:mcc
-        |  +--rw mnc           at:mnc
-        |  +--rw enterprise    at:ent
-        |  +--rw format        string
-        +--rw description?       at:description
-
-module: onf-template
-  +--rw template
-     +--rw template* [id]
-        +--rw id                  template-id
-        +--rw display-name?       string
-        +--rw sst?                at:sst
-        +--rw sd?                 at:sd
-        +--rw slice
-        |  +--rw mbr
-        |     +--rw uplink?                at:bitrate
-        |     +--rw downlink?              at:bitrate
-        |     +--rw uplink-burst-size?     at:burst
-        |     +--rw downlink-burst-size?   at:burst
-        +--rw default-behavior    at:behavior
-        +--rw description?        at:description
-
-module: onf-traffic-class
-  +--rw traffic-class
-     +--rw traffic-class* [id]
-        +--rw id              traffic-class-id
-        +--rw display-name?   string
-        +--rw arp?            at:arp
-        +--rw qci?            at:qci
-        +--rw pelr?           at:pelr
-        +--rw pdb?            at:pdb
-        +--rw description?    at:description
-
-module: onf-upf
-  +--rw upf
-     +--rw upf* [id]
-        +--rw id                 upf-id
-        +--rw address            inet:host
-        +--rw port               inet:port-number
-        +--rw config-endpoint?   inet:uri
-        +--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
-     +--rw vcs* [id]
-        +--rw id                  vcs-id
-        +--rw display-name?       string
-        +--rw device-group* [device-group]
-        |  +--rw device-group    -> /dg:device-group/device-group/id
-        |  +--rw enable?         boolean
-        +--rw default-behavior    at:behavior
-        +--rw filter* [application]
-        |  +--rw application    -> /app:application/application/id
-        |  +--rw priority?      at:priority
-        |  +--rw allow?         boolean
-        +--rw upf?                -> /upf:upf/upf/id
-        +--rw description?        at:description
-        +--rw enterprise          -> /ent:enterprise/enterprise/id
-        +--rw site                -> /st:site/site/id
-        +--rw sst                 at:sst
-        +--rw sd                  at:sd
-        +--rw slice
-           +--rw mbr
-              +--rw uplink?                at:bitrate
-              +--rw downlink?              at:bitrate
-              +--rw uplink-burst-size?     at:burst
-              +--rw downlink-burst-size?   at:burst
diff --git a/config-models/aether-4.x/files/yang/ietf-inet-types.yang b/config-models/aether-4.x/files/yang/ietf-inet-types.yang
deleted file mode 100644
index fa57f75..0000000
--- a/config-models/aether-4.x/files/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,458 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      length "1..253";
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/config-models/aether-4.x/files/yang/ietf-yang-types.yang b/config-models/aether-4.x/files/yang/ietf-yang-types.yang
deleted file mode 100644
index ee58fa3..0000000
--- a/config-models/aether-4.x/files/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,474 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-aether-types.yang b/config-models/aether-4.x/files/yang/onf-aether-types.yang
deleted file mode 100755
index 9d9c892..0000000
--- a/config-models/aether-4.x/files/yang/onf-aether-types.yang
+++ /dev/null
@@ -1,159 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-aether-types {
-  namespace "http://opennetworking.org/aether/aether-types";
-  prefix at;
-
-  import ietf-inet-types { prefix inet; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description "A set of base types for aether modeling.";
-
-  revision "2021-09-10" {
-    description "Aether Base Types";
-    reference "RFC 6087";
-  }
-
-  typedef bitrate {
-      type uint64 {
-      }
-    description "The typedef for bitrate";
-  }
-
-  typedef burst {
-      type uint32 {
-      }
-      default 625000;
-    description "The typedef for burst";
-  }
-
-  typedef mcc {
-      type string {
-        pattern '[0-9]{3}';
-      }
-    description "The typedef for mcc";
-  }
-
-  typedef mnc {
-      type string {
-        pattern '[0-9]{2,3}';
-      }
-    description "The typedef for mnc";
-  }
-
-  typedef tac {
-      type string {
-        length 4..8;
-        pattern '[0-9A-F\.]*';
-      }
-    description "The typedef for tac";
-  }
-
-  typedef ent {
-      type uint32 {
-        range 0..999;
-      }
-    description "The typedef for ent";
-  }
-
-  typedef dnn {
-      type string {
-        length 1..32;
-      }
-    description "The typedef for dnn";
-  }
-
-  typedef sst {
-      type uint8 {
-        range 1..255;
-      }
-    description "The typedef for sst";
-  }
-
-  typedef sd {
-      type uint32 {
-        range 0..16777215;
-      }
-    description "The typedef for sd";
-  }
-
-  typedef qci {
-      type uint8 {
-        range 1..32;
-      }
-    description "The typedef for qci";
-  }
-
-  typedef arp {
-      type uint8 {
-        range 1..15;
-      }
-    description "The typedef for arp";
-  }
-
-  typedef pelr {
-      type int8 {
-        range 0..10;
-      }
-    description "The typedef for pelr";
-  }
-
-  typedef pdb {
-      type uint16 {
-        range 0..1000;
-      }
-    description "The typedef for pdb";
-  }
-
-  typedef priority {
-    type uint8 {
-      // priorities 201-255 are reserved for system use
-      range 0..200;
-    }
-    description "The typedef for priority";
-  }
-
-  // "TCP" or "UDP"
-  typedef protocol {
-      type string {
-        length 3;
-        pattern "TCP|UDP";
-      }
-      default "TCP";
-    description "The typedef for protocol";
-  }
-
-  // "ENABLE" | "MAINTENTANCE" | "DISABLE"
-  typedef admin-status {
-      type string {
-        length 0..16;
-        pattern "ENABLE|MAINTENANCE|DISABLE";
-      }
-      default "ENABLE";
-    description "The typedef for admin-status";
-  }
-
-  typedef behavior {
-      type string {
-        length 0..20;
-        pattern "DENY-ALL|ALLOW-ALL|ALLOW-PUBLIC";
-      }
-    description "The typedef for behavior";
-  }
-
-  typedef mtu {
-      type inet:port-number;
-      default 1492;
-    description "The typedef for mtu";
-  }
-
-  typedef description {
-    type string {
-      length 1..1024;
-    }
-    description "The typedef for description";
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-application.yang b/config-models/aether-4.x/files/yang/onf-application.yang
deleted file mode 100755
index e774944..0000000
--- a/config-models/aether-4.x/files/yang/onf-application.yang
+++ /dev/null
@@ -1,128 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-application {
-  namespace "http://opennetworking.org/enterprise/application";
-  prefix app;
-
-  import ietf-inet-types{ prefix ietf; }
-  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";
-  description
-    "An Aether Application is an application that devices may
-     connect to. Includes a set of endpoints where services are
-     provided.";
-
-  revision "2021-09-10" {
-    description "Aether Application.";
-    reference "RFC 6087";
-  }
-
-  typedef application-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for application-id";
-  }
-
-  container application {
-    description "The top level container";
-
-    list application {
-      key "id";
-      description
-        "List of applications";
-
-      leaf id {
-        type application-id;
-        description "ID for this application.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this application";
-      }
-
-      leaf address {
-        type ietf:host;
-        mandatory true;
-        description
-            "Address of this application. Either a hostname, an IP, or a subnet.";
-      }
-
-      list endpoint {
-        key "endpoint-id";
-        leaf endpoint-id {
-          type yg:yang-identifier;
-          description
-              "Id of this endpoint";
-        }
-        leaf port-start {
-          type ietf:port-number;
-          description
-              "First port in range";
-        }
-        leaf port-end {
-          type ietf:port-number;
-          description
-              "Last port in range";
-        }
-        leaf protocol {
-          type at:protocol;
-          description
-              "Protocol of this endpoint";
-        }
-        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";
-          }
-        }
-        leaf traffic-class {
-          type leafref {
-            path "/tc:traffic-class/tc:traffic-class/tc:id";
-          }
-          description
-            "Link to traffic class";
-        }
-        leaf display-name {
-          type string {
-              length 1..80;
-          }
-          description "display name to use in GUI or CLI";
-        }
-        description "list for endpoint";
-      }
-
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this Application. May be set to None if the application is global to all Enterprises.";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-connectivity-service.yang b/config-models/aether-4.x/files/yang/onf-connectivity-service.yang
deleted file mode 100755
index 009fc6c..0000000
--- a/config-models/aether-4.x/files/yang/onf-connectivity-service.yang
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-connectivity-service {
-  namespace "http://opennetworking.org/aether/connectivity-service";
-  prefix cs;
-
-  import ietf-inet-types { prefix inet; }
-  import ietf-yang-types{ prefix yg; }
-  import onf-aether-types { prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Connectivity service is the linkage between the
-     ROC and a core that provides connectivity.";
-
-  revision "2021-10-21" {
-    description "An Aether Connectivity Service. Specifies the endpoints where the sdcore-adapter should push configuration to. A single connectivity service may be attached to multiple Enterprises.";
-    reference "RFC 6087";
-  }
-
-  typedef connectivity-service-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-   description "The typedef for connectivity-service-id";
-  }
-
-  container connectivity-service {
-    description "The top level container";
-
-    list connectivity-service {
-      key "id";
-      description
-        "List of connectivity services";
-
-      leaf id {
-        type connectivity-service-id;
-        description "ID for this connectivity service.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this connectivity service";
-      }
-
-      leaf core-5g-endpoint {
-        type inet:uri;
-        description "url of the 5g core";
-      }
-
-      leaf acc-prometheus-url {
-          type inet:uri;
-          description
-            "URL of ACC prometheus";
-      }
-    }
-  }
-}
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
deleted file mode 100755
index 0aac881..0000000
--- a/config-models/aether-4.x/files/yang/onf-device-group.yang
+++ /dev/null
@@ -1,141 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.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";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-enterprise.yang b/config-models/aether-4.x/files/yang/onf-enterprise.yang
deleted file mode 100755
index 906d8ac..0000000
--- a/config-models/aether-4.x/files/yang/onf-enterprise.yang
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-enterprise {
-  namespace "http://opennetworking.org/aether/enterprise";
-  prefix ent;
-
-  import ietf-yang-types{ prefix yg; }
-  import onf-aether-types { prefix at; }
-  import onf-connectivity-service { prefix cs; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether Enterprise is an administration entity that
-     has ownership of resrouces.";
-
-  revision "2021-06-02" {
-    description "An Aether Enterprise. Used to distinguish ownership of devices and other resources as well as a domain of configuration.";
-    reference "RFC 6087";
-  }
-
-  typedef enterprise-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-   description "The typedef for enterprise-id";
-  }
-
-  container enterprise {
-    description "The top level container";
-
-    list enterprise {
-      key "id";
-      description
-        "List of enterprises";
-
-      leaf id {
-        type enterprise-id;
-        description "ID for this enterprise.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this enterprise";
-      }
-
-      list connectivity-service {
-        key "connectivity-service";
-        leaf connectivity-service {
-          type leafref {
-            path "/cs:connectivity-service/cs:connectivity-service/cs:id";
-          }
-          description
-            "Link to connectivity services where configuration should be pushed for this enterprise's devices";
-        }
-        leaf enabled {
-          type boolean;
-          default true;
-          description
-            "Allow or disallow pushes to this connectivity service";
-        }
-        description "The list for connectivity-service";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-ip-domain.yang b/config-models/aether-4.x/files/yang/onf-ip-domain.yang
deleted file mode 100755
index 629256a..0000000
--- a/config-models/aether-4.x/files/yang/onf-ip-domain.yang
+++ /dev/null
@@ -1,104 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-ip-domain {
-  namespace "http://opennetworking.org/aether/ip-domain";
-  prefix ipd;
-
-  import ietf-inet-types { prefix inet; }
-  import ietf-yang-types{ prefix yg; }
-  import onf-aether-types { prefix at; }
-  import onf-enterprise{ prefix ent; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether IP-Domain. This is a list of available subnets
-     that may be assigned to UEs, as well as DNS servers and other
-     metadata";
-
-  revision "2021-06-02" {
-    description "An Aether IP and Domain Specification";
-    reference "RFC 6087";
-  }
-
-  typedef ip-domain-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for ip-domain-id";
-  }
-
-  container ip-domain {
-    description "The top level container";
-
-    list ip-domain {
-      key "id";
-      description
-        "List of ip domains";
-
-      leaf id {
-        type ip-domain-id;
-        description "ID for this ip domain.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf dnn {
-        type at:dnn;
-        mandatory true;
-        description "DNN/APN";
-      }
-
-      leaf dns-primary {
-        type inet:ip-address;
-        description "primary dns server name";
-      }
-
-      leaf dns-secondary {
-        type inet:ip-address;
-        description "secondary dns server name";
-      }
-
-      // Note: Cannot use a subnet as a list key. Dropped support from a
-      // list of subnets to a single subnet. Revisit in the future.
-      leaf subnet {
-        type inet:ipv4-prefix;
-        mandatory true;
-        description "subnet to allocate ip addresses from";
-      }
-
-      leaf admin-status {
-        type at:admin-status;
-        description "administrative status";
-      }
-
-      leaf mtu {
-        type at:mtu;
-        description "maximum transmission unit";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this ip domain";
-      }
-
-      // Ip-Domain is always owned by an Enterprise, because it contains
-      // IP addresses relative to that Enterprise.
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this IP-Domain";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-site.yang b/config-models/aether-4.x/files/yang/onf-site.yang
deleted file mode 100755
index 1695a35..0000000
--- a/config-models/aether-4.x/files/yang/onf-site.yang
+++ /dev/null
@@ -1,172 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-site {
-  namespace "http://opennetworking.org/aether/site";
-  prefix st;
-
-  import ietf-inet-types { prefix inet; }
-  import ietf-yang-types{ prefix yg; }
-  import onf-aether-types{ prefix at; }
-  import onf-enterprise{ prefix ent; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "An Aether site is a location where resources are deployed.";
-
-  revision "2021-09-10" {
-    description "An Aether Site.";
-    reference "RFC 6087";
-  }
-
-  typedef site-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for site-id";
-  }
-
-  container site {
-    description "The top level container";
-
-    list site {
-      key "id";
-      description
-        "List of site";
-
-      leaf id {
-        type site-id;
-        description "ID for this site.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      list small-cell {
-        key "small-cell-id";
-        leaf small-cell-id {
-          type yg:yang-identifier;
-          description
-            "Id of small cell";
-        }
-        leaf address {
-          type inet:host;
-          description
-            "Address of small cell";
-        }
-        leaf tac {
-          type at:tac;
-          mandatory true;
-          description
-              "Type Allocation Code";
-        }
-        leaf enable {
-          type boolean;
-          default true;
-          description
-            "Enable this small cell";
-        }
-        leaf display-name {
-          type string {
-              length 1..80;
-          }
-          description "display name to use in GUI or CLI";
-        }
-        description
-          "List of small cell addresses";
-      }
-
-      container monitoring {
-        leaf edge-cluster-prometheus-url {
-          type inet:uri;
-          description
-            "URL of edge cluster prometheus";
-        }
-        leaf edge-monitoring-prometheus-url {
-          type inet:uri;
-          description
-            "URL of monitoring prometheus";
-        }
-        list edge-device {
-          key "edge-device-id";
-          leaf edge-device-id {
-            type yg:yang-identifier;
-            description
-              "Id of edge monitoring device";
-          }
-          leaf display-name {
-            type string {
-                length 1..80;
-            }
-            description "display name to use in GUI or CLI";
-          }
-          leaf description {
-            type at:description;
-            description "description of this site";
-          }
-          description
-            "List of edge monitoring devices";
-        }
-        description
-            "container for monitoring";
-      }
-
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        mandatory true;
-        description
-          "Link to enterprise that owns this site";
-      }
-
-      container imsi-definition {
-        leaf mcc {
-          type at:mcc;
-          mandatory true;
-          description "mobile country code";
-        }
-        leaf mnc {
-          type at:mnc;
-          mandatory true;
-          description "mobile network code";
-        }
-        leaf enterprise {
-          type at:ent;
-          mandatory true;
-          description "enterprise-specific identifier";
-        }
-        leaf format {
-          type string {
-            length 15;
-          }
-          mandatory true;
-          description "IMSI format specifier, describes how fields are packed into an IMSI. Must be exactly 15 characters long. For example, CCCNNNEEESSSSSS.";
-          // Format specifiers:
-          //   C = MCC
-          //   N = MNC
-          //   E = Enterprise
-          //   0 = Forced Zero
-          //   S = Subscriber ID
-          // default is
-          //   3 digit MCC
-          //   3 digit MNC
-          //   3 digit enterprise ID
-          //   5 digit subscriber ID
-        }
-        description "container for imsi-defination";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this site";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-template.yang b/config-models/aether-4.x/files/yang/onf-template.yang
deleted file mode 100755
index e6af73e..0000000
--- a/config-models/aether-4.x/files/yang/onf-template.yang
+++ /dev/null
@@ -1,104 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-template {
-  namespace "http://opennetworking.org/aether/template";
-  prefix tp;
-
-  import ietf-yang-types{ prefix yg; }
-  import onf-aether-types{ prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "The aether vcs-template holds common parameters used
-     by a virtual connectivity service. Templates are used to
-     populate a VCS.";
-
-  revision "2021-09-10" {
-    description "An Aether Virtual Cellular Service Template";
-    reference "RFC 6087";
-  }
-
-  typedef template-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for template-id";
-  }
-
-  container template {
-    description "The top level container";
-
-    list template {
-      key "id";
-      description
-        "List of vcs templates";
-
-      leaf id {
-        type template-id;
-        description "ID for this vcs template.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf sst {
-        type at:sst;
-        description "Slice/Service type";
-      }
-
-      leaf sd {
-        type at:sd;
-        description "Slice differentiator";
-      }
-
-      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";
-          }
-        }
-      }
-
-      leaf default-behavior {
-        type at:behavior;
-        mandatory true;
-        description
-          "Default behavior if no filter rules match";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this vcs template";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-traffic-class.yang b/config-models/aether-4.x/files/yang/onf-traffic-class.yang
deleted file mode 100755
index 2d9f135..0000000
--- a/config-models/aether-4.x/files/yang/onf-traffic-class.yang
+++ /dev/null
@@ -1,76 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-traffic-class {
-  namespace "http://opennetworking.org/aether/traffic-class";
-  prefix tp;
-
-  import ietf-yang-types{ prefix yg; }
-  import onf-aether-types{ prefix at; }
-
-  organization "Open Networking Foundation.";
-  contact "Scott Baker";
-  description
-    "The aether traffic class associates qos constants
-     with a named class of service";
-
-  revision "2021-09-10" {
-    description "An Aether Traffic Class";
-    reference "RFC 6087";
-  }
-
-  typedef traffic-class-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-    description "The typedef for traffic-class-id";
-  }
-
-  container traffic-class {
-    description "The top level container";
-
-    list traffic-class {
-      key "id";
-      description
-        "List of traffic class";
-
-      leaf id {
-        type traffic-class-id;
-        description "ID for this traffic class.";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf arp {
-        type at:arp;
-        description "Allocation and Retention Priority. 1 is the highest. 15 is the lowest.";
-      }
-
-      leaf qci {
-        type at:qci;
-        description "QOS Class Identifier";
-      }
-
-      leaf pelr {
-        type at:pelr;
-        description "PELR exponent";
-      }
-
-      leaf pdb {
-        type at:pdb;
-        description "PDB";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this traffic class";
-      }
-    }
-  }
-}
diff --git a/config-models/aether-4.x/files/yang/onf-upf.yang b/config-models/aether-4.x/files/yang/onf-upf.yang
deleted file mode 100755
index 4274acb..0000000
--- a/config-models/aether-4.x/files/yang/onf-upf.yang
+++ /dev/null
@@ -1,98 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module onf-upf {
-  namespace "http://opennetworking.org/aether/upf";
-  prefix upf;
-
-  import ietf-inet-types { prefix inet; }
-  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";
-  description "A Aether UPF List is a named User Plane Function.";
-
-  revision "2021-09-16" {
-    description "An Aether User Plane Function";
-    reference "RFC 6087";
-  }
-
-  typedef upf-id {
-        type yg:yang-identifier {
-            length 1..32;
-        }
-   description "The typedef for upf-id";
-  }
-
-  container upf {
-    description "The top level container";
-
-    list upf {
-      key "id";
-      description
-        "A list of named upfs.";
-
-      leaf id {
-        type upf-id;
-        description "ID for this upf.";
-      }
-
-      leaf address {
-        type inet:host;
-        mandatory true;
-        description
-          "Address of UPF";
-      }
-
-      leaf port {
-        type inet:port-number;
-        mandatory true;
-        description
-            "Port for UPF";
-      }
-
-      leaf config-endpoint {
-        type inet:uri;
-        description "url for configuring the UPF";
-      }
-
-      leaf display-name {
-        type string {
-            length 1..80;
-        }
-        description "display name to use in GUI or CLI";
-      }
-
-      leaf description {
-        type at:description;
-        description "description of this UPF";
-      }
-
-      // UPFs are always owned by an Enterprise, since they typically exist on the
-      // Enterprise's edge.
-      leaf enterprise {
-        type leafref {
-          path "/ent:enterprise/ent:enterprise/ent:id";
-        }
-        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
deleted file mode 100755
index 89b8304..0000000
--- a/config-models/aether-4.x/files/yang/onf-vcs.yang
+++ /dev/null
@@ -1,187 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.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
-    }
-  }
-}
diff --git a/config-models/aether-4.x/templates/_helpers.tpl b/config-models/aether-4.x/templates/_helpers.tpl
deleted file mode 100644
index bb84c33..0000000
--- a/config-models/aether-4.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-{{/* vim: set filetype=mustache: */}}
-{{/*
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-SPDX-License-Identifier: Apache-2.0
-
-Expand the name of the chart.
-*/}}
-{{- define "aether.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "aether.fullname" -}}
-{{- if contains "config-model-aether" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-aether" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "aether.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "aether.labels" -}}
-helm.sh/chart: {{ include "aether.chart" . }}
-{{ include "aether.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "aether.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "aether.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/aether-4.x/templates/model.yaml b/config-models/aether-4.x/templates/model.yaml
deleted file mode 100644
index 0369022..0000000
--- a/config-models/aether-4.x/templates/model.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "aether.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "aether.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: Aether
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: connectivity-service
-    organization: Open Networking Foundation
-    revision: 2021-10-21
-    file: onf-connectivity-service.yang
-  - name: enterprise
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: onf-enterprise.yang
-  - name: aether-types
-    organization: Open Networking Foundation
-    revision: 2021-09-10
-    file: onf-aether-types.yang
-  - name: application
-    organization: Open Networking Foundation
-    revision: 2021-09-10
-    file: onf-application.yang
-  - name: device-group
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: onf-device-group.yang
-  - name: ip-domain
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: onf-ip-domain.yang
-  - name: site
-    organization: Open Networking Foundation
-    revision: 2021-09-10
-    file: onf-site.yang
-  - name: upf-list
-    organization: Open Networking Foundation
-    revision: 2021-09-16
-    file: onf-upf.yang
-  - name: vcs
-    organization: Open Networking Foundation
-    revision: 2021-09-10
-    file: onf-vcs.yang
-  - name: template
-    organization: Open Networking Foundation
-    revision: 2021-09-10
-    file: onf-template.yang
-  - name: traffic-class
-    organization: Open Networking Foundation
-    revision: 2021-06-02
-    file: onf-traffic-class.yang    
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/aether-4.x/values.yaml b/config-models/aether-4.x/values.yaml
deleted file mode 100644
index aec2bd5..0000000
--- a/config-models/aether-4.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
diff --git a/config-models/plproxy-1.x/Chart.yaml b/config-models/plproxy-1.x/Chart.yaml
deleted file mode 100755
index 3effdd4..0000000
--- a/config-models/plproxy-1.x/Chart.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: v2
-name: config-model-plproxy
-version: 1.0.2
-kubeVersion: ">=1.18.0"
-appVersion: 1.0.0
-description: Prom label proxy config model
-keywords:
-  - plproxy
-  - config
-home: https://onosproject.org
-maintainers:
-  - name: ONOS Support
-    email: support@opennetworking.org
diff --git a/config-models/plproxy-1.x/files/plproxy-1.0.0.tree b/config-models/plproxy-1.x/files/plproxy-1.0.0.tree
deleted file mode 100755
index 9b0fbaa..0000000
--- a/config-models/plproxy-1.x/files/plproxy-1.0.0.tree
+++ /dev/null
@@ -1,7 +0,0 @@
-module: prom-label-proxy
-  +--rw user-groups
-     +--rw user-group* [name]
-        +--rw name     string
-        +--rw label* [name]
-           +--rw name     string
-           +--rw value    string
diff --git a/config-models/plproxy-1.x/files/yang/prom-label-proxy.yang b/config-models/plproxy-1.x/files/yang/prom-label-proxy.yang
deleted file mode 100755
index 4bfa3a7..0000000
--- a/config-models/plproxy-1.x/files/yang/prom-label-proxy.yang
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-module prom-label-proxy {
-  namespace "http://opennetworking.org/promlabelproxy/config/";
-  prefix plp;
-
-  organization "Open Networking Foundation.";
-  contact "Amit Wankhede";
-  description "A Aether groups and prom label configuration";
-
-  revision "2021-09-24" {
-    description "Prom label proxy user configuration";
-    reference "RFC 6087";
-  }
-
-  container user-groups {
-    description "The top level container";
-    list user-group {
-		key "name";
-		description "A list of user groups";
-		leaf name { type  string;description "name of user group";}
-		list label {
-			   key "name";
-			   description "A list of labels";
-			   leaf name { type  string;mandatory true;description "name of label";}
-			   leaf value { type  string;mandatory true;description "value of label";}
-		}
-	}
- }
-
-}
diff --git a/config-models/plproxy-1.x/templates/_helpers.tpl b/config-models/plproxy-1.x/templates/_helpers.tpl
deleted file mode 100755
index 4b28369..0000000
--- a/config-models/plproxy-1.x/templates/_helpers.tpl
+++ /dev/null
@@ -1,53 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Open Networking Foundation
-//
-// SPDX-License-Identifier: Apache-2.0
-
-{{/* vim: set filetype=mustache: */}}
-{{/*
-Expand the name of the chart.
-*/}}
-{{- define "plproxy.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
-If release name contains chart name it will be used as a full name.
-*/}}
-{{- define "plproxy.fullname" -}}
-{{- if contains "config-model-plproxy" .Release.Name -}}
-{{- printf "%s-%s" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{- printf "%s-%s-config-model-plproxy" .Release.Name .Chart.AppVersion | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-{{- end -}}
-
-{{/*
-Create chart name and version as used by the chart label.
-*/}}
-{{- define "plproxy.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-
-{{/*
-Common labels
-*/}}
-{{- define "plproxy.labels" -}}
-helm.sh/chart: {{ include "plproxy.chart" . }}
-{{ include "plproxy.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end -}}
-
-{{/*
-Selector labels
-*/}}
-{{- define "plproxy.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "plproxy.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end -}}
-}
diff --git a/config-models/plproxy-1.x/templates/model.yaml b/config-models/plproxy-1.x/templates/model.yaml
deleted file mode 100755
index b467cb8..0000000
--- a/config-models/plproxy-1.x/templates/model.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-# SPDX-FileCopyrightText: 2021-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
-
-apiVersion: config.onosproject.org/v1beta1
-kind: Model
-metadata:
-  name: {{ template "plproxy.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "plproxy.labels" . | nindent 4 }}
-spec:
-  plugin:
-    type: PLProxy
-    version: {{ .Chart.AppVersion | quote }}
-  modules:
-  - name: plproxy-service
-    organization: Open Networking Foundation
-    revision: 2021-09-24
-    file: prom-label-proxy.yang
-  files:
-    {{- range $path, $_  := $.Files.Glob "files/yang/*.yang" }}
-    {{ base $path }}: |
-{{ $.Files.Get $path | indent 6 }}
-    {{- end }}
diff --git a/config-models/plproxy-1.x/values.yaml b/config-models/plproxy-1.x/values.yaml
deleted file mode 100755
index aec2bd5..0000000
--- a/config-models/plproxy-1.x/values.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-#
-# SPDX-License-Identifier: Apache-2.0
