AETHER-2175 Add ROC and SimApp for 4G/5G

Change-Id: I36e58853c2681eff4f80bcc50bcad548b9220e49
diff --git a/4g-core-values.yaml b/4g-core-values.yaml
new file mode 100644
index 0000000..3b1add4
--- /dev/null
+++ b/4g-core-values.yaml
@@ -0,0 +1,90 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+# cassandra values
+cassandra:
+  config:
+    cluster_size: 1
+    seed_size: 1
+resources:
+  enabled: false
+
+config:
+  managedByConfigPod:
+    enabled: true
+    # syncUrl: http://sdcore-adapter-v3.aether-roc.svc:8080/synchronize
+  config4g:
+    deploy: true
+  spgwc:
+    pfcp: true
+    cfgFiles:
+      cp.json:
+        ip_pool_config:
+          ueIpPool:
+            ip: "172.250.0.0"
+            mask: "255.255.0.0"
+          staticUeIpPool:
+            ip: "172.250.1.0"
+            mask: "255.255.255.0"
+  simapp:
+    cfgFiles:
+      simapp.yaml:
+        configuration:
+          provision-network-slice: true
+          sub-provision-endpt:
+            addr: config4g
+            port: 5000
+          subscribers:
+          - ueId-start: 208014567891201
+            ueId-end: 208014567891211
+            plmnId: 20801
+            opc: "d4416644f6154936193433dd20a0ace0"
+            op: ""
+            key: "465b5ce8b199b49faa5f0a2ee238a6bc"
+            sequenceNumber: 96
+          device-groups:
+          - name:  "4g-oaisim-user"
+            imsis:
+              - "208014567891201"
+              - "208014567891202"
+            ip-domain-name: "pool1"
+            ip-domain-expanded:
+              dnn: internet
+              dns-primary: "8.8.8.8"
+              mtu: 1460
+              ue-ip-pool: "172.250.0.0/16"
+            site-info: "aiab"
+          network-slices:
+          - name: "default"
+            slice-id:
+              sd: "010203"
+              sst: 1
+            site-device-group:
+            - "4g-oaisim-user"
+            applications-information:
+            - app-name: "default-app"
+              end-port: 40000
+              endpoint: "1.1.1.1/32"
+              protocol: 17
+              start-port: 40000
+            deny-applications:
+            - "iot-app-deny"
+            permit-applications:
+            - "iot-app1-permit"
+            - "iot-app2-permit"
+            qos:
+              downlink: 20000000
+              traffic-class: "platinum"
+              uplink: 4000000
+            site-info:
+              gNodeBs:
+              - name: "aiab-gnb1"
+                tac: 1
+              plmn:
+                mcc: "208"
+                mnc: "01"
+              site-name: "aiab"
+              upf:
+                upf-name: "upf"
+                upf-port: 8805
diff --git a/aether-in-a-box-values.yaml b/5g-core-values.yaml
similarity index 62%
rename from aether-in-a-box-values.yaml
rename to 5g-core-values.yaml
index 7734d3a..eb80a69 100644
--- a/aether-in-a-box-values.yaml
+++ b/5g-core-values.yaml
@@ -2,11 +2,6 @@
 #
 # SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
 
-# cassandra values
-cassandra:
-  config:
-    cluster_size: 1
-    seed_size: 1
 mongodb:
   usePassword: false
   persistence:
@@ -14,10 +9,10 @@
 resources:
   enabled: false
 
-# Enable Nodeport service in UPF to view BESS graph
-#service:
-#  type: NodePort
 config:
+  managedByConfigPod:
+    enabled: true
+    # syncUrl: http://sdcore-adapter-v3.aether-roc.svc:8080/synchronize
   smf:
     cfgFiles:
       # https://github.com/free5gc/free5gc/blob/main/config/pcfcfg.yaml
@@ -45,86 +40,17 @@
           MongoDBName: free5gc # database name in MongoDB
           MongoDBUrl: mongodb://mongodb:27017
           #MongoDBUrl: mongodb://mongodb:27017 #works with db in omec name space
