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
new file mode 100644
index 0000000..2336f65
--- /dev/null
+++ b/config-models/aether-2.2.x/files/aether-2.2.0.tree
@@ -0,0 +1,155 @@
+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
new file mode 100755
index 0000000..d58a674
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/access-profile.yang
@@ -0,0 +1,71 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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
new file mode 100755
index 0000000..30f3e52
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/aether-subscriber.yang
@@ -0,0 +1,178 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+      }
+  }
+
+  typedef mnc {
+      type uint32 {
+        range 0..999;
+      }
+  }
+
+  typedef tac {
+      type uint32 {
+        range 0..99999999;
+      }
+  }
+
+  container subscriber {
+    description "The top level container";
+
+    list ue {
+      key "id";
+      description
+        "List of subscriber devices";
+
+      leaf id {
+        description "identifier for this subscriber, typically a UUID";
+        type ietf: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;
+            }
+          }
+        }
+        case range {
+          leaf imsi-range-from {
+            type uint64;
+          }
+          leaf imsi-range-to {
+            type uint64;
+          }
+        }
+      }
+
+      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";
+        }
+      }
+
+      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";
+          }
+        }
+        leaf security-profile {
+          type leafref {
+            path "/sec:security-profile/sec:security-profile/sec:id";
+          }              
+          description
+            "Link to security profile";
+        }
+      }
+    }
+  } 
+}
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
new file mode 100755
index 0000000..27361dc
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/apn-profile.yang
@@ -0,0 +1,100 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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
new file mode 100755
index 0000000..f12340b
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/connectivity-service.yang
@@ -0,0 +1,71 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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
new file mode 100755
index 0000000..38cb4b8
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/enterprise.yang
@@ -0,0 +1,73 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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";
+        }
+      }              
+    }
+  } 
+}
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
new file mode 100644
index 0000000..eacefb6
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/ietf-inet-types.yang
@@ -0,0 +1,458 @@
+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 {
+      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]\.?)'
+      + '|\.';
+      length "1..253";
+    }
+    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
new file mode 100644
index 0000000..ee58fa3
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/ietf-yang-types.yang
@@ -0,0 +1,474 @@
+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
new file mode 100755
index 0000000..5ad91b4
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/qos-profile.yang
@@ -0,0 +1,111 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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;
+          }
+          default 0;
+          units bps;
+          description
+            "Upstream aggregate maximum bit rate";
+        }
+        leaf downlink {
+          type uint32 {
+            range 0..4294967295;
+          }
+          default 0;
+          units bps;
+          description
+            "Downstream aggregate maximum bit rate";
+        }        
+      }
+
+      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
new file mode 100755
index 0000000..745b88e
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/security-profile.yang
@@ -0,0 +1,83 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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
new file mode 100755
index 0000000..9f2e7da
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/service-group.yang
@@ -0,0 +1,80 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  typedef service-kind {
+    type string {
+      length 1..32;
+      pattern "default|on-demand";
+    }
+  }
+
+  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";
+        }
+      }      
+
+      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
new file mode 100755
index 0000000..a0db158
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/service-policy.yang
@@ -0,0 +1,112 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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;
+          }
+          default 0;
+          units bps;
+          description
+            "Upstream aggregate maximum bit rate";
+        }
+        leaf downlink {
+          type uint32 {
+            range 0..4294967295;
+          }
+          default 0;
+          units bps;
+          description
+            "Downstream aggregate maximum bit rate";
+        }        
+      }
+
+      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";
+        }
+      }       
+
+      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
new file mode 100755
index 0000000..5dce127
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/service-rule.yang
@@ -0,0 +1,168 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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;
+            }
+            default 0;
+            units bps;
+            description
+              "Upstream maximum requested bandwidth";
+          }
+          leaf downlink {
+            type uint32 {
+              range 0..4294967295;
+            }
+            default 0;
+            units bps;
+            description
+              "Downstream maximum requested bandwidth";
+          }        
+        }
+
+        container guaranteed-bitrate {
+          leaf uplink {
+            type uint32 {
+              range 0..4294967295;
+            }
+            default 0;
+            units bps;
+            description
+              "Upstream guaranteed bitrate";
+          }
+          leaf downlink {
+            type uint32 {
+              range 0..4294967295;
+            }
+            default 0;
+            units bps;
+            description
+              "Downstream guaranteed bitrate";
+          }        
+        }
+
+        container aggregate-maximum-bitrate {
+          leaf uplink {
+            type uint32 {
+              range 0..4294967295;
+            }
+            default 0;
+            units bps;
+            description
+              "Upstream aggregate maximum bitrate";
+          }
+          leaf downlink {
+            type uint32 {
+              range 0..4294967295;
+            }
+            default 0;
+            units bps;
+            description
+              "Downstream aggregate maximum bitrate";
+          }        
+        }
+      }
+  
+      container flow {
+        leaf specification {
+          type string {
+            length 1..1024;
+          }
+          description "specification of this 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
new file mode 100755
index 0000000..9a38b02
--- /dev/null
+++ b/config-models/aether-2.2.x/files/yang/up-profile.yang
@@ -0,0 +1,71 @@
+// SPDX-FileCopyrightText: 2021 Open Networking Foundation
+//
+// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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;
+        }
+  }
+
+  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";
+      }      
+    }
+  } 
+}
