diff --git a/.gitignore b/.gitignore index b8de2e8..0157ce6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ .project .cproject .eclipse +workspace diff --git a/Makefile b/Makefile index 816c061..8b3a3f3 100644 --- a/Makefile +++ b/Makefile @@ -1,487 +1,105 @@ # Copyright 2020-present Open Networking Foundation # SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 -SHELL := /bin/bash -BUILD ?= /tmp/build -M ?= $(BUILD)/milestones -RIABDIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) -WORKSPACE ?= $(HOME) -SCRIPTDIR ?= $(RIABDIR)/scripts -RESOURCEDIR ?= $(RIABDIR)/resources -VENV ?= $(BUILD)/venv/riab -RIABVALUES ?= $(RIABDIR)/sdran-in-a-box-values.yaml -RIABVALUES-LATEST ?= $(RIABDIR)/sdran-in-a-box-values.yaml -RIABVALUES-V1.0.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.0.0.yaml -RIABVALUES-V1.1.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.0.yaml -RIABVALUES-V1.1.1 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.1.yaml -RIABVALUES-MS ?= $(RIABDIR)/sdran-in-a-box-values-master-stable.yaml -CHARTDIR ?= $(WORKSPACE)/helm-charts -AETHERCHARTDIR ?= $(CHARTDIR)/aether-helm-charts -AETHERCHARTCID ?= 6b3a267e428402d6bb8531bd921c1d202bb338b2 -SDRANCHARTDIR ?= $(CHARTDIR)/sdran-helm-charts -SDRANCHARTCID-LATEST ?= origin/master -SDRANCHARTCID-V1.0.0 ?= v1.0.0#branch: v1.0.0 -SDRANCHARTCID-V1.1.0 ?= 6670e6da25129b665b024a7c6d0fd79cfda52f25 -SDRANCHARTCID-V1.1.1 ?= 479ff0b59d4ae9f09cd9f7be6ea9a189f207b810 +# Include Variable file +include ./MakefileVar.mk +include ./mk/*.mk -KUBESPRAY_VERSION ?= release-2.14 -DOCKER_VERSION ?= 19.03 -K8S_VERSION ?= v1.18.9 -HELM_VERSION ?= v3.2.4 +# Default target +.DEFAULT_GOAL := riab -HELM_GLOBAL_ARGS ?= -HELM_NEM_ARGS ?= $(HELM_GLOBAL_ARGS) -HELM_ONOS_ARGS ?= $(HELM_GLOBAL_ARGS) +# PHONY definitions +OPT_SELECTION_PHONY := option +VER_SELECTION_PHONY := version +RUN_PHONY := riab +MAIN_PHONY := $(OPT_SELECTION_PHONY) $(VER_SELECTION_PHONY) $(RUN_PHONY) $(PRELIMINARIES_PHONY) $(INFRA_PHONY) $(EPC_PHONY) $(RIC_PHONY) $(RAN_PHONY) $(TEST_PHONY) $(RESET_CLEAN_PHONY) $(UTIL_PHONY) $(OBS_PHONY) -CORD_GERRIT_URL ?= https://gerrit.opencord.org -ONOS_GITHUB_URL ?= https://github.com/onosproject +.PHONY: $(MAINPHONY) -UE_IP_POOL ?= 172.250.0.0 -UE_IP_MASK ?= 16 +$(WORKSPACE): + mkdir -p $(WORKSPACE) -RIAB_OPTION ?= -# If we want to use different namespace, feel free to change it. -# However, the overriding value file, sdran-in-a-box-values.yaml, should be changed as well - config.hss.mmes section. -RIAB_NAMESPACE ?= riab -RANSIM_ARGS ?= --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true -RIC_ARGS ?= --set import.onos-pci.enabled=true -FB_AH_ARGS ?= --set import.fb-ah-xapp.enabled=true --set import.fb-ah-gui.enabled=true --set import.ah-eson-test-server.enabled=true --set import.ran-simulator.enabled=true - -F1_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') -F1_CU_IPADDR := $(shell ip -4 a show $(F1_CU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | tail -n 1) -F1_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') -F1_DU_IPADDR := $(shell ip -4 a show $(F1_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) -S1MME_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') -NFAPI_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') -NFAPI_DU_IPADDR := $(shell ip -4 a show $(NFAPI_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) -NFAPI_UE_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') -NFAPI_UE_IPADDR := $(shell ip -4 a show $(NFAPI_UE_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) - -cpu_family := $(shell lscpu | grep 'CPU family:' | awk '{print $$3}') -cpu_model := $(shell lscpu | grep 'Model:' | awk '{print $$2}') -os_vendor := $(shell lsb_release -i -s) -os_release := $(shell lsb_release -r -s) - -.PHONY: riab-oai riab-ransim riab-fbah riab-oai-latest riab-oai-v1.0.0 riab-oai-v1.1.0 riab-oai-v1.1.1 riab-ransim-latest riab-ransim-v1.0.0 riab-ransim-v1.1.0 riab-ransim-v1.1.1 riab-fbah riab-fbah-latest riab-fbah-v1.1.0 riab-fbah-v1.1.1 riab-fbah-dev riab-fbah-master-stable riab-oai-master-stable riab-ransim-master-stable oai-enb-usrp oai-ue-usrp ric-oai-latest set-option-oai set-option-ransim set-stable-aether-chart set-latest-sdran-chart set-v1.0.0-sdran-chart set-v1.1.0-sdran-chart set-v1.1.1-sdran-chart set-latest-riab-values set-v1.0.0-riab-values set-v1.1.0-riab-values set-v1.1.1-riab-values set-master-stable-riab-values fetch-all-charts omec oai oai-enb-cu oai-enb-du oai-ue ric atomix test-user-plane test-kpimon test-kpimon-v1 test-kpimon-v2 test-pci reset-oai reset-omec reset-atomix reset-ric reset-oai-test reset-ransim-test reset-test clean riab-ric riab-ric-latest riab-ric-v1.0.0 riab-ric-v1.1.0 riab-ric-v1.1.1 riab-ric-dev riab-ric-master-stable - -riab-oai: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values omec ric oai -riab-ransim: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric -riab-ric: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric -riab-fbah: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric - -riab-oai-latest: riab-oai -riab-ransim-latest: riab-ransim -riab-ric-latest: riab-ric -riab-fbah-latest: riab-fbah - -riab-oai-v1.0.0: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.0.0-sdran-chart set-v1.0.0-riab-values omec ric oai -riab-ransim-v1.0.0: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.0.0-sdran-chart set-v1.0.0-riab-values ric -riab-ric-v1.0.0: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.0.0-sdran-chart set-v1.0.0-riab-values ric - -riab-oai-v1.1.0: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.1.0-sdran-chart set-v1.1.0-riab-values omec ric oai -riab-ransim-v1.1.0: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric -riab-ric-v1.1.0: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric -riab-fbah-v1.1.0: set-option-fbah $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric - -riab-oai-v1.1.1: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.1.1-sdran-chart set-v1.1.1-riab-values omec ric oai -riab-ransim-v1.1.1: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric -riab-ric-v1.1.1: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric -riab-fbah-v1.1.1: set-option-fbah $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric - -riab-oai-dev: set-option-oai $(M)/system-check $(M)/helm-ready set-latest-riab-values omec ric oai -riab-ransim-dev: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-riab-values ric -riab-ric-dev: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-riab-values ric -riab-fbah-dev: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-riab-values ric - -oai-enb-usrp: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values $(M)/oai-enb-cu-hw $(M)/oai-enb-du -oai-ue-usrp: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values $(M)/oai-ue -ric-oai-latest: set-option-oai set-latest-sdran-chart set-latest-riab-values ric - -riab-oai-master-stable: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values omec ric oai -riab-ransim-master-stable: set-option-ransim $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric -riab-ric-master-stable: set-option-ric $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric -riab-fbah-master-stable: set-option-fbah $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric - -omec: $(M)/omec -oai: set-option-oai $(M)/oai-enb-cu $(M)/oai-enb-du $(M)/oai-ue -oai-enb-cu: set-option-oai $(M)/oai-enb-cu -oai-enb-du: set-option-oai $(M)/oai-enb-du -oai-ue: set-option-oai $(M)/oai-ue -ric: $(M)/ric -atomix: $(M)/atomix - -set-option-oai: - $(eval RIAB_OPTION="oai") - $(eval RANSIM_ARGS=) - $(eval FB_AH_ARGS=) - $(eval RIC_ARGS=) - -set-option-ransim: - $(eval RIAB_OPTION="ransim") - $(eval FB_AH_ARGS=) - $(eval RIC_ARGS=) - -set-option-fbah: - $(eval RIAB_OPTION="fb-ah") - $(eval RANSIM_ARGS=) - $(eval RIC_ARGS=) - -set-option-ric: - $(eval RIAB_OPTION="ric") - $(eval RANSIM_ARGS=) - $(eval FB_AH_ARGS=) - -set-stable-aether-chart: - cd $(AETHERCHARTDIR); \ - git checkout $(AETHERCHARTCID); - -set-latest-sdran-chart: - cd $(SDRANCHARTDIR); \ - git checkout $(SDRANCHARTCID-LATEST) - -set-v1.0.0-sdran-chart: - cd $(SDRANCHARTDIR); \ - git fetch origin $(SDRANCHARTCID-V1.0.0); \ - git checkout $(SDRANCHARTCID-V1.0.0) - -set-v1.1.0-sdran-chart: - cd $(SDRANCHARTDIR); \ - git fetch origin $(SDRANCHARTCID-V1.1.0); \ - git checkout $(SDRANCHARTCID-V1.1.0) - -set-v1.1.1-sdran-chart: - cd $(SDRANCHARTDIR); \ - git fetch origin $(SDRANCHARTCID-V1.1.1); \ - git checkout $(SDRANCHARTCID-V1.1.1) - -set-latest-riab-values: - $(eval RIABVALUES=$(RIABVALUES-LATEST)) - -set-v1.0.0-riab-values: - $(eval RIABVALUES=$(RIABVALUES-V1.0.0)) - -set-v1.1.0-riab-values: - $(eval RIABVALUES=$(RIABVALUES-V1.1.0)) - -set-v1.1.1-riab-values: - $(eval RIABVALUES=$(RIABVALUES-V1.1.1)) - -set-master-stable-riab-values: - $(eval RIABVALUES=$(RIABVALUES-MS)) - -fetch-all-charts: - cd $(AETHERCHARTDIR); \ - git fetch --all; \ - cd $(SDRANCHARTDIR); \ - git fetch --all; - -$(M): +$(M): | $(WORKSPACE) $(BUILD) mkdir -p $(M) -$(M)/repos: | $(M) - mkdir -p $(CHARTDIR) - cd $(CHARTDIR) - @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ - echo "aether-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires HTTPS key"; \ - git clone $(CORD_GERRIT_URL)/aether-helm-charts $(AETHERCHARTDIR); \ - cd $(AETHERCHARTDIR); \ - git checkout $(AETHERCHARTCID); \ - fi - @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ - echo "sdran-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires Github credential"; \ - git clone $(ONOS_GITHUB_URL)/sdran-helm-charts $(SDRANCHARTDIR) || true; \ - fi - touch $@ - -$(M)/system-check: | $(M) $(M)/repos - @if [[ $(cpu_family) -eq 6 ]]; then \ - if [[ $(cpu_model) -lt 60 ]]; then \ - echo "FATAL: haswell CPU or newer is required."; \ - exit 1; \ - fi \ - else \ - echo "FATAL: unsupported CPU family."; \ - exit 1; \ - fi - @if [[ $(os_vendor) =~ (Ubuntu) ]]; then \ - if [[ ! $(os_release) =~ (18.04) ]] && [[ ! $(os_release) =~ (20.04) ]]; then \ - echo "WARN: $(os_vendor) $(os_release) has not been tested."; \ - fi; \ - if dpkg --compare-versions 4.15 gt $(shell uname -r); then \ - echo "FATAL: kernel 4.15 or later is required."; \ - echo "Please upgrade your kernel by running" \ - "apt install --install-recommends linux-generic-hwe-$(os_release)"; \ - exit 1; \ - fi \ - else \ - echo "FAIL: unsupported OS."; \ - exit 1; \ - fi - @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ - echo "FATAL: Please manually clone aether-helm-chart under $(CHARTDIR) directory."; \ - exit 1; \ - fi - @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ - echo "FATAL: Please manually clone sdran-helm-chart under $(CHARTDIR) directory."; \ - exit 1; \ - fi - touch $@ - -$(M)/setup: | $(M) $(M)/system-check - sudo $(SCRIPTDIR)/cloudlab-disksetup.sh - sudo apt update; sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm - touch $@ - -$(BUILD)/kubespray: | $(M)/setup +$(BUILD): | $(WORKSPACE) mkdir -p $(BUILD) - cd $(BUILD); git clone https://github.com/kubernetes-incubator/kubespray.git -b $(KUBESPRAY_VERSION) - -$(VENV)/bin/activate: | $(M)/setup - sudo pip3 install virtualenv - virtualenv $(VENV) - -$(M)/kubespray-requirements: $(BUILD)/kubespray | $(VENV)/bin/activate - source "$(VENV)/bin/activate" && \ - pip3 install -r $(BUILD)/kubespray/requirements.txt - touch $@ - -$(M)/k8s-ready: | $(M)/setup $(BUILD)/kubespray $(VENV)/bin/activate $(M)/kubespray-requirements - source "$(VENV)/bin/activate" && cd $(BUILD)/kubespray; \ - ansible-playbook -b -i inventory/local/hosts.ini \ - -e "{'override_system_hostname' : False, 'disable_swap' : True}" \ - -e "{'docker_version' : $(DOCKER_VERSION)}" \ - -e "{'docker_iptables_enabled' : True}" \ - -e "{'kube_version' : $(K8S_VERSION)}" \ - -e "{'kube_network_plugin_multus' : True, 'multus_version' : stable, 'multus_cni_version' : 0.3.1}" \ - -e "{'kube_proxy_metrics_bind_address' : '0.0.0.0:10249'}" \ - -e "{'kube_pods_subnet' : 192.168.0.0/17, 'kube_service_addresses' : 192.168.128.0/17}" \ - -e "{'kube_apiserver_node_port_range' : 2000-36767}" \ - -e "{'kubeadm_enabled': True}" \ - -e "{'kube_feature_gates' : [SCTPSupport=True]}" \ - -e "{'kubelet_custom_flags' : [--allowed-unsafe-sysctls=net.*]}" \ - -e "{'dns_min_replicas' : 1}" \ - -e "{'helm_enabled' : True, 'helm_version' : $(HELM_VERSION)}" \ - cluster.yml - mkdir -p $(HOME)/.kube - sudo cp -f /etc/kubernetes/admin.conf $(HOME)/.kube/config - sudo chown $(shell id -u):$(shell id -g) $(HOME)/.kube/config - kubectl wait pod -n kube-system --for=condition=Ready --all - kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) - touch $@ - -$(M)/helm-ready: | $(M)/k8s-ready - helm repo add incubator https://charts.helm.sh/incubator - helm repo add cord https://charts.opencord.org - @if [ "$$SDRAN_USERNAME" == "" ]; then read -r -p "Username for ONF SDRAN private chart: " SDRAN_USERNAME; \ - read -r -p "Password for ONF SDRAN private chart: " SDRAN_PASSWORD; fi ;\ - helm repo add sdran https://sdrancharts.onosproject.org --username $$SDRAN_USERNAME --password $$SDRAN_PASSWORD; - touch $@ - -/opt/cni/bin/simpleovs: | $(M)/k8s-ready - sudo cp $(RESOURCEDIR)/simpleovs /opt/cni/bin/ - -/opt/cni/bin/static: | $(M)/k8s-ready - mkdir -p $(BUILD)/cni-plugins; cd $(BUILD)/cni-plugins; \ - wget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz && \ - tar xvfz cni-plugins-linux-amd64-v0.8.2.tgz - sudo cp $(BUILD)/cni-plugins/static /opt/cni/bin/ - -$(M)/fabric: | $(M)/setup /opt/cni/bin/simpleovs /opt/cni/bin/static - sudo apt install -y openvswitch-switch - sudo ovs-vsctl --may-exist add-br br-enb-net - sudo ovs-vsctl --may-exist add-port br-enb-net enb -- set Interface enb type=internal - sudo ip addr add 192.168.251.4/24 dev enb || true - sudo ip link set enb up - sudo ethtool --offload enb tx off - sudo ip route replace 192.168.252.0/24 via 192.168.251.1 dev enb - kubectl apply -f $(RESOURCEDIR)/router.yaml - kubectl wait pod -n default --for=condition=Ready -l app=router --timeout=300s - kubectl -n default exec router ip route add $(UE_IP_POOL)/$(UE_IP_MASK) via 192.168.250.3 - touch $@ - -$(M)/atomix: | $(M)/helm-ready - kubectl get po -n kube-system | grep atomix-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml - kubectl get po -n kube-system | grep raft-storage-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/raft-storage-controller/master/deploy/raft-storage-controller.yaml - kubectl get po -n kube-system | grep cache-storage-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/cache-storage-controller/master/deploy/cache-storage-controller.yaml - touch $@ - -$(M)/ric: | $(M)/helm-ready $(M)/atomix - kubectl get po -n kube-system | grep config-operator | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml - @until [ $$(kubectl get po -n kube-system | grep -e config-operator -e topo-operator | grep 1/1 | wc -l) == 2 ]; do sleep 1; done - kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) - cd $(SDRANCHARTDIR)/sd-ran; helm dep update - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - $(RANSIM_ARGS) \ - $(FB_AH_ARGS) \ - $(RIC_ARGS) \ - sd-ran \ - $(SDRANCHARTDIR)/sd-ran && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=onos --timeout=600s - touch $@ - -$(M)/omec: | $(M)/helm-ready $(M)/fabric - kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) - helm repo update - helm dep up $(AETHERCHARTDIR)/omec/omec-control-plane - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - --set config.spgwc.ueIpPool.ip=$(UE_IP_POOL) \ - omec-control-plane \ - $(AETHERCHARTDIR)/omec/omec-control-plane && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=omec-control-plane --timeout=300s && \ - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - omec-user-plane \ - $(AETHERCHARTDIR)/omec/omec-user-plane && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=omec-user-plane --timeout=300s - touch $@ - -$(M)/oai-enb-cu: | $(M)/helm-ready $(M)/ric - $(eval e2t_addr=$(shell kubectl get svc onos-e2t -n $(RIAB_NAMESPACE) --no-headers | awk '{print $$3'})) - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ - --set config.onos-e2t.networks.e2.address=$(e2t_addr) \ - --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ - --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ - --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ - --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ - oai-enb-cu \ - $(SDRANCHARTDIR)/oai-enb-cu && \ - sleep 60 && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=oai-enb-cu --timeout=300s && \ - sleep 10 - touch $@ - -$(M)/oai-enb-cu-hw: | $(M)/helm-ready - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ - --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ - --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ - --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ - --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ - oai-enb-cu \ - $(SDRANCHARTDIR)/oai-enb-cu && \ - sleep 60 && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-cu --timeout=300s && \ - sleep 10 - touch $@ - -$(M)/oai-enb-du: | $(M)/helm-ready - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ - --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ - --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ - --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ - --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ - --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ - --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ - --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ - oai-enb-du \ - $(SDRANCHARTDIR)/oai-enb-du && \ - sleep 60 && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-du --timeout=300s && \ - sleep 10 - touch $@ - -$(M)/oai-ue: | $(M)/helm-ready - helm upgrade --install $(HELM_GLOBAL_ARGS) \ - --namespace $(RIAB_NAMESPACE) \ - --values $(RIABVALUES) \ - --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ - --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ - --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ - --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ - oai-ue \ - $(SDRANCHARTDIR)/oai-ue && \ - sleep 60 && \ - kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-ue --timeout=300s && \ - touch $@ - -test-user-plane: | $(M)/omec $(M)/oai-ue - @echo "*** T1: Internal network test: ping 192.168.250.1 (Internal router IP) ***"; \ - ping -c 3 192.168.250.1 -I oaitun_ue1; \ - echo "*** T2: Internet connectivity test: ping to 8.8.8.8 ***"; \ - ping -c 3 8.8.8.8 -I oaitun_ue1; \ - echo "*** T3: DNS test: ping to google.com ***"; \ - ping -c 3 google.com -I oaitun_ue1; - -test-kpimon: | $(M)/ric - @echo "*** Get KPIMON result through CLI ***"; \ - kubectl exec -it deploy/onos-cli -n riab -- onos kpimon list numues; - -test-kpimon-v1: | $(M)/ric - @echo "*** Get KPIMON result through CLI ***"; \ - kubectl exec -it deploy/onos-cli -n riab -- onos kpimonv1 list metrics; - -test-kpimon-v2: | $(M)/ric - @echo "*** Get KPIMON result through CLI ***"; \ - kubectl exec -it deploy/onos-cli -n riab -- onos kpimonv2 list metrics; - -test-pci: | $(M)/ric - @echo "*** Get PCI result through CLI ***"; \ - kubectl exec -it deployment/onos-cli -n riab -- onos pci listall numconflicts; - -detach-ue: | $(M)/oai-enb-cu $(M)/oai-enb-du $(M)/oai-ue - echo -en "AT+CPIN=0000\r" | nc -u -w 1 localhost 10000 - echo -en "AT+CGATT=0\r" | nc -u -w 1 localhost 10000 - -reset-oai: - helm delete -n $(RIAB_NAMESPACE) oai-enb-cu || true - helm delete -n $(RIAB_NAMESPACE) oai-enb-du || true - helm delete -n $(RIAB_NAMESPACE) oai-ue || true - rm -f $(M)/oai-enb-cu* - rm -f $(M)/oai-enb-du - rm -f $(M)/oai-ue - -reset-omec: - helm delete -n $(RIAB_NAMESPACE) omec-control-plane || true - helm delete -n $(RIAB_NAMESPACE) omec-user-plane || true - cd $(M); rm -f omec - -reset-atomix: - kubectl delete -f https://raw.githubusercontent.com/atomix/raft-storage-controller/master/deploy/raft-storage-controller.yaml || true - kubectl delete -f https://raw.githubusercontent.com/atomix/cache-storage-controller/master/deploy/cache-storage-controller.yaml || true - kubectl delete -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml || true - cd $(M); rm -f atomix - -reset-ric: - helm delete -n $(RIAB_NAMESPACE) sd-ran || true - @until [ $$(kubectl get po -n $(RIAB_NAMESPACE) -l app=onos --no-headers | wc -l) == 0 ]; do sleep 1; done - kubectl delete -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml || true - @until [ $$(kubectl get po -n kube-system -l name=topo-operator --no-headers | wc -l) == 0 ]; do sleep 1; done - @until [ $$(kubectl get po -n kube-system -l name=config-operator --no-headers | wc -l) == 0 ]; do sleep 1; done - cd $(M); rm -f ric - -reset-oai-test: reset-omec reset-oai reset-ric - -reset-ransim-test: reset-ric - -reset-test: reset-oai-test reset-ransim-test reset-atomix - -clean: reset-test - helm repo remove sdran || true - kubectl delete po router || true - kubectl delete net-attach-def core-net || true - sudo ovs-vsctl del-br br-access-net || true - sudo ovs-vsctl del-br br-core-net || true - sudo apt remove --purge openvswitch-switch -y || true - source "$(VENV)/bin/activate" && cd $(BUILD)/kubespray; \ - ansible-playbook --extra-vars "reset_confirmation=yes" -b -i inventory/local/hosts.ini reset.yml || true - @if [ -d /usr/local/etc/emulab ]; then \ - mount | grep /mnt/extra/kubelet/pods | cut -d" " -f3 | sudo xargs umount; \ - sudo rm -rf /mnt/extra/kubelet; \ - fi - rm -rf $(M) -clean-all: clean - rm -rf $(CHARTDIR) +ifeq ($(OPT), ransim) +riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric + @echo 1 +else ifeq ($(OPT), oai) +riab: option version preliminaries infra-k8s infra-fabric infra-atomix infra-onos-op omec ric oai + @echo 2 +else ifeq ($(OPT), ric) +riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric + @echo 3 +else ifeq ($(OPT), fbah) +riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric + @echo 4 +else +riab: option version + @echo "Invalid option" + @echo "Option:" $(OPT) +endif + +option: | $(M) +ifeq ($(OPT), ransim) + $(eval OPT=ransim) + $(eval HELM_ARGS=$(HELM_ARGS_RANSIM)) + @echo "Helm arguments for ransim: $(HELM_ARGS_RANSIM)" +else ifeq ($(OPT), oai) + $(eval OPT=oai) + $(eval HELM_ARGS=$(HELM_ARGS_OAI)) + @echo "Helm arguments for oai: $(HELM_ARGS_OAI)" +else ifeq ($(OPT), ric) + $(eval OPT=ric) + $(eval HELM_ARGS=$(HELM_ARGS_RIC)) + @echo "Helm arguments for ric: $(HELM_ARGS_RIC)" +else ifeq ($(OPT), fbah) + $(eval OPT=fbah) + $(eval HELM_ARGS=$(HELM_ARGS_FBAH)) + @echo "Helm arguments for Facebook-AirHop usecase: $(HELM_ARGS_FBAH)" +else + $(eval OPT=ransim) + $(eval HELM_ARGS=$(HELM_ARGS_RANSIM)) + @echo "Helm arguments for ransim (default): $(HELM_ARGS_RANSIM)" +endif + +version: | $(M) + @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID) +ifeq ($(VER), v1.0.0) + $(eval VER=v1.0.0) + $(eval HELM_VALUES=$(HELM_VALUES_V1.0.0)) + @echo "Helm values.yaml file: $(HELM_VALUES_V1.0.0)" + @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.0.0) +else ifeq ($(VER), v1.1.0) + $(eval VER=v1.1.0) + $(eval HELM_VALUES=$(HELM_VALUES_V1.1.0)) + @echo "Helm values.yaml file: $(HELM_VALUES_V1.1.0)" + @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.1.0) +else ifeq ($(VER), v1.1.1) + $(eval VER=v1.1.1) + $(eval HELM_VALUES=$(HELM_VALUES_V1.1.1)) + @echo "Helm values.yaml file: $(HELM_VALUES_V1.1.1)" + @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.1.1) +else ifeq ($(VER), stable) + $(eval VER=stable) + $(eval HELM_VALUES=$(HELM_VALUES_STABLE)) + @echo "Helm values.yaml file: $(HELM_VALUES_STABLE)" + @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) +else ifeq ($(VER), latest) + $(eval VER=latest) + $(eval HELM_VALUES=$(HELM_VALUES_LATEST)) + @echo "Helm values.yaml file: $(HELM_VALUES_LATEST)" + @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) +else ifeq ($(VER), dev) + $(eval VER=dev) + $(eval HELM_VALUES=$(HELM_VALUES_DEV)) + @echo "Helm values.yaml file: $(HELM_VALUES_DEV)" +else + $(eval VER=stable) + $(eval HELM_VALUES=$(HELM_VALUES_STABLE)) + @echo "Helm values.yaml file: $(HELM_VALUES_STABLE)" + @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) +endif diff --git a/MakefileVar.mk b/MakefileVar.mk new file mode 100644 index 0000000..0946c50 --- /dev/null +++ b/MakefileVar.mk @@ -0,0 +1,86 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# Directory arguments +SHELL := /bin/bash +RIABDIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +WORKSPACE ?= $(RIABDIR)/workspace +M ?= $(WORKSPACE)/milestones +BUILD ?= $(WORKSPACE)/build +VENV ?= $(BUILD)/venv/riab +SCRIPTDIR ?= $(RIABDIR)/scripts +CHARTDIR ?= $(WORKSPACE)/helm-charts +AETHERCHARTDIR ?= $(CHARTDIR)/aether-helm-charts +SDRANCHARTDIR ?= $(CHARTDIR)/sdran-helm-charts +RESOURCEDIR ?= $(RIABDIR)/resources + +# Commit IDs +AETHERCHARTCID ?= 6b3a267e428402d6bb8531bd921c1d202bb338b2 +SDRANCHARTCID-LATEST ?= origin/master +SDRANCHARTCID-V1.0.0 ?= v1.0.0 #branch: v1.0.0 +SDRANCHARTCID-V1.1.0 ?= 6670e6da25129b665b024a7c6d0fd79cfda52f25 +SDRANCHARTCID-V1.1.1 ?= 479ff0b59d4ae9f09cd9f7be6ea9a189f207b810 + +# Helm arguments +DEFAULT_HELM_ARGS := --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true +HELM_ARGS ?= $(DEFAULT_HELM_ARGS) +HELM_ARGS_RANSIM ?= --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true +HELM_ARGS_OAI ?= +HELM_ARGS_RIC ?= --set import.onos-pci.enabled=true +HELM_ARGS_FBAH ?= --set import.fb-ah-xapp.enabled=true --set import.fb-ah-gui.enabled=true --set import.ah-eson-test-server.enabled=true --set import.ran-simulator.enabled=true + +# Helm values file +DEFAULT_HELM_VALUES := $(RIABDIR)/sdran-in-a-box-values-master-stable.yaml +HELM_VALUES ?= $(DEFAULT_HELM_VALUES) +HELM_VALUES_V1.0.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.0.0.yaml +HELM_VALUES_V1.1.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.0.yaml +HELM_VALUES_V1.1.1 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.1.yaml +HELM_VALUES_STABLE ?= $(RIABDIR)/sdran-in-a-box-values-master-stable.yaml +HELM_VALUES_LATEST ?= $(RIABDIR)/sdran-in-a-box-values.yaml +HELM_VALUES_DEV ?= $(RIABDIR)/sdran-in-a-box-values.yaml + +# Options - ransim (by default), oai, ric, and fbah +DEFAULT_OPT := ransim +OPT ?= $(DEFAULT_OPT) + +# Versions - v1.0.0, v1.1.0, v1.1.1, stable, latest, and dev +DEFAULT_VER := stable +VER ?= $(DEFAULT_VER) + +# Default RiaB namespace +DEFAULT_RIAB_NAMESPACE := riab +RIAB_NAMESPACE ?= $(DEFAULT_RIAB_NAMESPACE) + +# URLs +CORD_GERRIT_URL ?= https://gerrit.opencord.org +ONOS_GITHUB_URL ?= https://github.com/onosproject +HELM_INCUBATOR_URL ?= https://charts.helm.sh/incubator +HELM_OPENCORD_URL ?= https://charts.opencord.org +HELM_SDRAN_URL ?= https://sdrancharts.onosproject.org + +# Infrastructure component version +KUBESPRAY_VERSION ?= release-2.14 +DOCKER_VERSION ?= 19.03 +K8S_VERSION ?= v1.18.9 +HELM_VERSION ?= v3.2.4 + +# OMEC parameters +UE_IP_POOL ?= 172.250.0.0 +UE_IP_MASK ?= 16 + +# For system check +CPU_FAMILY := $(shell lscpu | grep 'CPU family:' | awk '{print $$3}') +CPU_MODEL := $(shell lscpu | grep 'Model:' | awk '{print $$2}') +OS_VENDOR := $(shell lsb_release -i -s) +OS_RELEASE := $(shell lsb_release -r -s) + +# For RIC +F1_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +F1_CU_IPADDR := $(shell ip -4 a show $(F1_CU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | tail -n 1) +F1_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +F1_DU_IPADDR := $(shell ip -4 a show $(F1_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) +S1MME_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +NFAPI_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +NFAPI_DU_IPADDR := $(shell ip -4 a show $(NFAPI_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) +NFAPI_UE_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +NFAPI_UE_IPADDR := $(shell ip -4 a show $(NFAPI_UE_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) \ No newline at end of file diff --git a/assets/Makefile_old b/assets/Makefile_old new file mode 100644 index 0000000..2ea9355 --- /dev/null +++ b/assets/Makefile_old @@ -0,0 +1,491 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# To be deleted later after the new code is stable + +include mk/*.mk + +SHELL := /bin/bash +BUILD ?= /tmp/build +M ?= $(BUILD)/milestones +RIABDIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +WORKSPACE ?= $(HOME) +SCRIPTDIR ?= $(RIABDIR)/scripts +RESOURCEDIR ?= $(RIABDIR)/resources +VENV ?= $(BUILD)/venv/riab +RIABVALUES ?= $(RIABDIR)/sdran-in-a-box-values.yaml +RIABVALUES-LATEST ?= $(RIABDIR)/sdran-in-a-box-values.yaml +RIABVALUES-V1.0.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.0.0.yaml +RIABVALUES-V1.1.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.0.yaml +RIABVALUES-V1.1.1 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.1.yaml +RIABVALUES-MS ?= $(RIABDIR)/sdran-in-a-box-values-master-stable.yaml +CHARTDIR ?= $(WORKSPACE)/helm-charts +AETHERCHARTDIR ?= $(CHARTDIR)/aether-helm-charts +AETHERCHARTCID ?= 6b3a267e428402d6bb8531bd921c1d202bb338b2 +SDRANCHARTDIR ?= $(CHARTDIR)/sdran-helm-charts +SDRANCHARTCID-LATEST ?= origin/master +SDRANCHARTCID-V1.0.0 ?= v1.0.0 #branch: v1.0.0 +SDRANCHARTCID-V1.1.0 ?= 6670e6da25129b665b024a7c6d0fd79cfda52f25 +SDRANCHARTCID-V1.1.1 ?= 479ff0b59d4ae9f09cd9f7be6ea9a189f207b810 + +KUBESPRAY_VERSION ?= release-2.14 +DOCKER_VERSION ?= 19.03 +K8S_VERSION ?= v1.18.9 +HELM_VERSION ?= v3.2.4 + +HELM_GLOBAL_ARGS ?= +HELM_NEM_ARGS ?= $(HELM_GLOBAL_ARGS) +HELM_ONOS_ARGS ?= $(HELM_GLOBAL_ARGS) + +CORD_GERRIT_URL ?= https://gerrit.opencord.org +ONOS_GITHUB_URL ?= https://github.com/onosproject + +UE_IP_POOL ?= 172.250.0.0 +UE_IP_MASK ?= 16 + +RIAB_OPTION ?= +# If we want to use different namespace, feel free to change it. +# However, the overriding value file, sdran-in-a-box-values.yaml, should be changed as well - config.hss.mmes section. +RIAB_NAMESPACE ?= riab +RANSIM_ARGS ?= --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true +RIC_ARGS ?= --set import.onos-pci.enabled=true +FB_AH_ARGS ?= --set import.fb-ah-xapp.enabled=true --set import.fb-ah-gui.enabled=true --set import.ah-eson-test-server.enabled=true --set import.ran-simulator.enabled=true + +F1_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +F1_CU_IPADDR := $(shell ip -4 a show $(F1_CU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | tail -n 1) +F1_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +F1_DU_IPADDR := $(shell ip -4 a show $(F1_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) +S1MME_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +NFAPI_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +NFAPI_DU_IPADDR := $(shell ip -4 a show $(NFAPI_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) +NFAPI_UE_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') +NFAPI_UE_IPADDR := $(shell ip -4 a show $(NFAPI_UE_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | head -n 1) + +cpu_family := $(shell lscpu | grep 'CPU family:' | awk '{print $$3}') +cpu_model := $(shell lscpu | grep 'Model:' | awk '{print $$2}') +os_vendor := $(shell lsb_release -i -s) +os_release := $(shell lsb_release -r -s) + +.PHONY: riab-oai riab-ransim riab-fbah riab-oai-latest riab-oai-v1.0.0 riab-oai-v1.1.0 riab-oai-v1.1.1 riab-ransim-latest riab-ransim-v1.0.0 riab-ransim-v1.1.0 riab-ransim-v1.1.1 riab-fbah riab-fbah-latest riab-fbah-v1.1.0 riab-fbah-v1.1.1 riab-fbah-dev riab-fbah-master-stable riab-oai-master-stable riab-ransim-master-stable oai-enb-usrp oai-ue-usrp ric-oai-latest set-option-oai set-option-ransim set-stable-aether-chart set-latest-sdran-chart set-v1.0.0-sdran-chart set-v1.1.0-sdran-chart set-v1.1.1-sdran-chart set-latest-riab-values set-v1.0.0-riab-values set-v1.1.0-riab-values set-v1.1.1-riab-values set-master-stable-riab-values fetch-all-charts omec oai oai-enb-cu oai-enb-du oai-ue ric atomix test-user-plane test-kpimon test-kpimon-v1 test-kpimon-v2 test-pci reset-oai reset-omec reset-atomix reset-ric reset-oai-test reset-ransim-test reset-test clean riab-ric riab-ric-latest riab-ric-v1.0.0 riab-ric-v1.1.0 riab-ric-v1.1.1 riab-ric-dev riab-ric-master-stable + +riab-oai: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values omec ric oai +riab-ransim: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric +riab-ric: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric +riab-fbah: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric + +riab-oai-latest: riab-oai +riab-ransim-latest: riab-ransim +riab-ric-latest: riab-ric +riab-fbah-latest: riab-fbah + +riab-oai-v1.0.0: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.0.0-sdran-chart set-v1.0.0-riab-values omec ric oai +riab-ransim-v1.0.0: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.0.0-sdran-chart set-v1.0.0-riab-values ric +riab-ric-v1.0.0: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.0.0-sdran-chart set-v1.0.0-riab-values ric + +riab-oai-v1.1.0: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.1.0-sdran-chart set-v1.1.0-riab-values omec ric oai +riab-ransim-v1.1.0: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric +riab-ric-v1.1.0: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric +riab-fbah-v1.1.0: set-option-fbah $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric + +riab-oai-v1.1.1: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.1.1-sdran-chart set-v1.1.1-riab-values omec ric oai +riab-ransim-v1.1.1: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric +riab-ric-v1.1.1: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric +riab-fbah-v1.1.1: set-option-fbah $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric + +riab-oai-dev: set-option-oai $(M)/system-check $(M)/helm-ready set-latest-riab-values omec ric oai +riab-ransim-dev: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-riab-values ric +riab-ric-dev: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-riab-values ric +riab-fbah-dev: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-riab-values ric + +oai-enb-usrp: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values $(M)/oai-enb-cu-hw $(M)/oai-enb-du +oai-ue-usrp: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values $(M)/oai-ue +ric-oai-latest: set-option-oai set-latest-sdran-chart set-latest-riab-values ric + +riab-oai-master-stable: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values omec ric oai +riab-ransim-master-stable: set-option-ransim $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric +riab-ric-master-stable: set-option-ric $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric +riab-fbah-master-stable: set-option-fbah $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric + +omec: $(M)/omec +oai: set-option-oai $(M)/oai-enb-cu $(M)/oai-enb-du $(M)/oai-ue +oai-enb-cu: set-option-oai $(M)/oai-enb-cu +oai-enb-du: set-option-oai $(M)/oai-enb-du +oai-ue: set-option-oai $(M)/oai-ue +ric: $(M)/ric +atomix: $(M)/atomix + +set-option-oai: + $(eval RIAB_OPTION="oai") + $(eval RANSIM_ARGS=) + $(eval FB_AH_ARGS=) + $(eval RIC_ARGS=) + +set-option-ransim: + $(eval RIAB_OPTION="ransim") + $(eval FB_AH_ARGS=) + $(eval RIC_ARGS=) + +set-option-fbah: + $(eval RIAB_OPTION="fb-ah") + $(eval RANSIM_ARGS=) + $(eval RIC_ARGS=) + +set-option-ric: + $(eval RIAB_OPTION="ric") + $(eval RANSIM_ARGS=) + $(eval FB_AH_ARGS=) + +set-stable-aether-chart: + cd $(AETHERCHARTDIR); \ + git checkout $(AETHERCHARTCID); + +set-latest-sdran-chart: + cd $(SDRANCHARTDIR); \ + git checkout $(SDRANCHARTCID-LATEST) + +set-v1.0.0-sdran-chart: + cd $(SDRANCHARTDIR); \ + git fetch origin $(SDRANCHARTCID-V1.0.0); \ + git checkout $(SDRANCHARTCID-V1.0.0) + +set-v1.1.0-sdran-chart: + cd $(SDRANCHARTDIR); \ + git fetch origin $(SDRANCHARTCID-V1.1.0); \ + git checkout $(SDRANCHARTCID-V1.1.0) + +set-v1.1.1-sdran-chart: + cd $(SDRANCHARTDIR); \ + git fetch origin $(SDRANCHARTCID-V1.1.1); \ + git checkout $(SDRANCHARTCID-V1.1.1) + +set-latest-riab-values: + $(eval RIABVALUES=$(RIABVALUES-LATEST)) + +set-v1.0.0-riab-values: + $(eval RIABVALUES=$(RIABVALUES-V1.0.0)) + +set-v1.1.0-riab-values: + $(eval RIABVALUES=$(RIABVALUES-V1.1.0)) + +set-v1.1.1-riab-values: + $(eval RIABVALUES=$(RIABVALUES-V1.1.1)) + +set-master-stable-riab-values: + $(eval RIABVALUES=$(RIABVALUES-MS)) + +fetch-all-charts: + cd $(AETHERCHARTDIR); \ + git fetch --all; \ + cd $(SDRANCHARTDIR); \ + git fetch --all; + +$(M): + mkdir -p $(M) + +$(M)/repos: | $(M) + mkdir -p $(CHARTDIR) + cd $(CHARTDIR) + @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ + echo "aether-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires HTTPS key"; \ + git clone $(CORD_GERRIT_URL)/aether-helm-charts $(AETHERCHARTDIR); \ + cd $(AETHERCHARTDIR); \ + git checkout $(AETHERCHARTCID); \ + fi + @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ + echo "sdran-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires Github credential"; \ + git clone $(ONOS_GITHUB_URL)/sdran-helm-charts $(SDRANCHARTDIR) || true; \ + fi + touch $@ + +$(M)/system-check: | $(M) $(M)/repos + @if [[ $(cpu_family) -eq 6 ]]; then \ + if [[ $(cpu_model) -lt 60 ]]; then \ + echo "FATAL: haswell CPU or newer is required."; \ + exit 1; \ + fi \ + else \ + echo "FATAL: unsupported CPU family."; \ + exit 1; \ + fi + @if [[ $(os_vendor) =~ (Ubuntu) ]]; then \ + if [[ ! $(os_release) =~ (18.04) ]] && [[ ! $(os_release) =~ (20.04) ]]; then \ + echo "WARN: $(os_vendor) $(os_release) has not been tested."; \ + fi; \ + if dpkg --compare-versions 4.15 gt $(shell uname -r); then \ + echo "FATAL: kernel 4.15 or later is required."; \ + echo "Please upgrade your kernel by running" \ + "apt install --install-recommends linux-generic-hwe-$(os_release)"; \ + exit 1; \ + fi \ + else \ + echo "FAIL: unsupported OS."; \ + exit 1; \ + fi + @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ + echo "FATAL: Please manually clone aether-helm-chart under $(CHARTDIR) directory."; \ + exit 1; \ + fi + @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ + echo "FATAL: Please manually clone sdran-helm-chart under $(CHARTDIR) directory."; \ + exit 1; \ + fi + touch $@ + +$(M)/setup: | $(M) $(M)/system-check + sudo $(SCRIPTDIR)/cloudlab-disksetup.sh + sudo apt update; sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm + touch $@ + +$(BUILD)/kubespray: | $(M)/setup + mkdir -p $(BUILD) + cd $(BUILD); git clone https://github.com/kubernetes-incubator/kubespray.git -b $(KUBESPRAY_VERSION) + +$(VENV)/bin/activate: | $(M)/setup + sudo pip3 install virtualenv + virtualenv $(VENV) + +$(M)/kubespray-requirements: $(BUILD)/kubespray | $(VENV)/bin/activate + source "$(VENV)/bin/activate" && \ + pip3 install -r $(BUILD)/kubespray/requirements.txt + touch $@ + +$(M)/k8s-ready: | $(M)/setup $(BUILD)/kubespray $(VENV)/bin/activate $(M)/kubespray-requirements + source "$(VENV)/bin/activate" && cd $(BUILD)/kubespray; \ + ansible-playbook -b -i inventory/local/hosts.ini \ + -e "{'override_system_hostname' : False, 'disable_swap' : True}" \ + -e "{'docker_version' : $(DOCKER_VERSION)}" \ + -e "{'docker_iptables_enabled' : True}" \ + -e "{'kube_version' : $(K8S_VERSION)}" \ + -e "{'kube_network_plugin_multus' : True, 'multus_version' : stable, 'multus_cni_version' : 0.3.1}" \ + -e "{'kube_proxy_metrics_bind_address' : '0.0.0.0:10249'}" \ + -e "{'kube_pods_subnet' : 192.168.0.0/17, 'kube_service_addresses' : 192.168.128.0/17}" \ + -e "{'kube_apiserver_node_port_range' : 2000-36767}" \ + -e "{'kubeadm_enabled': True}" \ + -e "{'kube_feature_gates' : [SCTPSupport=True]}" \ + -e "{'kubelet_custom_flags' : [--allowed-unsafe-sysctls=net.*]}" \ + -e "{'dns_min_replicas' : 1}" \ + -e "{'helm_enabled' : True, 'helm_version' : $(HELM_VERSION)}" \ + cluster.yml + mkdir -p $(HOME)/.kube + sudo cp -f /etc/kubernetes/admin.conf $(HOME)/.kube/config + sudo chown $(shell id -u):$(shell id -g) $(HOME)/.kube/config + kubectl wait pod -n kube-system --for=condition=Ready --all + kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) + touch $@ + +$(M)/helm-ready: | $(M)/k8s-ready + helm repo add incubator https://charts.helm.sh/incubator + helm repo add cord https://charts.opencord.org + @if [ "$$SDRAN_USERNAME" == "" ]; then read -r -p "Username for ONF SDRAN private chart: " SDRAN_USERNAME; \ + read -r -p "Password for ONF SDRAN private chart: " SDRAN_PASSWORD; fi ;\ + helm repo add sdran https://sdrancharts.onosproject.org --username $$SDRAN_USERNAME --password $$SDRAN_PASSWORD; + touch $@ + +/opt/cni/bin/simpleovs: | $(M)/k8s-ready + sudo cp $(RESOURCEDIR)/simpleovs /opt/cni/bin/ + +/opt/cni/bin/static: | $(M)/k8s-ready + mkdir -p $(BUILD)/cni-plugins; cd $(BUILD)/cni-plugins; \ + wget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz && \ + tar xvfz cni-plugins-linux-amd64-v0.8.2.tgz + sudo cp $(BUILD)/cni-plugins/static /opt/cni/bin/ + +$(M)/fabric: | $(M)/setup /opt/cni/bin/simpleovs /opt/cni/bin/static + sudo apt install -y openvswitch-switch + sudo ovs-vsctl --may-exist add-br br-enb-net + sudo ovs-vsctl --may-exist add-port br-enb-net enb -- set Interface enb type=internal + sudo ip addr add 192.168.251.4/24 dev enb || true + sudo ip link set enb up + sudo ethtool --offload enb tx off + sudo ip route replace 192.168.252.0/24 via 192.168.251.1 dev enb + kubectl apply -f $(RESOURCEDIR)/router.yaml + kubectl wait pod -n default --for=condition=Ready -l app=router --timeout=300s + kubectl -n default exec router ip route add $(UE_IP_POOL)/$(UE_IP_MASK) via 192.168.250.3 + touch $@ + +$(M)/atomix: | $(M)/helm-ready + kubectl get po -n kube-system | grep atomix-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml + kubectl get po -n kube-system | grep raft-storage-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/raft-storage-controller/master/deploy/raft-storage-controller.yaml + kubectl get po -n kube-system | grep cache-storage-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/cache-storage-controller/master/deploy/cache-storage-controller.yaml + touch $@ + +$(M)/ric: | $(M)/helm-ready $(M)/atomix + kubectl get po -n kube-system | grep config-operator | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml + @until [ $$(kubectl get po -n kube-system | grep -e config-operator -e topo-operator | grep 1/1 | wc -l) == 2 ]; do sleep 1; done + kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) + cd $(SDRANCHARTDIR)/sd-ran; helm dep update + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + $(RANSIM_ARGS) \ + $(FB_AH_ARGS) \ + $(RIC_ARGS) \ + sd-ran \ + $(SDRANCHARTDIR)/sd-ran && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=onos --timeout=600s + touch $@ + +$(M)/omec: | $(M)/helm-ready $(M)/fabric + kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) + helm repo update + helm dep up $(AETHERCHARTDIR)/omec/omec-control-plane + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + --set config.spgwc.ueIpPool.ip=$(UE_IP_POOL) \ + omec-control-plane \ + $(AETHERCHARTDIR)/omec/omec-control-plane && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=omec-control-plane --timeout=300s && \ + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + omec-user-plane \ + $(AETHERCHARTDIR)/omec/omec-user-plane && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=omec-user-plane --timeout=300s + touch $@ + +$(M)/oai-enb-cu: | $(M)/helm-ready $(M)/ric + $(eval e2t_addr=$(shell kubectl get svc onos-e2t -n $(RIAB_NAMESPACE) --no-headers | awk '{print $$3'})) + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ + --set config.onos-e2t.networks.e2.address=$(e2t_addr) \ + --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ + --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ + --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ + oai-enb-cu \ + $(SDRANCHARTDIR)/oai-enb-cu && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=oai-enb-cu --timeout=300s && \ + sleep 10 + touch $@ + +$(M)/oai-enb-cu-hw: | $(M)/helm-ready + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ + --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ + --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ + oai-enb-cu \ + $(SDRANCHARTDIR)/oai-enb-cu && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-cu --timeout=300s && \ + sleep 10 + touch $@ + +$(M)/oai-enb-du: | $(M)/helm-ready + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ + --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ + --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ + --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ + --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ + --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ + --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ + oai-enb-du \ + $(SDRANCHARTDIR)/oai-enb-du && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-du --timeout=300s && \ + sleep 10 + touch $@ + +$(M)/oai-ue: | $(M)/helm-ready + helm upgrade --install $(HELM_GLOBAL_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(RIABVALUES) \ + --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ + --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ + --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ + --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ + oai-ue \ + $(SDRANCHARTDIR)/oai-ue && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-ue --timeout=300s && \ + touch $@ + +test-user-plane: | $(M)/omec $(M)/oai-ue + @echo "*** T1: Internal network test: ping 192.168.250.1 (Internal router IP) ***"; \ + ping -c 3 192.168.250.1 -I oaitun_ue1; \ + echo "*** T2: Internet connectivity test: ping to 8.8.8.8 ***"; \ + ping -c 3 8.8.8.8 -I oaitun_ue1; \ + echo "*** T3: DNS test: ping to google.com ***"; \ + ping -c 3 google.com -I oaitun_ue1; + +test-kpimon: | $(M)/ric + @echo "*** Get KPIMON result through CLI ***"; \ + kubectl exec -it deploy/onos-cli -n riab -- onos kpimon list numues; + +test-kpimon-v1: | $(M)/ric + @echo "*** Get KPIMON result through CLI ***"; \ + kubectl exec -it deploy/onos-cli -n riab -- onos kpimonv1 list metrics; + +test-kpimon-v2: | $(M)/ric + @echo "*** Get KPIMON result through CLI ***"; \ + kubectl exec -it deploy/onos-cli -n riab -- onos kpimonv2 list metrics; + +test-pci: | $(M)/ric + @echo "*** Get PCI result through CLI ***"; \ + kubectl exec -it deployment/onos-cli -n riab -- onos pci listall numconflicts; + +detach-ue: | $(M)/oai-enb-cu $(M)/oai-enb-du $(M)/oai-ue + echo -en "AT+CPIN=0000\r" | nc -u -w 1 localhost 10000 + echo -en "AT+CGATT=0\r" | nc -u -w 1 localhost 10000 + +reset-oai: + helm delete -n $(RIAB_NAMESPACE) oai-enb-cu || true + helm delete -n $(RIAB_NAMESPACE) oai-enb-du || true + helm delete -n $(RIAB_NAMESPACE) oai-ue || true + rm -f $(M)/oai-enb-cu* + rm -f $(M)/oai-enb-du + rm -f $(M)/oai-ue + +reset-omec: + helm delete -n $(RIAB_NAMESPACE) omec-control-plane || true + helm delete -n $(RIAB_NAMESPACE) omec-user-plane || true + cd $(M); rm -f omec + +reset-atomix: + kubectl delete -f https://raw.githubusercontent.com/atomix/raft-storage-controller/master/deploy/raft-storage-controller.yaml || true + kubectl delete -f https://raw.githubusercontent.com/atomix/cache-storage-controller/master/deploy/cache-storage-controller.yaml || true + kubectl delete -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml || true + cd $(M); rm -f atomix + +reset-ric: + helm delete -n $(RIAB_NAMESPACE) sd-ran || true + @until [ $$(kubectl get po -n $(RIAB_NAMESPACE) -l app=onos --no-headers | wc -l) == 0 ]; do sleep 1; done + kubectl delete -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml || true + @until [ $$(kubectl get po -n kube-system -l name=topo-operator --no-headers | wc -l) == 0 ]; do sleep 1; done + @until [ $$(kubectl get po -n kube-system -l name=config-operator --no-headers | wc -l) == 0 ]; do sleep 1; done + cd $(M); rm -f ric + +reset-oai-test: reset-omec reset-oai reset-ric + +reset-ransim-test: reset-ric + +reset-test: reset-oai-test reset-ransim-test reset-atomix + +clean: reset-test + helm repo remove sdran || true + kubectl delete po router || true + kubectl delete net-attach-def core-net || true + sudo ovs-vsctl del-br br-access-net || true + sudo ovs-vsctl del-br br-core-net || true + sudo apt remove --purge openvswitch-switch -y || true + source "$(VENV)/bin/activate" && cd $(BUILD)/kubespray; \ + ansible-playbook --extra-vars "reset_confirmation=yes" -b -i inventory/local/hosts.ini reset.yml || true + @if [ -d /usr/local/etc/emulab ]; then \ + mount | grep /mnt/extra/kubelet/pods | cut -d" " -f3 | sudo xargs umount; \ + sudo rm -rf /mnt/extra/kubelet; \ + fi + rm -rf $(M) + +clean-all: clean + rm -rf $(CHARTDIR) diff --git a/mk/epc.mk b/mk/epc.mk new file mode 100644 index 0000000..8f757b2 --- /dev/null +++ b/mk/epc.mk @@ -0,0 +1,26 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +EPC_PHONY := omec + +omec: $(M)/omec + +$(M)/omec: | $(M)/helm-ready $(M)/fabric + kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) + helm repo update + helm dep up $(AETHERCHARTDIR)/omec/omec-control-plane + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + --set config.spgwc.ueIpPool.ip=$(UE_IP_POOL) \ + omec-control-plane \ + $(AETHERCHARTDIR)/omec/omec-control-plane && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=omec-control-plane --timeout=300s && \ + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + omec-user-plane \ + $(AETHERCHARTDIR)/omec/omec-user-plane && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=omec-user-plane --timeout=300s + touch $@ \ No newline at end of file diff --git a/mk/infra.mk b/mk/infra.mk new file mode 100644 index 0000000..1d3c656 --- /dev/null +++ b/mk/infra.mk @@ -0,0 +1,89 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +INFRA_PHONY := preliminaries + +infra-k8s: $(BUILD)/kubespray $(M)/kubespray-requirements $(M)/k8s-ready $(M)/helm-ready +infra-fabric: $(M)/fabric +infra-atomix: $(M)/atomix +infra-onos-op: $(M)/onos-operator + +$(BUILD)/kubespray: | $(M)/setup + mkdir -p $(BUILD) + cd $(BUILD); git clone https://github.com/kubernetes-incubator/kubespray.git -b $(KUBESPRAY_VERSION) + +$(VENV)/bin/activate: | $(M)/setup + sudo pip3 install virtualenv + virtualenv $(VENV) + +$(M)/kubespray-requirements: $(BUILD)/kubespray | $(VENV)/bin/activate + source "$(VENV)/bin/activate" && \ + pip3 install -r $(BUILD)/kubespray/requirements.txt + touch $@ + +$(M)/k8s-ready: | $(M)/setup $(BUILD)/kubespray $(VENV)/bin/activate $(M)/kubespray-requirements + source "$(VENV)/bin/activate" && cd $(BUILD)/kubespray; \ + ansible-playbook -b -i inventory/local/hosts.ini \ + -e "{'override_system_hostname' : False, 'disable_swap' : True}" \ + -e "{'docker_version' : $(DOCKER_VERSION)}" \ + -e "{'docker_iptables_enabled' : True}" \ + -e "{'kube_version' : $(K8S_VERSION)}" \ + -e "{'kube_network_plugin_multus' : True, 'multus_version' : stable, 'multus_cni_version' : 0.3.1}" \ + -e "{'kube_proxy_metrics_bind_address' : '0.0.0.0:10249'}" \ + -e "{'kube_pods_subnet' : 192.168.0.0/17, 'kube_service_addresses' : 192.168.128.0/17}" \ + -e "{'kube_apiserver_node_port_range' : 2000-36767}" \ + -e "{'kubeadm_enabled': True}" \ + -e "{'kube_feature_gates' : [SCTPSupport=True]}" \ + -e "{'kubelet_custom_flags' : [--allowed-unsafe-sysctls=net.*]}" \ + -e "{'dns_min_replicas' : 1}" \ + -e "{'helm_enabled' : True, 'helm_version' : $(HELM_VERSION)}" \ + cluster.yml + mkdir -p $(HOME)/.kube + sudo cp -f /etc/kubernetes/admin.conf $(HOME)/.kube/config + sudo chown $(shell id -u):$(shell id -g) $(HOME)/.kube/config + kubectl wait pod -n kube-system --for=condition=Ready --all + kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) + touch $@ + +$(M)/helm-ready: | $(M)/k8s-ready + helm repo add incubator $(HELM_INCUBATOR_URL) + helm repo add cord $(HELM_OPENCORD_URL) + @if [ "$$SDRAN_USERNAME" == "" ]; then read -r -p "Username for ONF SDRAN private chart: " SDRAN_USERNAME; \ + read -r -p "Password for ONF SDRAN private chart: " SDRAN_PASSWORD; fi ;\ + helm repo add sdran $(HELM_SDRAN_URL) --username $$SDRAN_USERNAME --password $$SDRAN_PASSWORD; + touch $@ + +/opt/cni/bin/simpleovs: | $(M)/k8s-ready + sudo cp $(RESOURCEDIR)/simpleovs /opt/cni/bin/ + +/opt/cni/bin/static: | $(M)/k8s-ready + mkdir -p $(BUILD)/cni-plugins; cd $(BUILD)/cni-plugins; \ + wget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz && \ + tar xvfz cni-plugins-linux-amd64-v0.8.2.tgz + sudo cp $(BUILD)/cni-plugins/static /opt/cni/bin/ + +$(M)/fabric: | $(M)/setup /opt/cni/bin/simpleovs /opt/cni/bin/static + sudo apt install -y openvswitch-switch + sudo ovs-vsctl --may-exist add-br br-enb-net + sudo ovs-vsctl --may-exist add-port br-enb-net enb -- set Interface enb type=internal + sudo ip addr add 192.168.251.4/24 dev enb || true + sudo ip link set enb up + sudo ethtool --offload enb tx off + sudo ip route replace 192.168.252.0/24 via 192.168.251.1 dev enb + kubectl apply -f $(RESOURCEDIR)/router.yaml + kubectl wait pod -n default --for=condition=Ready -l app=router --timeout=300s + kubectl -n default exec router ip route add $(UE_IP_POOL)/$(UE_IP_MASK) via 192.168.250.3 + touch $@ + +$(M)/atomix: | $(M)/k8s-ready + kubectl get po -n kube-system | grep atomix-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml + kubectl get po -n kube-system | grep raft-storage-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/raft-storage-controller/master/deploy/raft-storage-controller.yaml + kubectl get po -n kube-system | grep cache-storage-controller | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/atomix/cache-storage-controller/master/deploy/cache-storage-controller.yaml + @until [ $$(kubectl get po -n kube-system | grep -e atomix-controller -e raft-storage-controller -e cache-storage-controller | grep 1/1 | wc -l) == 3 ]; do sleep 1; done + touch $@ + +$(M)/onos-operator: | $(M)/k8s-ready + kubectl get po -n kube-system | grep config-operator | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml + @until [ $$(kubectl get po -n kube-system | grep -e config-operator -e topo-operator | grep 1/1 | wc -l) == 2 ]; do sleep 1; done + touch $@ \ No newline at end of file diff --git a/mk/obsolete-targets.mk b/mk/obsolete-targets.mk new file mode 100644 index 0000000..ac3408b --- /dev/null +++ b/mk/obsolete-targets.mk @@ -0,0 +1,99 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +OBS_PHONY := set-option-oai set-option-ransim set-option-fbah set-option-ric set-stable-aether-chart set-latest-sdran-chart set-v1.0.0-sdran-chart set-v1.1.0-sdran-chart set-v1.1.1-sdran-chart set-latest-riab-values set-v1.0.0-riab-values set-v1.1.0-riab-values set-v1.1.1-riab-values set-master-stable-riab-values atomix riab-oai riab-ransim riab-ric riab-fbah riab-oai-latest riab-ransim-latest riab-ric-latest riab-fbah-latest riab-oai-v1.0.0 riab-ransim-v1.0.0 riab-ric-v1.0.0 riab-oai-v1.1.0 riab-ransim-v1.1.0 riab-ric-v1.1.0 riab-fbah-v1.1.0 riab-oai-v1.1.1 riab-ransim-v1.1.1 riab-ric-v1.1.1 riab-fbah-v1.1.1 riab-oai-dev riab-ransim-dev riab-ric-dev riab-fbah-dev oai-enb-usrp oai-ue-usrp ric-oai-latest riab-oai-master-stable riab-ransim-master-stable riab-ric-master-stable riab-fbah-master-stable + +set-option-oai: + $(eval HELM_ARGS=$(HELM_ARGS_OAI)) + $(eval OPT=oai) + +set-option-ransim: + $(eval HELM_ARGS=$(HELM_ARGS_RANSIM)) + $(eval OPT=ransim) + +set-option-fbah: + $(eval HELM_ARGS=$(HELM_ARGS_FBAH)) + $(eval OPT=fbah) + +set-option-ric: + $(eval HELM_ARGS=$(HELM_ARGS_RIC)) + $(eval OPT=ric) + +set-stable-aether-chart: + cd $(AETHERCHARTDIR); \ + git checkout $(AETHERCHARTCID); + +set-latest-sdran-chart: + cd $(SDRANCHARTDIR); \ + git checkout $(SDRANCHARTCID-LATEST) + +set-v1.0.0-sdran-chart: + cd $(SDRANCHARTDIR); \ + git fetch origin $(SDRANCHARTCID-V1.0.0); \ + git checkout $(SDRANCHARTCID-V1.0.0) + +set-v1.1.0-sdran-chart: + cd $(SDRANCHARTDIR); \ + git fetch origin $(SDRANCHARTCID-V1.1.0); \ + git checkout $(SDRANCHARTCID-V1.1.0) + +set-v1.1.1-sdran-chart: + cd $(SDRANCHARTDIR); \ + git fetch origin $(SDRANCHARTCID-V1.1.1); \ + git checkout $(SDRANCHARTCID-V1.1.1) + +set-latest-riab-values: + $(eval HELM_VALUES=$(HELM_VALUES_LATEST)) + +set-v1.0.0-riab-values: + $(eval HELM_VALUES=$(HELM_VALUES_V1.0.0)) + +set-v1.1.0-riab-values: + $(eval HELM_VALUES=$(HELM_VALUES_V1.1.0)) + +set-v1.1.1-riab-values: + $(eval HELM_VALUES=$(HELM_VALUES_V1.1.1)) + +set-master-stable-riab-values: + $(eval HELM_VALUES=$(HELM_VALUES_STABLE)) + +atomix: $(M)/atomix + +riab-oai: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values omec ric oai +riab-ransim: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric +riab-ric: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric +riab-fbah: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric + +riab-oai-latest: riab-oai +riab-ransim-latest: riab-ransim +riab-ric-latest: riab-ric +riab-fbah-latest: riab-fbah + +riab-oai-v1.0.0: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.0.0-sdran-chart set-v1.0.0-riab-values omec ric oai +riab-ransim-v1.0.0: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.0.0-sdran-chart set-v1.0.0-riab-values ric +riab-ric-v1.0.0: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.0.0-sdran-chart set-v1.0.0-riab-values ric + +riab-oai-v1.1.0: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.1.0-sdran-chart set-v1.1.0-riab-values omec ric oai +riab-ransim-v1.1.0: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric +riab-ric-v1.1.0: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric +riab-fbah-v1.1.0: set-option-fbah $(M)/system-check $(M)/helm-ready set-v1.1.0-sdran-chart set-v1.1.0-riab-values ric + +riab-oai-v1.1.1: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-v1.1.1-sdran-chart set-v1.1.1-riab-values omec ric oai +riab-ransim-v1.1.1: set-option-ransim $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric +riab-ric-v1.1.1: set-option-ric $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric +riab-fbah-v1.1.1: set-option-fbah $(M)/system-check $(M)/helm-ready set-v1.1.1-sdran-chart set-v1.1.1-riab-values ric + +riab-oai-dev: set-option-oai $(M)/system-check $(M)/helm-ready set-latest-riab-values omec ric oai +riab-ransim-dev: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-riab-values ric +riab-ric-dev: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-riab-values ric +riab-fbah-dev: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-riab-values ric + +oai-enb-usrp: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values $(M)/oai-enb-cu-hw $(M)/oai-enb-du +oai-ue-usrp: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-latest-riab-values $(M)/oai-ue +ric-oai-latest: set-option-oai set-latest-sdran-chart set-latest-riab-values ric + +riab-oai-master-stable: set-option-oai $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values omec ric oai +riab-ransim-master-stable: set-option-ransim $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric +riab-ric-master-stable: set-option-ric $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric +riab-fbah-master-stable: set-option-fbah $(M)/system-check $(M)/helm-ready set-stable-aether-chart set-latest-sdran-chart set-master-stable-riab-values ric \ No newline at end of file diff --git a/mk/preliminaries.mk b/mk/preliminaries.mk new file mode 100644 index 0000000..9e909ff --- /dev/null +++ b/mk/preliminaries.mk @@ -0,0 +1,61 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +PRELIMINARIES_PHONY := preliminaries + +preliminaries: $(M) $(M)/repos $(M)/system-check $(M)/setup + +$(M)/repos: | $(M) + mkdir -p $(CHARTDIR) + cd $(CHARTDIR) + @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ + echo "aether-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires HTTPS key"; \ + git clone $(CORD_GERRIT_URL)/aether-helm-charts $(AETHERCHARTDIR); \ + cd $(AETHERCHARTDIR); \ + git checkout $(AETHERCHARTCID); \ + fi + @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ + echo "sdran-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires Github credential"; \ + git clone $(ONOS_GITHUB_URL)/sdran-helm-charts $(SDRANCHARTDIR) || true; \ + fi + touch $@ + +$(M)/system-check: | $(M) $(M)/repos + @if [[ $(CPU_FAMILY) -eq 6 ]]; then \ + if [[ $(CPU_MODEL) -lt 60 ]]; then \ + echo "FATAL: haswell CPU or newer is required."; \ + exit 1; \ + fi \ + else \ + echo "FATAL: unsupported CPU family."; \ + exit 1; \ + fi + @if [[ $(OS_VENDOR) =~ (Ubuntu) ]]; then \ + if [[ ! $(OS_RELEASE) =~ (18.04) ]] && [[ ! $(OS_RELEASE) =~ (20.04) ]]; then \ + echo "WARN: $(OS_VENDOR) $(OS_RELEASE) has not been tested."; \ + fi; \ + if dpkg --compare-versions 4.15 gt $(shell uname -r); then \ + echo "FATAL: kernel 4.15 or later is required."; \ + echo "Please upgrade your kernel by running" \ + "apt install --install-recommends linux-generic-hwe-$(OS_RELEASE)"; \ + exit 1; \ + fi \ + else \ + echo "FAIL: unsupported OS."; \ + exit 1; \ + fi + @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ + echo "FATAL: Please manually clone aether-helm-chart under $(CHARTDIR) directory."; \ + exit 1; \ + fi + @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ + echo "FATAL: Please manually clone sdran-helm-chart under $(CHARTDIR) directory."; \ + exit 1; \ + fi + touch $@ + +$(M)/setup: | $(M)/system-check + sudo $(SCRIPTDIR)/cloudlab-disksetup.sh + sudo apt update; sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm + touch $@ \ No newline at end of file diff --git a/mk/ran.mk b/mk/ran.mk new file mode 100644 index 0000000..71d4089 --- /dev/null +++ b/mk/ran.mk @@ -0,0 +1,80 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +RAN_PHONY := oai oai-hw oai-enb-cu oai-enb-cu-hw oai-enb-du oai-ue + +oai: oai-enb-cu oai-enb-du oai-ue +oai-enb-cu: $(M)/oai-enb-cu +oai-enb-du: $(M)/oai-enb-du +oai-ue: $(M)/oai-ue + +oai-hw: oai-enb-cu-hw oai-enb-du +oai-enb-cu-hw: $(M)/oai-enb-cu-hw + +$(M)/oai-enb-cu: | $(M)/helm-ready $(M)/ric + $(eval e2t_addr=$(shell kubectl get svc onos-e2t -n $(RIAB_NAMESPACE) --no-headers | awk '{print $$3'})) + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ + --set config.onos-e2t.networks.e2.address=$(e2t_addr) \ + --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ + --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ + --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ + oai-enb-cu \ + $(SDRANCHARTDIR)/oai-enb-cu && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=oai-enb-cu --timeout=300s && \ + sleep 10 + touch $@ + +$(M)/oai-enb-cu-hw: | $(M)/helm-ready + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ + --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ + --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ + oai-enb-cu \ + $(SDRANCHARTDIR)/oai-enb-cu && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-cu --timeout=300s && \ + sleep 10 + touch $@ + +$(M)/oai-enb-du: | $(M)/helm-ready + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + --set config.oai-enb-cu.networks.f1.interface=$(F1_CU_INTERFACE) \ + --set config.oai-enb-cu.networks.f1.address=$(F1_CU_IPADDR) \ + --set config.oai-enb-du.networks.f1.interface=$(F1_DU_INTERFACE) \ + --set config.oai-enb-du.networks.f1.address=$(F1_DU_IPADDR) \ + --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ + --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ + --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ + --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ + oai-enb-du \ + $(SDRANCHARTDIR)/oai-enb-du && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-du --timeout=300s && \ + sleep 10 + touch $@ + +$(M)/oai-ue: | $(M)/helm-ready + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ + --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ + --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ + --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ + oai-ue \ + $(SDRANCHARTDIR)/oai-ue && \ + sleep 60 && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-ue --timeout=300s && \ + touch $@ \ No newline at end of file diff --git a/mk/releases.mk b/mk/releases.mk new file mode 100644 index 0000000..84a7975 --- /dev/null +++ b/mk/releases.mk @@ -0,0 +1,2 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 \ No newline at end of file diff --git a/mk/reset-clean.mk b/mk/reset-clean.mk new file mode 100644 index 0000000..e6281d3 --- /dev/null +++ b/mk/reset-clean.mk @@ -0,0 +1,59 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +RESET_CLEAN_PHONY := reset-oai reset-omec reset-atomix reset-onos-op reset-ric reset-oai-test reset-ransim-test reset-test clean clean-all + +reset-oai: + helm delete -n $(RIAB_NAMESPACE) oai-enb-cu || true + helm delete -n $(RIAB_NAMESPACE) oai-enb-du || true + helm delete -n $(RIAB_NAMESPACE) oai-ue || true + rm -f $(M)/oai-enb-cu* + rm -f $(M)/oai-enb-du + rm -f $(M)/oai-ue + +reset-omec: + helm delete -n $(RIAB_NAMESPACE) omec-control-plane || true + helm delete -n $(RIAB_NAMESPACE) omec-user-plane || true + cd $(M); rm -f omec + +reset-atomix: + kubectl delete -f https://raw.githubusercontent.com/atomix/raft-storage-controller/master/deploy/raft-storage-controller.yaml || true + kubectl delete -f https://raw.githubusercontent.com/atomix/cache-storage-controller/master/deploy/cache-storage-controller.yaml || true + kubectl delete -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml || true + cd $(M); rm -f atomix + +reset-onos-op: + kubectl delete -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml || true + @until [ $$(kubectl get po -n kube-system -l name=topo-operator --no-headers | wc -l) == 0 ]; do sleep 1; done + @until [ $$(kubectl get po -n kube-system -l name=config-operator --no-headers | wc -l) == 0 ]; do sleep 1; done + cd $(M); rm -f onos-operator + +reset-ric: + helm delete -n $(RIAB_NAMESPACE) sd-ran || true + @until [ $$(kubectl get po -n $(RIAB_NAMESPACE) -l app=onos --no-headers | wc -l) == 0 ]; do sleep 1; done + cd $(M); rm -f ric + +reset-oai-test: reset-omec reset-oai reset-ric + +reset-ransim-test: reset-ric + +reset-test: reset-oai-test reset-ransim-test reset-onos-op reset-atomix + +clean: reset-test + helm repo remove sdran || true + kubectl delete po router || true + kubectl delete net-attach-def core-net || true + sudo ovs-vsctl del-br br-access-net || true + sudo ovs-vsctl del-br br-core-net || true + sudo apt remove --purge openvswitch-switch -y || true + source "$(VENV)/bin/activate" && cd $(BUILD)/kubespray; \ + ansible-playbook --extra-vars "reset_confirmation=yes" -b -i inventory/local/hosts.ini reset.yml || true + @if [ -d /usr/local/etc/emulab ]; then \ + mount | grep /mnt/extra/kubelet/pods | cut -d" " -f3 | sudo xargs umount; \ + sudo rm -rf /mnt/extra/kubelet; \ + fi + rm -rf $(M) + +clean-all: clean + rm -rf $(CHARTDIR) diff --git a/mk/ric.mk b/mk/ric.mk new file mode 100644 index 0000000..43b05d9 --- /dev/null +++ b/mk/ric.mk @@ -0,0 +1,20 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +RIC_PHONY := omec + +ric: $(M)/ric + +$(M)/ric: | $(M)/helm-ready $(M)/atomix $(M)/onos-operator + kubectl get po -n kube-system | grep config-operator | grep -v Terminating || kubectl create -f https://raw.githubusercontent.com/onosproject/onos-operator/v0.4.0/deploy/onos-operator.yaml + @until [ $$(kubectl get po -n kube-system | grep -e config-operator -e topo-operator | grep 1/1 | wc -l) == 2 ]; do sleep 1; done + kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) + cd $(SDRANCHARTDIR)/sd-ran; helm dep update + helm upgrade --install $(HELM_ARGS) \ + --namespace $(RIAB_NAMESPACE) \ + --values $(HELM_VALUES) \ + sd-ran \ + $(SDRANCHARTDIR)/sd-ran && \ + kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=onos --timeout=600s + touch $@ \ No newline at end of file diff --git a/mk/test-cases.mk b/mk/test-cases.mk new file mode 100644 index 0000000..72e0b49 --- /dev/null +++ b/mk/test-cases.mk @@ -0,0 +1,29 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +TEST_PHONY := test-user-plane test-kpimon test-kpimon-v1 test-kpimon-v2 test-pci + +test-user-plane: | $(M)/omec $(M)/oai-ue + @echo "*** T1: Internal network test: ping 192.168.250.1 (Internal router IP) ***"; \ + ping -c 3 192.168.250.1 -I oaitun_ue1; \ + echo "*** T2: Internet connectivity test: ping to 8.8.8.8 ***"; \ + ping -c 3 8.8.8.8 -I oaitun_ue1; \ + echo "*** T3: DNS test: ping to google.com ***"; \ + ping -c 3 google.com -I oaitun_ue1; + +test-kpimon: | $(M)/ric + @echo "*** Get KPIMON result through CLI ***"; \ + kubectl exec -it deploy/onos-cli -n riab -- onos kpimon list numues; + +test-kpimon-v1: | $(M)/ric + @echo "*** Get KPIMON result through CLI ***"; \ + kubectl exec -it deploy/onos-cli -n riab -- onos kpimonv1 list metrics; + +test-kpimon-v2: | $(M)/ric + @echo "*** Get KPIMON result through CLI ***"; \ + kubectl exec -it deploy/onos-cli -n riab -- onos kpimonv2 list metrics; + +test-pci: | $(M)/ric + @echo "*** Get PCI result through CLI ***"; \ + kubectl exec -it deployment/onos-cli -n riab -- onos pci listall numconflicts; diff --git a/mk/utils.mk b/mk/utils.mk new file mode 100644 index 0000000..b4fbbc4 --- /dev/null +++ b/mk/utils.mk @@ -0,0 +1,15 @@ +# Copyright 2020-present Open Networking Foundation +# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0 + +# PHONY definitions +UTIL_PHONY := detach-ue fetch-all-charts + +detach-ue: | $(M)/oai-enb-cu $(M)/oai-enb-du $(M)/oai-ue + echo -en "AT+CPIN=0000\r" | nc -u -w 1 localhost 10000 + echo -en "AT+CGATT=0\r" | nc -u -w 1 localhost 10000 + +fetch-all-charts: + cd $(AETHERCHARTDIR); \ + git fetch --all; \ + cd $(SDRANCHARTDIR); \ + git fetch --all; \ No newline at end of file