-  spgwc:
-    pfcp: true
-    cfgFiles:
-      cp.json:
-        ip_pool_config:
-          ueIpPool:
-            ip: "172.250.0.0"
-            mask: "255.255.0.0"
-          staticUeIpPool:
-            ip: "172.250.1.0"
-            mask: "255.255.255.0"
-  upf:
-    name: "oaisim"
-    sriov:
-      enabled: false
-    hugepage:
-      enabled: false
-    cniPlugin: simpleovs
-    ipam: static
-    cfgFiles:
-      upf.json:
-        mode: af_packet
-        cpiface:
-          dnn: "8internet"
-          hostname: "upf"
-          enable_ue_ip_alloc: false
-          ue_ip_pool: 172.250.0.0/16
-  mme:
-    cfgFiles:
-      config.json:
-        mme:
-          logging: debug
-          mcc:
-            dig1: 2
-            dig2: 0
-            dig3: 8
-          mnc:
-            dig1: 0
-            dig2: 1
-            dig3: -1
-          plmnlist:
-            #plmn1 - aether common plmn, plmn2 is for comac-in-box
-            plmn1: "mcc=208,mnc=01"
-          apnlist:
-            internet: "spgwc"
-  hss:
-    bootstrap:
-      users:
-        - apn: "internet"
-          key: "465b5ce8b199b49faa5f0a2ee238a6bc"
-          opc: "d4416644f6154936193433dd20a0ace0"
-          sqn: 96
-          imsiStart: "208014567891201"
-          msisdnStart: "1122334455"
-          count: 10
-  # oaisim values
-  enb:
-    mme:
-      address: 127.0.0.1
-    networks:
-      s1u:
-        interface: enb
-  plmn:
-    mcc: "208"
-    mnc: "01"
-    mnc_length: 2
-  ue:
-    sim:
-      msin: "4567891201"
-      api_key: "465b5ce8b199b49faa5f0a2ee238a6bc"
-      opc: "d4416644f6154936193433dd20a0ace0"
-      msisdn: "1122334456"
   simapp:
     cfgFiles:
       simapp.yaml:
         configuration:
           provision-network-slice: true
+          sub-provision-endpt:
+            addr: webui
+            port: 5000
           subscribers:
           - ueId-start: 2089300007487
-            ueId-end: 2089300007487
+            ueId-end: 2089300007488
             plmnId: 20893
             opc: "981d464c7c52eb6e5036234984ad0bcf"
             op: ""
diff --git a/Makefile b/Makefile
index a17129b..af38058 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,15 @@
 RESOURCEDIR	:= $(MAKEDIR)/resources
 WORKSPACE	?= $(HOME)
 VENV		?= $(BUILD)/venv/aiab
-AIABVALUES	?= $(MAKEDIR)/aether-in-a-box-values.yaml
+
+4G_CORE_VALUES ?= $(MAKEDIR)/4g-core-values.yaml
+5G_CORE_VALUES ?= $(MAKEDIR)/5g-core-values.yaml
+OAISIM_VALUES  ?= $(MAKEDIR)/oaisim-values.yaml
+ROC_VALUES     ?= $(MAKEDIR)/roc-values.yaml
+UPF_VALUES     ?= $(MAKEDIR)/upf-values.yaml
+RANSIM_VALUES  ?= $(MAKEDIR)/ransim-values.yaml
+ROC_4G_MODELS  ?= $(MAKEDIR)/roc-4g-models.json
+ROC_5G_MODELS  ?= $(MAKEDIR)/roc-5g-models.json
 
 KUBESPRAY_VERSION ?= release-2.14
 DOCKER_VERSION	?= 19.03
@@ -150,8 +158,8 @@
 	kubectl delete net-attach-def core-net
 	touch $@
 
-registry-secret: $(RESOURCEDIR)/aether.registry.yaml
-$(RESOURCEDIR)/aether.registry.yaml:
+auth-secret: $(RESOURCEDIR)/aether.registry.yaml
+$(RESOURCEDIR)/aether.registry.yaml: configs/authentication
 	kubectl -n omec create secret docker-registry aether.registry \
 		--docker-server=https://registry.aetherproject.org \
 		--docker-username=${REGISTRY_USERNAME} \
@@ -163,49 +171,48 @@
 	kubectl -n omec get secret aether.registry || kubectl create -f $(RESOURCEDIR)/aether.registry.yaml
 	helm repo update
 	if [ "$(CHARTS)" == "local" ]; then helm dep up $(OMEC_CONTROL_PLANE_CHART); fi
-	helm upgrade --install $(HELM_GLOBAL_ARGS) \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
 		--namespace omec \
-		--values $(AIABVALUES) \
+		--values $(4G_CORE_VALUES) \
+		sim-app \
+		$(OMEC_SUB_PROVISION_CHART) && \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
+		--namespace omec \
+		--values $(4G_CORE_VALUES) \
 		omec-control-plane \
 		$(OMEC_CONTROL_PLANE_CHART) && \
-	kubectl wait pod -n omec --for=condition=Ready -l release=omec-control-plane --timeout=300s && \
-	helm upgrade --install $(HELM_GLOBAL_ARGS) \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
 		--namespace omec \
-		--values $(AIABVALUES) \
+		--values $(UPF_VALUES) \
 		omec-user-plane \
-		$(OMEC_USER_PLANE_CHART) && \
-	kubectl wait pod -n omec --for=condition=Ready -l release=omec-user-plane --timeout=300s
+		$(OMEC_USER_PLANE_CHART)
 	touch $@
 
 $(M)/5g-core: | $(M)/helm-ready /opt/cni/bin/simpleovs /opt/cni/bin/static $(M)/fabric $(RESOURCEDIR)/aether.registry.yaml
 	kubectl get namespace omec 2> /dev/null || kubectl create namespace omec
-	kubectl -n omec get secret aether.registry || kubectl creates -f $(RESOURCEDIR)/aether.registry.yaml
+	kubectl -n omec get secret aether.registry || kubectl create -f $(RESOURCEDIR)/aether.registry.yaml
 	helm repo update
 	if [ "$(CHARTS)" == "local" ]; then helm dep up $(5GC_CONTROL_PLANE_CHART); fi
-	helm upgrade --install $(HELM_GLOBAL_ARGS) \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
 		--namespace omec \
-		--values $(AIABVALUES) \
+		--values $(5G_CORE_VALUES) \
 		sim-app \
 		$(OMEC_SUB_PROVISION_CHART) && \
-	kubectl wait pod -n omec --for=condition=Ready -l release=sim-app --timeout=300s
-	helm upgrade --install $(HELM_GLOBAL_ARGS) \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
 		--namespace omec \
-		--values $(AIABVALUES) \
+		--values $(UPF_VALUES) \
 		5g-core-up \
 		$(OMEC_USER_PLANE_CHART) && \
-	kubectl wait pod -n omec --for=condition=Ready -l release=5g-core-up --timeout=300s
-	helm upgrade --install $(HELM_GLOBAL_ARGS) \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
 		--namespace omec \
-		--values $(AIABVALUES) \
+		--values $(5G_CORE_VALUES) \
 		fgc-core \
 		$(5GC_CONTROL_PLANE_CHART) && \
-	kubectl wait pod -n omec --for=condition=Ready -l release=fgc-core --timeout=300s && \
-	helm upgrade --install $(HELM_GLOBAL_ARGS) \
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
 		--namespace omec \
-		--values $(AIABVALUES) \
+		--values $(RANSIM_VALUES) \
 		5g-ransim-plane \
-		$(5G_RAN_SIM_CHART) && \
-	kubectl wait pod -n omec --for=condition=Ready -l release=5g-ransim-plane --timeout=300s
+		$(5G_RAN_SIM_CHART)
 	touch $@
 
 # UE images includes kernel module, ue_ip.ko
@@ -225,7 +232,7 @@
 $(M)/oaisim: | $(M)/ue-image $(M)/omec
 	sudo ip addr add 127.0.0.2/8 dev lo || true
 	$(eval mme_iface=$(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }'))
-	helm upgrade --install $(HELM_GLOBAL_ARGS) --namespace omec oaisim cord/oaisim -f $(AIABVALUES) \
+	helm upgrade --install $(HELM_GLOBAL_ARGS) --namespace omec oaisim cord/oaisim -f $(OAISIM_VALUES) \
 		--set config.enb.networks.s1_mme.interface=$(mme_iface) \
 		--set images.pullPolicy=IfNotPresent
 	kubectl rollout status -n omec statefulset ue
@@ -237,6 +244,64 @@
 	done"
 	touch $@
 
+roc: $(M)/roc
+$(M)/roc: $(M)/helm-ready
+	kubectl get namespace aether-roc 2> /dev/null || kubectl create namespace aether-roc
+	helm repo update
+	if [ "$(CHARTS)" == "local" ]; then helm dep up $(AETHER_ROC_UMBRELLA_CHART); fi
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
+		--namespace kube-system \
+		--values $(ROC_VALUES) \
+		atomix-controller \
+		$(ATOMIX_CONTROLLER_CHART)
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
+		--namespace kube-system \
+		--values $(ROC_VALUES) \
+		atomix-raft-storage \
+		$(ATOMIX_RAFT_STORAGE_CHART)
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
+		--namespace kube-system \
+		--values $(ROC_VALUES) \
+		onos-operator \
+		$(ONOS_OPERATOR_CHART)
+	helm upgrade --install --wait $(HELM_GLOBAL_ARGS) \
+		--namespace aether-roc \
+		--values $(ROC_VALUES) \
+		aether-roc-umbrella \
+		$(AETHER_ROC_UMBRELLA_CHART)
+	touch $@
+
+# Load the ROC 4G models.  Disable loading network slice from SimApp.
+roc-4g-models: $(M)/roc
+	sed -i 's/provision-network-slice: true/provision-network-slice: false/' $(4G_CORE_VALUES)
+	sed -i 's/# syncUrl/syncUrl/' $(4G_CORE_VALUES)
+	$(eval ONOS_CLI_POD := $(shell kubectl -n aether-roc get pods -l name=onos-cli -o name))
+	echo "ONOS CLI pod: ${ONOS_CLI_POD}"
+	until kubectl -n aether-roc exec ${ONOS_CLI_POD} -- \
+		curl -s -f -L -X PATCH "http://aether-roc-api:8181/aether-roc-api" \
+		--header 'Content-Type: application/json' \
+		--data-raw "$$(cat ${ROC_4G_MODELS})"; do sleep 5; done
+
+# Load the ROC 5G models.  Disable loading network slice from SimApp.
+roc-5g-models: $(M)/roc
+	sed -i 's/provision-network-slice: true/provision-network-slice: false/' $(5G_CORE_VALUES)
+	sed -i 's/# syncUrl/syncUrl/' $(5G_CORE_VALUES)
+	$(eval ONOS_CLI_POD := $(shell kubectl -n aether-roc get pods -l name=onos-cli -o name))
+	echo "ONOS CLI pod: ${ONOS_CLI_POD}"
+	until kubectl -n aether-roc exec ${ONOS_CLI_POD} -- \
+		curl -s -f -L -X PATCH "http://aether-roc-api:8181/aether-roc-api" \
+		--header 'Content-Type: application/json' \
+		--data-raw "$$(cat ${ROC_5G_MODELS})"; do sleep 5; done
+
+roc-clean:
+	@echo "This could take 2-3 minutes..."
+	sed -i 's/provision-network-slice: false/provision-network-slice: true/' $(4G_CORE_VALUES)
+	sed -i 's/  syncUrl/  # syncUrl/' $(4G_CORE_VALUES)
+	sed -i 's/provision-network-slice: false/provision-network-slice: true/' $(5G_CORE_VALUES)
+	sed -i 's/  syncUrl/  # syncUrl/' $(5G_CORE_VALUES)
+	kubectl delete namespace aether-roc || true
+	rm -rf $(M)/roc
+
 test: | $(M)/fabric $(M)/omec $(M)/oaisim
 	@sleep 5
 	@echo "Test1: ping from UE to SGI network gateway"
@@ -248,18 +313,12 @@
 	@echo "Finished to test"
 
 reset-test:
-	helm delete -n omec oaisim || true
-	helm delete -n omec omec-control-plane || true
-	helm delete -n omec omec-user-plane || true
+	kubectl delete namespace omec || true
 	kubectl delete po router || true
 	cd $(M); rm -f oaisim omec fabric
 
 reset-5g-test:
-	helm uninstall -n omec sim-app || true
-	helm uninstall -n omec fgc-core || true
-	helm uninstall -n omec 5g-core-up || true
-	helm uninstall -n omec 5g-ransim-plane || true
-	helm uninstall -n omec mongo || true
+	kubectl delete namespace omec || true
 	cd $(M); rm -f 5g-core
 
 clean: reset-test
diff --git a/configs/authentication b/configs/authentication
index e8cd76a..1061631 100644
--- a/configs/authentication
+++ b/configs/authentication
@@ -9,4 +9,4 @@
 # Configure auth for private Docker registry.  Override with credentials
 # obtained from https://registry.aetherproject.org.
 REGISTRY_USERNAME   := myuser
-REGISTRY_CLI_SECRET := my-cli-secret
\ No newline at end of file
+REGISTRY_CLI_SECRET := my-cli-secret
diff --git a/configs/latest b/configs/latest
index 0ddf53e..8b06999 100644
--- a/configs/latest
+++ b/configs/latest
@@ -6,4 +6,10 @@
 OMEC_USER_PLANE_CHART    := aether/omec-user-plane
 OMEC_SUB_PROVISION_CHART := aether/omec-sub-provision
 5GC_CONTROL_PLANE_CHART  := aether/5g-control-plane
-5G_RAN_SIM_CHART         := aether/5g-ran-sim
\ No newline at end of file
+5G_RAN_SIM_CHART         := aether/5g-ran-sim
+
+# For installing the ROC
+AETHER_ROC_UMBRELLA_CHART := sdran/aether-roc-umbrella
+ATOMIX_CONTROLLER_CHART   := atomix/atomix-controller
+ATOMIX_RAFT_STORAGE_CHART := atomix/atomix-raft-storage
+ONOS_OPERATOR_CHART       := onosproject/onos-operator
diff --git a/configs/local b/configs/local
index f0ecf6f..751b9a7 100644
--- a/configs/local
+++ b/configs/local
@@ -6,4 +6,10 @@
 OMEC_USER_PLANE_CHART    := $(WORKSPACE)/cord/aether-helm-charts/omec/omec-user-plane
 OMEC_SUB_PROVISION_CHART := $(WORKSPACE)/cord/aether-helm-charts/omec/omec-sub-provision
 5GC_CONTROL_PLANE_CHART  := $(WORKSPACE)/cord/aether-helm-charts/omec/5g-control-plane
-5G_RAN_SIM_CHART         := $(WORKSPACE)/cord/aether-helm-charts/omec/5g-ran-sim
\ No newline at end of file
+5G_RAN_SIM_CHART         := $(WORKSPACE)/cord/aether-helm-charts/omec/5g-ran-sim
+
+# For installing the ROC
+AETHER_ROC_UMBRELLA_CHART := $(WORKSPACE)/cord/sdran-helm-charts/aether-roc-umbrella
+ATOMIX_CONTROLLER_CHART   := $(WORKSPACE)/cord/atomix-helm-charts/atomix-controller
+ATOMIX_RAFT_STORAGE_CHART := $(WORKSPACE)/cord/atomix-helm-charts/atomix-raft-storage
+ONOS_OPERATOR_CHART       := $(WORKSPACE)/cord/onos-helm-charts/onos-operator
\ No newline at end of file
diff --git a/configs/rc-1.5 b/configs/rc-1.5
index c655621..217bb9a 100644
--- a/configs/rc-1.5
+++ b/configs/rc-1.5
@@ -2,8 +2,19 @@
 #
 # SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
 
-OMEC_CONTROL_PLANE_CHART := aether/omec-control-plane --version 0.6.23
-OMEC_USER_PLANE_CHART    := aether/omec-user-plane --version 0.3.33
-OMEC_SUB_PROVISION_CHART := aether/omec-sub-provision --version 0.0.6
-5GC_CONTROL_PLANE_CHART  := aether/5g-control-plane --version 0.2.20
-5G_RAN_SIM_CHART         := aether/5g-ran-sim --version 0.0.2
\ No newline at end of file
+OMEC_CONTROL_PLANE_CHART := aether/omec-control-plane --version 0.6.25
+OMEC_USER_PLANE_CHART    := aether/omec-user-plane --version 0.3.36
+
+# Release version of omec-sub-provision is actually 0.0.6 but that version
+# is unable to configure network slices and device groups.  That's only an
+# issue if not using the ROC.  It is fixed in 0.1.1.
+OMEC_SUB_PROVISION_CHART := aether/omec-sub-provision --version 0.1.1
+
+5GC_CONTROL_PLANE_CHART  := aether/5g-control-plane --version 0.2.21
+5G_RAN_SIM_CHART         := aether/5g-ran-sim --version 0.0.2
+
+# For installing the ROC
+AETHER_ROC_UMBRELLA_CHART := sdran/aether-roc-umbrella --version 1.3.6
+ATOMIX_CONTROLLER_CHART   := atomix/atomix-controller --version 0.6.8
+ATOMIX_RAFT_STORAGE_CHART := atomix/atomix-raft-storage --version 0.1.9
+ONOS_OPERATOR_CHART       := onosproject/onos-operator --version 0.4.10
diff --git a/oaisim-values.yaml b/oaisim-values.yaml
new file mode 100644
index 0000000..708e258
--- /dev/null
+++ b/oaisim-values.yaml
@@ -0,0 +1,21 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+config:
+  enb:
+    mme:
+      address: 127.0.0.1
+    networks:
+      s1u:
+        interface: enb
+  plmn:
+    mcc: "208"
+    mnc: "01"
+    mnc_length: 2
+  ue:
+    sim:
+      msin: "4567891201"
+      api_key: "465b5ce8b199b49faa5f0a2ee238a6bc"
+      opc: "d4416644f6154936193433dd20a0ace0"
+      msisdn: "1122334456"
diff --git a/ransim-values.yaml b/ransim-values.yaml
new file mode 100644
index 0000000..00bb745
--- /dev/null
+++ b/ransim-values.yaml
@@ -0,0 +1,6 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+resources:
+  enabled: false
diff --git a/roc-4g-models.json b/roc-4g-models.json
new file mode 100644
index 0000000..28cfca1
--- /dev/null
+++ b/roc-4g-models.json
@@ -0,0 +1,185 @@
+{
+    "default-target": "connectivity-service-v3",
+    "Updates": {
+        "ap-list-3.0.0": {
+            "ap-list": [
+                {
+                    "access-points": [
+                        {
+                            "address": "aiab-gnb1",
+                            "enable": true,
+                            "tac": "0001"
+                        }
+                    ],
+                    "description": "AiaB Access Points",
+                    "display-name": "AiaB APs",
+                    "enterprise": "aiab-enterprise",
+                    "id": "aiab-qa-app"
+                }
+            ]
+        },
+        "application-3.0.0": {
+            "application": [
+                {
+                    "description": "AiaB - Test application",
+                    "display-name": "TestApp",
+                    "enterprise": "aiab-enterprise",
+                    "endpoint": [
+                        {
+                            "address": "1.1.1.1",
+                            "name": "aiab-testapp",
+                            "port-end": 40000,
+                            "port-start": 40000,
+                            "protocol": "UDP"
+                        }
+                    ],
+                    "id": "aiab-testapp"
+                }
+            ]
+        },
+        "connectivity-service-3.0.0": {
+            "connectivity-service": [
+                {
+                    "core-5g-endpoint": "http://config4g.omec.svc:5000/config",
+                    "description": "4G Integration Test",
+                    "display-name": "ROC 4G Test Connectivity Service",
+                    "id": "aiab-cs"
+                }
+            ]
+        },
+        "device-group-3.0.0": {
+            "device-group": [
+                {
+                    "display-name": "AiaB Users",
+                    "id": "aiab-device-group",
+                    "imsis": [
+                        {
+                            "imsi-range-from": 208014567891201,
+                            "imsi-range-to": 208014567891202,
+                            "name": "aiab-imsis"
+                        }
+                    ],
+                    "ip-domain": "aiab-ip-pool",
+                    "site": "aiab-site"
+                }
+            ]
+        },
+        "enterprise-3.0.0": {
+            "enterprise": [
+                {
+                    "connectivity-service": [
+                        {
+                            "connectivity-service": "aiab-cs",
+                            "enabled": true
+                        }
+                    ],
+                    "description": "AiaB Enterprise",
+                    "display-name": "AiaB Corp.",
+                    "id": "aiab-enterprise"
+                }
+            ]
+        },
+        "ip-domain-3.0.0": {
+            "ip-domain": [
+                {
+                    "admin-status": "ENABLE",
+                    "display-name": "IP pool",
+                    "dns-primary": "8.8.8.8",
+                    "id": "aiab-ip-pool",
+                    "mtu": 1460,
+                    "subnet": "172.250.0.0/16",
+                    "enterprise": "aiab-enterprise"
+                }
+            ]
+        },
+        "site-3.0.0": {
+            "site": [
+                {
+                    "description": "AiaB test site",
+                    "display-name": "AiaB site",
+                    "enterprise": "aiab-enterprise",
+                    "id": "aiab-site",
+                    "imsi-definition": {
+                        "mcc": "208",
+                        "mnc": "01",
+                        "enterprise": 0,
+                        "format": "SSSSSSSSSSSSSSS"
+                    }
+                }
+            ]
+        },
+        "template-3.0.0": {
+            "template": [
+                {
+                    "description": "Test Template",
+                    "display-name": "Test Template",
+                    "downlink": 200,
+                    "id": "aiab-template",
+                    "sd": 66051,
+                    "sst": 1,
+                    "traffic-class": "aiab-class-1",
+                    "uplink": 40
+                }
+            ]
+        },
+        "traffic-class-3.0.0": {
+            "traffic-class": [
+                {
+                    "description": "High Priority TC",
+                    "display-name": "Class 1",
+                    "id": "aiab-class-1",
+                    "pdb": 100,
+                    "pelr": 3,
+                    "qci": 1
+                }
+            ]
+        },
+        "upf-3.0.0": {
+            "upf": [
+                {
+                    "address": "upf",
+                    "description": "AiaB UPF",
+                    "display-name": "AiaB UPF",
+                    "id": "aiab-upf",
+                    "enterprise": "aiab-enterprise",
+                    "port": 8805
+                }
+            ]
+        },
+        "vcs-3.0.0": {
+            "vcs": [
+                {
+                    "id": "aiab-vcs",
+                    "template": "aiab-template",
+                    "enterprise": "aiab-enterprise",
+                    "uplink": 40,
+                    "downlink": 200,
+                    "traffic-class": "aiab-class-1",
+                    "description": "AiaB Virtual Connectivity Service",
+                    "display-name": "AiaB VCS",
+                    "device-group": [
+                        {
+                            "device-group": "aiab-device-group",
+                            "enable": true
+                        }
+                    ],
+                    "upf": "aiab-upf",
+                    "sd": 66051,
+                    "sst": 1,
+                    "ap": "aiab-qa-app",
+                    "application": [
+                        {
+                            "application": "aiab-testapp",
+                            "allow": true
+                        }
+                    ]
+                }
+            ]
+        }
+    },
+    "Deletes": {},
+    "Extensions": {
+        "model-version-101": "3.0.0",
+        "model-type-102": "Aether"
+    }
+}
diff --git a/roc-4g-models.json.license b/roc-4g-models.json.license
new file mode 100644
index 0000000..0508f22
--- /dev/null
+++ b/roc-4g-models.json.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2021 Open Networking Foundation
+
+SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
\ No newline at end of file
diff --git a/roc-5g-models.json b/roc-5g-models.json
new file mode 100644
index 0000000..b168ede
--- /dev/null
+++ b/roc-5g-models.json
@@ -0,0 +1,185 @@
+{
+    "default-target": "connectivity-service-v3",
+    "Updates": {
+        "ap-list-3.0.0": {
+            "ap-list": [
+                {
+                    "access-points": [
+                        {
+                            "address": "aiab-gnb1",
+                            "enable": true,
+                            "tac": "0001"
+                        }
+                    ],
+                    "description": "AiaB Access Points",
+                    "display-name": "AiaB APs",
+                    "enterprise": "aiab-enterprise",
+                    "id": "aiab-qa-app"
+                }
+            ]
+        },
+        "application-3.0.0": {
+            "application": [
+                {
+                    "description": "AiaB - Test application",
+                    "display-name": "TestApp",
+                    "enterprise": "aiab-enterprise",
+                    "endpoint": [
+                        {
+                            "address": "1.1.1.1",
+                            "name": "aiab-testapp",
+                            "port-end": 40000,
+                            "port-start": 40000,
+                            "protocol": "UDP"
+                        }
+                    ],
+                    "id": "aiab-testapp"
+                }
+            ]
+        },
+        "connectivity-service-3.0.0": {
+            "connectivity-service": [
+                {
+                    "core-5g-endpoint": "http://webui.omec.svc:5000/config",
+                    "description": "5G Integration Test",
+                    "display-name": "ROC 5G Test Connectivity Service",
+                    "id": "aiab-cs"
+                }
+            ]
+        },
+        "device-group-3.0.0": {
+            "device-group": [
+                {
+                    "display-name": "AiaB Users",
+                    "id": "aiab-device-group",
+                    "imsis": [
+                        {
+                            "imsi-range-from": 2089300007487,
+                            "imsi-range-to": 2089300007488,
+                            "name": "aiab-imsis"
+                        }
+                    ],
+                    "ip-domain": "aiab-ip-pool",
+                    "site": "aiab-site"
+                }
+            ]
+        },
+        "enterprise-3.0.0": {
+            "enterprise": [
+                {
+                    "connectivity-service": [
+                        {
+                            "connectivity-service": "aiab-cs",
+                            "enabled": true
+                        }
+                    ],
+                    "description": "AiaB Enterprise",
+                    "display-name": "AiaB Corp.",
+                    "id": "aiab-enterprise"
+                }
+            ]
+        },
+        "ip-domain-3.0.0": {
+            "ip-domain": [
+                {
+                    "admin-status": "ENABLE",
+                    "display-name": "IP pool",
+                    "dns-primary": "8.8.8.8",
+                    "id": "aiab-ip-pool",
+                    "mtu": 1460,
+                    "subnet": "172.250.0.0/16",
+                    "enterprise": "aiab-enterprise"
+                }
+            ]
+        },
+        "site-3.0.0": {
+            "site": [
+                {
+                    "description": "AiaB test site",
+                    "display-name": "AiaB site",
+                    "enterprise": "aiab-enterprise",
+                    "id": "aiab-site",
+                    "imsi-definition": {
+                        "mcc": "208",
+                        "mnc": "93",
+                        "enterprise": 0,
+                        "format": "SSSSSSSSSSSSSSS"
+                    }
+                }
+            ]
+        },
+        "template-3.0.0": {
+            "template": [
+                {
+                    "description": "Test Template",
+                    "display-name": "Test Template",
+                    "downlink": 200,
+                    "id": "aiab-template",
+                    "sd": 66051,
+                    "sst": 1,
+                    "traffic-class": "aiab-class-1",
+                    "uplink": 40
+                }
+            ]
+        },
+        "traffic-class-3.0.0": {
+            "traffic-class": [
+                {
+                    "description": "High Priority TC",
+                    "display-name": "Class 1",
+                    "id": "aiab-class-1",
+                    "pdb": 100,
+                    "pelr": 3,
+                    "qci": 1
+                }
+            ]
+        },
+        "upf-3.0.0": {
+            "upf": [
+                {
+                    "address": "upf",
+                    "description": "AiaB UPF",
+                    "display-name": "AiaB UPF",
+                    "id": "aiab-upf",
+                    "enterprise": "aiab-enterprise",
+                    "port": 8805
+                }
+            ]
+        },
+        "vcs-3.0.0": {
+            "vcs": [
+                {
+                    "id": "aiab-vcs",
+                    "template": "aiab-template",
+                    "enterprise": "aiab-enterprise",
+                    "uplink": 40,
+                    "downlink": 200,
+                    "traffic-class": "aiab-class-1",
+                    "description": "AiaB Virtual Connectivity Service",
+                    "display-name": "AiaB VCS",
+                    "device-group": [
+                        {
+                            "device-group": "aiab-device-group",
+                            "enable": true
+                        }
+                    ],
+                    "upf": "aiab-upf",
+                    "sd": 66051,
+                    "sst": 1,
+                    "ap": "aiab-qa-app",
+                    "application": [
+                        {
+                            "application": "aiab-testapp",
+                            "allow": true
+                        }
+                    ]
+                }
+            ]
+        }
+    },
+    "Deletes": {},
+    "Extensions": {
+        "model-version-101": "3.0.0",
+        "model-type-102": "Aether"
+    }
+}
diff --git a/roc-5g-models.json.license b/roc-5g-models.json.license
new file mode 100644
index 0000000..0508f22
--- /dev/null
+++ b/roc-5g-models.json.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2021 Open Networking Foundation
+
+SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
\ No newline at end of file
diff --git a/roc-values.yaml b/roc-values.yaml
new file mode 100644
index 0000000..5b1e11b
--- /dev/null
+++ b/roc-values.yaml
@@ -0,0 +1,47 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+global:
+  storage:
+    controller: "atomix-controller.kube-system:5679"
+  store:
+    consensus:
+      enabled: true
+      clusters: 1
+      replicas: 1
+      partitions: 1
+
+import:
+  aether-roc-gui:
+    v2_1:
+      enabled: false
+    v3:
+      enabled: true
+  sdcore-adapter:
+    v2_1:
+      enabled: false
+    v3:
+      enabled: true
+  sdcore-test-dummy:
+    enabled: false
+
+onos-gui:
+  ingress:
+    enabled: false
+  service:
+    type: NodePort
+
+aether-roc-gui-v3:
+  ingress:
+    enabled: false
+  service:
+    type: NodePort
+
+prometheus:
+  alertmanager:
+    persistentVolume:
+      enabled: false
+  server:
+    persistentVolume:
+      enabled: false
diff --git a/upf-values.yaml b/upf-values.yaml
new file mode 100644
index 0000000..7aa89f0
--- /dev/null
+++ b/upf-values.yaml
@@ -0,0 +1,24 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+resources:
+  enabled: false
+
+config:
+  upf:
+    name: "oaisim"
+    sriov:
+      enabled: false
+    hugepage:
+      enabled: false
+    cniPlugin: simpleovs
+    ipam: static
+    cfgFiles:
+      upf.json:
+        mode: af_packet
+        cpiface:
+          dnn: "internet"
+          hostname: "upf"
+          enable_ue_ip_alloc: false
+          ue_ip_pool: 172.250.0.0/16