├── .gitignore ├── .reuse └── dep5 ├── CODE_OF_CONDUCT.md ├── LICENSES └── Apache-2.0.txt ├── Makefile ├── MakefileVar.mk ├── README.md ├── VERSION ├── configs └── chart_values │ ├── onf-server-1-riab-master-stable.yaml │ ├── onf-server-1-riab-master-v1.3.0.yaml │ ├── onf-server-1-riab-values-v1.0.0.yaml │ ├── onf-server-1-riab-values-v1.1.0.yaml │ ├── onf-server-1-riab-values-v1.1.1.yaml │ ├── onf-server-1-riab-values-v1.2.0.yaml │ └── onf-server-1-riab-values.yaml ├── docs ├── Configuration_files.md ├── HW_Installation_intro.md ├── HW_Installation_oai_enb.md ├── HW_Installation_oai_source.md ├── HW_Installation_oai_ue.md ├── HW_Installation_omec.md ├── HW_Installation_ops.md ├── HW_Installation_prereq.md ├── HW_Installation_ric.md ├── HW_Installation_ric_only.md ├── HW_Installation_troubleshooting.md ├── Installation_OAI_nFAPI.md ├── Installation_RANSim_FBAH.md ├── Installation_RANSim_MHO.md ├── Installation_RANSim_MLB.md ├── Installation_RANSim_PCI.md ├── Installation_RANSim_RIMDEO_TS.md ├── Installation_mon_logs.md ├── RiaB_Prerequisites.md ├── Troubleshooting.md ├── Vagrant_nFAPI.md └── figures │ ├── fbah-no-map-v1.1.png │ ├── fbah-with-map-v1.1.png │ ├── fbah-with-map-v1.2.png │ └── hw_install.png ├── mk ├── epc.mk ├── infra.mk ├── obsolete-targets.mk ├── preliminaries.mk ├── ran.mk ├── releases.mk ├── reset-clean.mk ├── ric.mk ├── routing.mk ├── test-cases.mk └── utils.mk ├── resources ├── kubespray-reset-defaults.yml ├── rimedots-sample-a1p.json ├── router-sample.yaml ├── router-template.yaml └── simpleovs ├── scripts ├── cloudlab-disksetup.sh └── push-cell-loc.sh ├── sdran-in-a-box-values-master-stable.yaml ├── sdran-in-a-box-values-v1.0.0.yaml ├── sdran-in-a-box-values-v1.1.0.yaml ├── sdran-in-a-box-values-v1.1.1.yaml ├── sdran-in-a-box-values-v1.2.0.yaml ├── sdran-in-a-box-values-v1.3.0.yaml ├── sdran-in-a-box-values-v1.4.0.yaml ├── sdran-in-a-box-values.yaml └── vagrant ├── destroy_omec_vm.sh ├── destroy_ran_vm.sh ├── destroy_ric_vm.sh ├── destroy_vms.sh ├── halt_omec_vm.sh ├── halt_ran_vm.sh ├── halt_ric_vm.sh ├── halt_vms.sh ├── omec └── Vagrantfile ├── ran └── Vagrantfile ├── ric └── Vagrantfile ├── run_omec_vm.sh ├── run_ran_vm.sh ├── run_ric_vm.sh ├── run_vms.sh ├── setup.sh └── vcmd.sh /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2019-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | *.DS_Store 6 | .idea 7 | .vscode 8 | *.o 9 | *.a 10 | .project 11 | .cproject 12 | .eclipse 13 | workspace 14 | get_helm.sh 15 | -------------------------------------------------------------------------------- /.reuse/dep5: -------------------------------------------------------------------------------- 1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | 3 | Files: VERSION .gitreview go.mod go.sum docs/figures/* 4 | Copyright: 2021 Open Networking Foundation 5 | License: Apache-2.0 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | We expect all ONF employees, member companies, and participants to abide by our [Code of Conduct](https://www.opennetworking.org/wp-content/themes/onf/img/onf-code-of-conduct.pdf). 8 | 9 | If you are being harassed, notice that someone else is being harassed, or have any other concerns involving someone’s welfare, please notify a member of the ONF team or email [conduct@opennetworking.org](conduct@opennetworking.org). 10 | -------------------------------------------------------------------------------- /LICENSES/Apache-2.0.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, and distribution 10 | as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright 13 | owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities 16 | that control, are controlled by, or are under common control with that entity. 17 | For the purposes of this definition, "control" means (i) the power, direct 18 | or indirect, to cause the direction or management of such entity, whether 19 | by contract or otherwise, or (ii) ownership of fifty percent (50%) or more 20 | of the outstanding shares, or (iii) beneficial ownership of such entity. 21 | 22 | "You" (or "Your") shall mean an individual or Legal Entity exercising permissions 23 | granted by this License. 24 | 25 | "Source" form shall mean the preferred form for making modifications, including 26 | but not limited to software source code, documentation source, and configuration 27 | files. 28 | 29 | "Object" form shall mean any form resulting from mechanical transformation 30 | or translation of a Source form, including but not limited to compiled object 31 | code, generated documentation, and conversions to other media types. 32 | 33 | "Work" shall mean the work of authorship, whether in Source or Object form, 34 | made available under the License, as indicated by a copyright notice that 35 | is included in or attached to the work (an example is provided in the Appendix 36 | below). 37 | 38 | "Derivative Works" shall mean any work, whether in Source or Object form, 39 | that is based on (or derived from) the Work and for which the editorial revisions, 40 | annotations, elaborations, or other modifications represent, as a whole, an 41 | original work of authorship. For the purposes of this License, Derivative 42 | Works shall not include works that remain separable from, or merely link (or 43 | bind by name) to the interfaces of, the Work and Derivative Works thereof. 44 | 45 | "Contribution" shall mean any work of authorship, including the original version 46 | of the Work and any modifications or additions to that Work or Derivative 47 | Works thereof, that is intentionally submitted to Licensor for inclusion in 48 | the Work by the copyright owner or by an individual or Legal Entity authorized 49 | to submit on behalf of the copyright owner. For the purposes of this definition, 50 | "submitted" means any form of electronic, verbal, or written communication 51 | sent to the Licensor or its representatives, including but not limited to 52 | communication on electronic mailing lists, source code control systems, and 53 | issue tracking systems that are managed by, or on behalf of, the Licensor 54 | for the purpose of discussing and improving the Work, but excluding communication 55 | that is conspicuously marked or otherwise designated in writing by the copyright 56 | owner as "Not a Contribution." 57 | 58 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf 59 | of whom a Contribution has been received by Licensor and subsequently incorporated 60 | within the Work. 61 | 62 | 2. Grant of Copyright License. Subject to the terms and conditions of this 63 | License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, 64 | no-charge, royalty-free, irrevocable copyright license to reproduce, prepare 65 | Derivative Works of, publicly display, publicly perform, sublicense, and distribute 66 | the Work and such Derivative Works in Source or Object form. 67 | 68 | 3. Grant of Patent License. Subject to the terms and conditions of this License, 69 | each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, 70 | no-charge, royalty-free, irrevocable (except as stated in this section) patent 71 | license to make, have made, use, offer to sell, sell, import, and otherwise 72 | transfer the Work, where such license applies only to those patent claims 73 | licensable by such Contributor that are necessarily infringed by their Contribution(s) 74 | alone or by combination of their Contribution(s) with the Work to which such 75 | Contribution(s) was submitted. If You institute patent litigation against 76 | any entity (including a cross-claim or counterclaim in a lawsuit) alleging 77 | that the Work or a Contribution incorporated within the Work constitutes direct 78 | or contributory patent infringement, then any patent licenses granted to You 79 | under this License for that Work shall terminate as of the date such litigation 80 | is filed. 81 | 82 | 4. Redistribution. You may reproduce and distribute copies of the Work or 83 | Derivative Works thereof in any medium, with or without modifications, and 84 | in Source or Object form, provided that You meet the following conditions: 85 | 86 | (a) You must give any other recipients of the Work or Derivative Works a copy 87 | of this License; and 88 | 89 | (b) You must cause any modified files to carry prominent notices stating that 90 | You changed the files; and 91 | 92 | (c) You must retain, in the Source form of any Derivative Works that You distribute, 93 | all copyright, patent, trademark, and attribution notices from the Source 94 | form of the Work, excluding those notices that do not pertain to any part 95 | of the Derivative Works; and 96 | 97 | (d) If the Work includes a "NOTICE" text file as part of its distribution, 98 | then any Derivative Works that You distribute must include a readable copy 99 | of the attribution notices contained within such NOTICE file, excluding those 100 | notices that do not pertain to any part of the Derivative Works, in at least 101 | one of the following places: within a NOTICE text file distributed as part 102 | of the Derivative Works; within the Source form or documentation, if provided 103 | along with the Derivative Works; or, within a display generated by the Derivative 104 | Works, if and wherever such third-party notices normally appear. The contents 105 | of the NOTICE file are for informational purposes only and do not modify the 106 | License. You may add Your own attribution notices within Derivative Works 107 | that You distribute, alongside or as an addendum to the NOTICE text from the 108 | Work, provided that such additional attribution notices cannot be construed 109 | as modifying the License. 110 | 111 | You may add Your own copyright statement to Your modifications and may provide 112 | additional or different license terms and conditions for use, reproduction, 113 | or distribution of Your modifications, or for any such Derivative Works as 114 | a whole, provided Your use, reproduction, and distribution of the Work otherwise 115 | complies with the conditions stated in this License. 116 | 117 | 5. Submission of Contributions. Unless You explicitly state otherwise, any 118 | Contribution intentionally submitted for inclusion in the Work by You to the 119 | Licensor shall be under the terms and conditions of this License, without 120 | any additional terms or conditions. Notwithstanding the above, nothing herein 121 | shall supersede or modify the terms of any separate license agreement you 122 | may have executed with Licensor regarding such Contributions. 123 | 124 | 6. Trademarks. This License does not grant permission to use the trade names, 125 | trademarks, service marks, or product names of the Licensor, except as required 126 | for reasonable and customary use in describing the origin of the Work and 127 | reproducing the content of the NOTICE file. 128 | 129 | 7. Disclaimer of Warranty. Unless required by applicable law or agreed to 130 | in writing, Licensor provides the Work (and each Contributor provides its 131 | Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 132 | KIND, either express or implied, including, without limitation, any warranties 133 | or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR 134 | A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness 135 | of using or redistributing the Work and assume any risks associated with Your 136 | exercise of permissions under this License. 137 | 138 | 8. Limitation of Liability. In no event and under no legal theory, whether 139 | in tort (including negligence), contract, or otherwise, unless required by 140 | applicable law (such as deliberate and grossly negligent acts) or agreed to 141 | in writing, shall any Contributor be liable to You for damages, including 142 | any direct, indirect, special, incidental, or consequential damages of any 143 | character arising as a result of this License or out of the use or inability 144 | to use the Work (including but not limited to damages for loss of goodwill, 145 | work stoppage, computer failure or malfunction, or any and all other commercial 146 | damages or losses), even if such Contributor has been advised of the possibility 147 | of such damages. 148 | 149 | 9. Accepting Warranty or Additional Liability. While redistributing the Work 150 | or Derivative Works thereof, You may choose to offer, and charge a fee for, 151 | acceptance of support, warranty, indemnity, or other liability obligations 152 | and/or rights consistent with this License. However, in accepting such obligations, 153 | You may act only on Your own behalf and on Your sole responsibility, not on 154 | behalf of any other Contributor, and only if You agree to indemnify, defend, 155 | and hold each Contributor harmless for any liability incurred by, or claims 156 | asserted against, such Contributor by reason of your accepting any such warranty 157 | or additional liability. 158 | 159 | END OF TERMS AND CONDITIONS 160 | 161 | APPENDIX: How to apply the Apache License to your work. 162 | 163 | To apply the Apache License to your work, attach the following boilerplate 164 | notice, with the fields enclosed by brackets "[]" replaced with your own identifying 165 | information. (Don't include the brackets!) The text should be enclosed in 166 | the appropriate comment syntax for the file format. We also recommend that 167 | a file or class name and description of purpose be included on the same "printed 168 | page" as the copyright notice for easier identification within third-party 169 | archives. 170 | 171 | Copyright [yyyy] [name of copyright owner] 172 | 173 | Licensed under the Apache License, Version 2.0 (the "License"); 174 | you may not use this file except in compliance with the License. 175 | You may obtain a copy of the License at 176 | 177 | http://www.apache.org/licenses/LICENSE-2.0 178 | 179 | Unless required by applicable law or agreed to in writing, software 180 | distributed under the License is distributed on an "AS IS" BASIS, 181 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 182 | See the License for the specific language governing permissions and 183 | limitations under the License. 184 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # Include Variable file 5 | include ./MakefileVar.mk 6 | include ./mk/*.mk 7 | 8 | # Default target 9 | .DEFAULT_GOAL := riab 10 | 11 | # PHONY definitions 12 | OPT_SELECTION_PHONY := option 13 | VER_SELECTION_PHONY := version 14 | RUN_PHONY := riab 15 | 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) $(ROUTING_PHONY) 16 | 17 | .PHONY: $(MAINPHONY) 18 | 19 | $(WORKSPACE): 20 | mkdir -p $(WORKSPACE) 21 | 22 | $(M): | $(WORKSPACE) $(BUILD) 23 | mkdir -p $(M) 24 | 25 | $(BUILD): | $(WORKSPACE) 26 | mkdir -p $(BUILD) 27 | 28 | ifeq ($(OPT), ransim) 29 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric 30 | @echo Done 31 | else ifeq ($(OPT), oai) 32 | riab: option version preliminaries infra-k8s infra-fabric routing-quagga infra-atomix infra-onos-op omec routing-omec ric oai 33 | @echo Done 34 | else ifeq ($(OPT), oai-ran-cu-du) 35 | riab: option version preliminaries infra-k8s infra-fabric-cu-du oai-enb-cu-hw oai-enb-du routing-hw-oai 36 | @echo Done 37 | else ifeq ($(OPT), ric) 38 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric routing-ric-external-ran 39 | @echo Done 40 | else ifeq ($(OPT), ric-e2ap101) 41 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric routing-ric-external-ran 42 | @echo Done 43 | else ifeq ($(OPT), fbah) 44 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op infra-prom-op-servicemonitor ric enable-fbah-gui 45 | @echo Done 46 | else ifeq ($(OPT), mlb) 47 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric 48 | @echo Done 49 | else ifeq ($(OPT), mho) 50 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric 51 | @echo Done 52 | else ifeq ($(OPT), rimedots) 53 | riab: option version preliminaries infra-k8s infra-atomix infra-onos-op ric 54 | @echo Done 55 | else 56 | riab: option version 57 | @echo "Invalid option" 58 | @echo "Option:" $(OPT) 59 | endif 60 | 61 | $(M)/repos: | $(M) 62 | mkdir -p $(CHARTDIR) 63 | cd $(CHARTDIR) 64 | @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ 65 | echo "aether-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires HTTPS key"; \ 66 | git clone $(CORD_GERRIT_URL) $(AETHERCHARTDIR) || true; \ 67 | fi 68 | @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ 69 | echo "sdran-helm-chart repo is not in $(CHARTDIR) directory. Start to clone - it requires Github credential"; \ 70 | git clone $(ONOS_GITHUB_URL)/sdran-helm-charts $(SDRANCHARTDIR) || true; \ 71 | fi 72 | touch $@ 73 | 74 | option: | $(M) $(M)/repos 75 | ifeq ($(OPT), ransim) 76 | $(eval OPT=ransim) 77 | $(eval HELM_ARGS=$(HELM_ARGS_RANSIM)) 78 | @echo "Helm arguments for ransim: $(HELM_ARGS_RANSIM)" 79 | else ifeq ($(OPT), oai) 80 | $(eval OPT=oai) 81 | $(eval HELM_ARGS=$(HELM_ARGS_OAI)) 82 | @echo "Helm arguments for oai: $(HELM_ARGS_OAI)" 83 | else ifeq ($(OPT), oai-ran-cu-du) 84 | $(eval OPT=oai-ran-cu-du) 85 | $(eval HELM_ARGS=$(HELM_ARGS_OAI)) 86 | @echo "Helm arguments for oai: $(HELM_ARGS_OAI)" 87 | else ifeq ($(OPT), ric) 88 | $(eval OPT=ric) 89 | $(eval HELM_ARGS=$(HELM_ARGS_RIC)) 90 | @echo "Helm arguments for ric: $(HELM_ARGS_RIC)" 91 | else ifeq ($(OPT), ric-e2ap101) 92 | $(eval OPT=ric-e2ap101) 93 | $(eval HELM_ARGS=$(HELM_ARGS_RIC_E2AP101)) 94 | @echo "Helm arguments for ric: $(HELM_ARGS_RIC_E2AP101)" 95 | else ifeq ($(OPT), fbah) 96 | $(eval OPT=fbah) 97 | $(eval HELM_ARGS=$(HELM_ARGS_FBAH)) 98 | @echo "Helm arguments for Facebook-AirHop usecase: $(HELM_ARGS_FBAH)" 99 | else ifeq ($(OPT), mlb) 100 | $(eval OPT=ransim) 101 | $(eval HELM_ARGS=$(HELM_ARGS_MLB)) 102 | @echo "Helm arguments for mlb: $(HELM_ARGS_MLB)" 103 | else ifeq ($(OPT), mho) 104 | $(eval OPT=ransim) 105 | $(eval HELM_ARGS=$(HELM_ARGS_MHO)) 106 | @echo "Helm arguments for mho: $(HELM_ARGS_MHO)" 107 | else ifeq ($(OPT), rimedots) 108 | $(eval OPT=ransim) 109 | $(eval HELM_ARGS=$(HELM_ARGS_RIMEDOTS)) 110 | @echo "Helm arguments for rimedots: $(HELM_ARGS_RIMEDOTS)" 111 | else 112 | $(eval OPT=ransim) 113 | $(eval HELM_ARGS=$(HELM_ARGS_RANSIM)) 114 | @echo "Helm arguments for ransim (default): $(HELM_ARGS_RANSIM)" 115 | endif 116 | 117 | version: | $(M) $(M)/repos 118 | ifeq ($(VER), v1.0.0) 119 | $(eval VER=v1.0.0) 120 | $(eval HELM_VALUES=$(HELM_VALUES_V1.0.0)) 121 | @echo "Helm values.yaml file: $(HELM_VALUES_V1.0.0)" 122 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.0.0) 123 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-V1.0.0) 124 | else ifeq ($(VER), v1.1.0) 125 | $(eval VER=v1.1.0) 126 | $(eval HELM_VALUES=$(HELM_VALUES_V1.1.0)) 127 | @echo "Helm values.yaml file: $(HELM_VALUES_V1.1.0)" 128 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.1.0) 129 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-V1.0.0) 130 | else ifeq ($(VER), v1.1.1) 131 | $(eval VER=v1.1.1) 132 | $(eval HELM_VALUES=$(HELM_VALUES_V1.1.1)) 133 | @echo "Helm values.yaml file: $(HELM_VALUES_V1.1.1)" 134 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.1.1) 135 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-V1.0.0) 136 | else ifeq ($(VER), v1.2.0) 137 | $(eval VER=v1.2.0) 138 | $(eval HELM_VALUES=$(HELM_VALUES_V1.2.0)) 139 | @echo "Helm values.yaml file: $(HELM_VALUES_V1.2.0)" 140 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.2.0) 141 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-V1.0.0) 142 | else ifeq ($(VER), v1.3.0) 143 | $(eval VER=v1.3.0) 144 | $(eval HELM_VALUES=$(HELM_VALUES_V1.3.0)) 145 | @echo "Helm values.yaml file: $(HELM_VALUES_V1.3.0)" 146 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-V1.3.0) 147 | ifeq ($(OPT), oai) 148 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-E2AP101-V1.3.0) 149 | else ifeq ($(OPT), ric-e2ap101) 150 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-E2AP101-V1.3.0) 151 | else 152 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.3.0) 153 | endif 154 | else ifeq ($(VER), v1.4.0) 155 | $(eval VER=v1.4.0) 156 | $(eval HELM_VALUES=$(HELM_VALUES_V1.4.0)) 157 | @echo "Helm values.yaml file: $(HELM_VALUES_V1.4.0)" 158 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-V1.4.0) 159 | ifeq ($(OPT), oai) 160 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.4.0) 161 | else ifeq ($(OPT), ric-e2ap101) 162 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-E2AP101-V1.4.0) 163 | else 164 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-V1.4.0) 165 | endif 166 | else ifeq ($(VER), stable) 167 | $(eval VER=stable) 168 | $(eval HELM_VALUES=$(HELM_VALUES_STABLE)) 169 | @echo "Helm values.yaml file: $(HELM_VALUES_STABLE)" 170 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-LATEST) 171 | ifeq ($(OPT), oai) 172 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) 173 | else ifeq ($(OPT), ric-e2ap101) 174 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-E2AP101-LATEST) 175 | else 176 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) 177 | endif 178 | else ifeq ($(VER), latest) 179 | $(eval VER=latest) 180 | $(eval HELM_VALUES=$(HELM_VALUES_LATEST)) 181 | @echo "Helm values.yaml file: $(HELM_VALUES_LATEST)" 182 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-LATEST) 183 | ifeq ($(OPT), oai) 184 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) 185 | else ifeq ($(OPT), ric-e2ap101) 186 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-E2AP101-LATEST) 187 | else 188 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) 189 | endif 190 | else ifeq ($(VER), dev) 191 | $(eval VER=dev) 192 | $(eval HELM_VALUES=$(HELM_VALUES_DEV)) 193 | @echo "Helm values.yaml file: $(HELM_VALUES_DEV)" 194 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-LATEST) 195 | else 196 | $(eval VER=stable) 197 | $(eval HELM_VALUES=$(HELM_VALUES_STABLE)) 198 | @echo "Helm values.yaml file: $(HELM_VALUES_STABLE)" 199 | @cd $(AETHERCHARTDIR); git checkout $(AETHERCHARTCID-LATEST) 200 | ifeq ($(OPT), oai) 201 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) 202 | else ifeq ($(OPT), ric-e2ap101) 203 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-E2AP101-LATEST) 204 | else 205 | @cd $(SDRANCHARTDIR); git checkout $(SDRANCHARTCID-LATEST) 206 | endif 207 | endif 208 | -------------------------------------------------------------------------------- /MakefileVar.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # Directory arguments 5 | SHELL := /bin/bash 6 | RIABDIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) 7 | WORKSPACE ?= $(RIABDIR)/workspace 8 | M ?= $(WORKSPACE)/milestones 9 | BUILD ?= $(WORKSPACE)/build 10 | VENV ?= $(BUILD)/venv/riab 11 | SCRIPTDIR ?= $(RIABDIR)/scripts 12 | CHARTDIR ?= $(WORKSPACE)/helm-charts 13 | AETHERCHARTDIR ?= $(CHARTDIR)/sdcore-helm-charts 14 | SDRANCHARTDIR ?= $(CHARTDIR)/sdran-helm-charts 15 | RESOURCEDIR ?= $(RIABDIR)/resources 16 | 17 | # Proxy config 18 | PROXY_ENABLED ?= false 19 | HTTP_PROXY ?= ${http_proxy} 20 | HTTPS_PROXY ?= ${https_proxy} 21 | NO_PROXY ?= ${no_proxy} 22 | 23 | # Commit IDs 24 | AETHERCHARTCID-V1.0.0 ?= 1.4.0 25 | AETHERCHARTCID-V1.3.0 ?= 1.4.0 26 | AETHERCHARTCID-V1.4.0 ?= 1.4.0 27 | AETHERCHARTCID-LATEST ?= 1.4.0 28 | SDRANCHARTCID-LATEST ?= origin/master 29 | SDRANCHARTCID-E2AP101-LATEST ?= origin/e2ap101 30 | SDRANCHARTCID-E2AP101-V1.3.0 ?= sd-ran-1.2.129 31 | SDRANCHARTCID-E2AP101-V1.4.0 ?= sd-ran-1.2.129 32 | SDRANCHARTCID-V1.0.0 ?= v1.0.0 #branch: v1.0.0 33 | SDRANCHARTCID-V1.1.0 ?= 6670e6da25129b665b024a7c6d0fd79cfda52f25 34 | SDRANCHARTCID-V1.1.1 ?= origin/rel-1.1.1 35 | SDRANCHARTCID-V1.2.0 ?= origin/rel-1.2 36 | SDRANCHARTCID-V1.3.0 ?= origin/rel-1.3 37 | SDRANCHARTCID-V1.4.0 ?= sd-ran-1.4.2 38 | 39 | # Helm arguments 40 | DEFAULT_HELM_ARGS := --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true 41 | HELM_ARGS ?= $(DEFAULT_HELM_ARGS) 42 | HELM_ARGS_RANSIM ?= --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true 43 | HELM_ARGS_OAI ?= --set import.onos-rsm.enabled=true 44 | HELM_ARGS_RIC ?= --set import.onos-pci.enabled=false --set import.onos-rsm.enabled=true 45 | HELM_ARGS_RIC_E2AP101 ?= --set import.onos-pci.enabled=false --set import.onos-rsm.enabled=true 46 | 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 --set import.fb-kpimon-xapp.enabled=true 47 | HELM_ARGS_MLB ?= --set import.ran-simulator.enabled=true --set import.onos-pci.enabled=true --set import.onos-mlb.enabled=true --set ran-simulator.pci.modelName=three-cell-n-node-model --set ran-simulator.pci.metricName=three-cell-n-node-metrics 48 | HELM_ARGS_MHO ?= --set import.ran-simulator.enabled=true --set import.onos-mho.enabled=true --set ran-simulator.pci.modelName=two-cell-two-node-model 49 | HELM_ARGS_RIMEDOTS ?= --set import.ran-simulator.enabled=true --set import.rimedo-ts.enabled=true --set ran-simulator.pci.modelName=two-cell-two-node-model 50 | 51 | # Helm values file 52 | DEFAULT_HELM_VALUES := $(RIABDIR)/sdran-in-a-box-values-master-stable.yaml 53 | HELM_VALUES ?= $(DEFAULT_HELM_VALUES) 54 | HELM_VALUES_V1.0.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.0.0.yaml 55 | HELM_VALUES_V1.1.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.0.yaml 56 | HELM_VALUES_V1.1.1 ?= $(RIABDIR)/sdran-in-a-box-values-v1.1.1.yaml 57 | HELM_VALUES_V1.2.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.2.0.yaml 58 | HELM_VALUES_V1.3.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.3.0.yaml 59 | HELM_VALUES_V1.4.0 ?= $(RIABDIR)/sdran-in-a-box-values-v1.4.0.yaml 60 | HELM_VALUES_STABLE ?= $(RIABDIR)/sdran-in-a-box-values-master-stable.yaml 61 | HELM_VALUES_LATEST ?= $(RIABDIR)/sdran-in-a-box-values.yaml 62 | HELM_VALUES_DEV ?= $(RIABDIR)/sdran-in-a-box-values.yaml 63 | 64 | # Options - ransim (by default), oai, ric, and fbah 65 | DEFAULT_OPT := ransim 66 | OPT ?= $(DEFAULT_OPT) 67 | 68 | # Versions - v1.0.0, v1.1.0, v1.1.1, v1.2.0, v1.3.0, v1.4.0, stable, latest, and dev 69 | DEFAULT_VER := stable 70 | VER ?= $(DEFAULT_VER) 71 | 72 | # Default RiaB namespace 73 | DEFAULT_RIAB_NAMESPACE := riab 74 | RIAB_NAMESPACE ?= $(DEFAULT_RIAB_NAMESPACE) 75 | 76 | # URLs 77 | CORD_GERRIT_URL ?= https://github.com/omec-project/sdcore-helm-charts 78 | ONOS_GITHUB_URL ?= https://github.com/onosproject 79 | HELM_INCUBATOR_URL ?= https://charts.helm.sh/incubator 80 | HELM_OPENCORD_URL ?= https://charts.opencord.org 81 | HELM_SDRAN_URL ?= https://sdrancharts.onosproject.org 82 | 83 | # Infrastructure component version 84 | RKE2_K8S_VERSION ?= v1.23.15+rke2r1 85 | LPP_VERSION ?= v0.0.24 86 | KUBECTL_VERSION ?= v1.23.15 87 | GET_HELM = get_helm.sh 88 | HELM_VERSION ?= v3.10.3 89 | 90 | 91 | # OMEC parameters 92 | UE_IP_POOL ?= 172.250.0.0 93 | UE_IP_MASK ?= 16 94 | STATIC_UE_IP_POOL ?= 172.249.0.0 95 | STATIC_UE_IP_MASK ?= 16 96 | MME_IP_ADDR ?= $(shell ip -4 a show $(S1MME_CU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | tail -n 1) 97 | 98 | # For system check 99 | CPU_FAMILY := $(shell lscpu | grep 'CPU family:' | awk '{print $$3}') 100 | CPU_MODEL := $(shell lscpu | grep 'Model:' | awk '{print $$2}') 101 | OS_VENDOR := $(shell lsb_release -i -s) 102 | OS_RELEASE := $(shell lsb_release -r -s) 103 | 104 | # For RIC 105 | E2_F1_CU_INTERFACE := cu_e2f1_if 106 | E2_F1_CU_IPADDR := 192.168.200.21/24 107 | E2_F1_DU_INTERFACE := du_e2f1_if 108 | E2_F1_DU_IPADDR := 192.168.200.22/24 109 | S1MME_CU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') 110 | NFAPI_DU_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') 111 | NFAPI_DU_IPADDR := $(shell ip -4 a show $(NFAPI_DU_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | tail -n 1) 112 | NFAPI_UE_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') 113 | NFAPI_UE_IPADDR := $(shell ip -4 a show $(NFAPI_UE_INTERFACE) | grep inet | awk '{print $$2}' | awk -F '/' '{print $$1}' | tail -n 1) 114 | E2T_NODEPORT_INTERFACE := e2t_e2_if 115 | E2T_NODEPORT_IPADDR := 192.168.200.11/24 116 | E2_F1_BRIDGE_NAME := br-e2f1-net 117 | 118 | # For routing configuarion 119 | ENB_SUBNET := 192.168.251.0/24 120 | ENB_GATEWAY := 192.168.251.1/24 121 | ACCESS_SUBNET := 192.168.252.0/24 122 | UPF_ACCESS_NET_IP := 192.168.252.3/24 123 | ACCESS_GATEWAY := 192.168.252.1/24 124 | CORE_SUBNET := 192.168.250.0/24 125 | UPF_CORE_NET_IP := 192.168.250.3/24 126 | CORE_GATEWAY := 192.168.250.1/24 127 | OAI_ENB_NET_IP := 192.168.251.5/24 128 | OAI_MACHINE_IP := 192.168.254.1/24 # It's dummy IP address. It should be changed to appropriate routable IP address for OAI machine 129 | OAI_ENB_NET_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') 130 | OMEC_ENB_NET_IP := 192.168.251.4/24 131 | OMEC_DEFAULT_INTERFACE := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') 132 | OMEC_MACHINE_IP := 192.168.254.2/24 # It's dummy IP address. It should be changed to appropriate routable IP address for OMEC machine 133 | RIC_MACHINE_IP := 192.168.254.3/24 # It's dummy IP address. It should be changed to appropriate routable IP address for RIC machine 134 | RIC_DEFAULT_IP := $(shell ip -4 route list default | awk -F 'dev' '{ print $$2; exit }' | awk '{ print $$1 }') 135 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # SDRAN-in-a-Box (RiaB) 8 | SDRAN-in-a-Box (RiaB) is a SD-RAN cluster which is able to operate within a single host machine . 9 | It provides a development/test environment for developers/users in ONF SD-RAN community. 10 | RiaB deploys SD-RAN infrastructure - the EPC ([OMEC](https://github.com/omec-project)), emulated RAN (CU/DU/UE), and ONOS RAN Intelligent Controller (ONOS RIC) services - over Kubernetes. 11 | On top of the SD-RAN infrastructure, we can conduct end-to-end tests in terms of the user plane and the SD-RAN control plane. 12 | 13 | ## Features 14 | * Installs Kubernetes and Helm that are the required infrastructure for SD-RAN services 15 | * Provides one of three choices to emulate/simulate Radio Access Networks (RANs) 16 | * RAN-Simulator 17 | * Simulates multiple E2 nodes (CU-CP/DU/RU) and UEs 18 | * Generates SD-RAN control plane messages 19 | * Does not support the LTE traffic 20 | * OMEC / CU-CP / OAI nFAPI emulator for DU/UE 21 | * Completely runs OMEC, a 4G/LTE core network - not emulation 22 | * Completely runs CU-CP, which generates SD-RAN control plane messages - not emulation 23 | * Emulates DU and UEs (up to three UEs) with OAI nAFPI emulator, which generate LTE control and user plane traffic 24 | * OMEC / CU-CP / OAI DU and UE with USRP hardware and/or LTE smartphones 25 | * Completely runs OMEC, a 4G/LTE core network - not emulation 26 | * Completely runs CU-CP, which generates SD-RAN control plane messages - not emulation 27 | * Completely runs OAI DU together with the CU-CP and a USRP device to open a cell - Software Defined Radio (SDR) device-based emulation which commercial LTE phones can attach 28 | * Completely runs OAI UE with a USRP device to attach the cell the CU-CP and OAI DU opens 29 | * Support End-to-End (E2E) connectivity test 30 | * The user plane E2E test 31 | * Works with CU-CP / OAI nFAPI emulator and CU-CP / OAI DU and UE with USRP hardware cases, since RAN-Sim does not support the data traffic 32 | * The SD-RAN control plane E2E test 33 | * Works with xAPPs such as onos-kpimon, onos-pci, onos-mlb and onos-mho 34 | 35 | ## RiaB versions and options 36 | 37 | ### Versions 38 | RiaB has three versions: **latest**, **master-stable**, **dev**, and each release/tag such as **v1.0.0**, **v1.1.0**, **v1.1.1**, and **v1.2.0**. 39 | 40 | #### Latest version 41 | The *latest* version of RiaB deploys latest Helm charts and latest Docker container images. 42 | 43 | #### Master-stable version 44 | The *master-stable* version of RiaB deploys latest Helm charts but not latest Docker container images. 45 | It deploys the Docker containers according to the image tag described in each Helm chart. 46 | 47 | #### Release/tag versions 48 | The release/tag version such as *v1.0.0*, *v1.1.0*, *v1.1.1*, and *v1.2.0* deployes a specific SD-RAN release version of Helm charts and Docker container images. 49 | 50 | #### Dev version 51 | The *dev* version deploys Helm charts in the `~/helm-charts/sdran-helm-charts` directory and Docker container images `sdran-in-a-box-values.yaml` file. 52 | All other versions initially change the `~/helm-charts/sdran-helm-charts` branch to the specific version. 53 | For example, the *latest* version and *master-stable* version change the the `~/helm-charts/sdran-helm-charts` branch to `master`, 54 | while the *v1.0.0*, *v1.1.0*, *v1.1.1*, and *v1.2.0* versions change that branch to *v1.0.0*, *v1.1.0*, *v1.1.1*, and *v1.2.0*, respectively. 55 | If we change some Helm chart code in `~/helm-charts/sdran-helm-charts` directory for a test, the above versions will reset to the *master* or a specific version branch. 56 | However, since the *dev* option just uses the Helm chart in `~/helm-charts/sdran-helm-charts` as is, we can test the Helm chart chages. 57 | Also, once we specify image tags in the `sdran-in-a-box-values.yaml` files, this version deploys the Docker containers with the Helm chart change. 58 | 59 | ### Options 60 | RiaB also has four options: **ONOS RIC with OAI nFAPI emulator**, **ONOS RIC with RAN-Simulator**, **ONOS RIC with OAI and USRP devices**, and **Facebook-AirHop xAPP use case**. 61 | 62 | #### ONOS RIC with OAI nFAPI emulator option 63 | The *ONOS RIC with OAAI nFAPI emulator* option deploys ONOS RIC services (i.e., Atomix, onos-operator, onos-topo, onos-config, onos-cli, onos-e2t, onos-e2sub, etc) with OMEC, CU-CP, and OAI nFAPI emulator. 64 | It supports E2E connectivities on the data plane and SD-RAN control plane. 65 | The data plane is running without the real radio signal, but nFAPI. 66 | 67 | #### ONOS RIC with RAN-Simulator option 68 | The *ONOS RIC with RAN-Simulator* option deploys ONOS RIC services with RAN-Simulator. 69 | It supports an E2E connectivity on the SD-RAN control plane. 70 | 71 | #### ONOS RIC with OAI and USRP devices option 72 | The *ONOS RIC with OAI and USRP devices* option deploys ONOS RIC services with OMEC, CU-CP, OAI DU, and OAI UE with USRP devices. 73 | It supports E2E connectivities on the data plane and SD-RAN control plane. 74 | The data plane is running with the real radio signal, so that we can also test with commercial LTE smartphones. 75 | 76 | #### Facebook-AirHop use case option 77 | The *Facebook-AirHop use case* option is similar to the *ONOS RIC with RAN-Simulator* option. 78 | The only difference is the PCI xAPP. 79 | This option deploys the PCI xAPP from Facebook-AirHop, while *ONOS RIC with RAN-Simulator* option uses ONF ONOS-PCI xAPP. 80 | 81 | 82 | ## Detailed information 83 | See [docs](docs) directory for details of RiaB. 84 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 1.4.0 2 | -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-master-stable.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | multiUpfs: true 17 | pfcp: true 18 | jsonCfgFiles: 19 | subscriber_mapping.json: 20 | subscriber-selection-rules: 21 | - priority: 5 22 | keys: 23 | serving-plmn: 24 | mcc: 208 25 | mnc: 10 26 | tac: 1 27 | imsi-range: 28 | from: 200000000000000 29 | to: 299999999999999 30 | selected-apn-profile: apn-profile1 31 | selected-qos-profile: qos-profile1 32 | selected-access-profile: 33 | - access-all 34 | selected-user-plane-profile: user-plane1 35 | - priority: 10 36 | keys: 37 | match-all: true 38 | selected-apn-profile: apn-profile1 39 | selected-qos-profile: qos-profile1 40 | selected-access-profile: 41 | - access-all 42 | selected-user-plane-profile: user-plane1 43 | apn-profiles: 44 | apn-profile1: 45 | apn-name: internet 46 | usage: 1 47 | network: lbo 48 | gx_enabled: true 49 | dns_primary: 8.8.8.4 50 | dns_secondary: 8.8.8.8 51 | mtu: 1460 52 | ueIpPool: 53 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 54 | upf: 55 | privileged: true 56 | enb: 57 | subnet: 192.168.251.0/24 58 | access: 59 | gateway: 192.168.252.1 60 | ip: 192.168.252.3/24 61 | core: 62 | gateway: 192.168.250.1 63 | ip: 192.168.250.3/24 64 | name: "oaisim" 65 | sriov: 66 | enabled: false 67 | hugepage: 68 | enabled: false 69 | cniPlugin: simpleovs 70 | ipam: static 71 | cfgFiles: 72 | upf.json: 73 | mode: af_packet 74 | mme: 75 | cfgFiles: 76 | config.json: 77 | mme: 78 | mcc: 79 | dig1: 2 80 | dig2: 0 81 | dig3: 8 82 | mnc: 83 | dig1: 0 84 | dig2: 1 85 | dig3: -1 86 | apnlist: 87 | internet: "spgwc" 88 | plmnlist: 89 | plmn1: "mcc=315,mnc=010" 90 | plmn2: "mcc=208,mnc=01" 91 | hss: 92 | bootstrap: 93 | users: 94 | - apn: "internet" 95 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 96 | opc: "d4416644f6154936193433dd20a0ace0" 97 | sqn: 96 98 | imsiStart: "208014567891201" 99 | msisdnStart: "1122334455" 100 | count: 10 101 | mmes: 102 | - id: 1 103 | mme_identity: mme.riab.svc.cluster.local 104 | mme_realm: riab.svc.cluster.local 105 | isdn: "19136246000" 106 | unreachability: 1 107 | oai-enb-cu: 108 | networks: 109 | f1: 110 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 111 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 112 | s1mme: 113 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 114 | s1u: 115 | interface: enb 116 | oai-enb-du: 117 | mode: nfapi #or local_L1 for USRP and BasicSim 118 | networks: 119 | f1: 120 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 121 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 122 | nfapi: 123 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 124 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 125 | oai-ue: 126 | numDevices: 1 # support up to 3 127 | networks: 128 | nfapi: 129 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 130 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 131 | onos-e2t: 132 | enabled: "yes" 133 | networks: 134 | e2: 135 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 136 | port: 36421 137 | 138 | # for the development, we can use the custom images 139 | # For ONOS-RIC 140 | # onos-topo: 141 | # image: 142 | # pullPolicy: IfNotPresent 143 | # repository: onosproject/onos-topo 144 | # tag: latest 145 | # logging: 146 | # loggers: 147 | # root: 148 | # level: info 149 | # onos-uenib: 150 | # image: 151 | # pullPolicy: IfNotPresent 152 | # repository: onosproject/onos-uenib 153 | # tag: latest 154 | # logging: 155 | # loggers: 156 | # root: 157 | # level: info 158 | # onos-config: 159 | # image: 160 | # pullPolicy: IfNotPresent 161 | # repository: onosproject/onos-config 162 | # tag: latest 163 | # logging: 164 | # loggers: 165 | # root: 166 | # level: info 167 | # onos-e2t: 168 | # service: 169 | # external: 170 | # enabled: true 171 | # e2: 172 | # nodePort: 36421 173 | # image: 174 | # pullPolicy: IfNotPresent 175 | # repository: onosproject/onos-e2t 176 | # tag: latest 177 | # logging: 178 | # loggers: 179 | # root: 180 | # level: info 181 | # onos-cli: 182 | # image: 183 | # pullPolicy: IfNotPresent 184 | # repository: onosproject/onos-cli 185 | # tag: latest 186 | # logging: 187 | # loggers: 188 | # root: 189 | # level: info 190 | # ran-simulator: 191 | # image: 192 | # pullPolicy: IfNotPresent 193 | # repository: onosproject/ran-simulator 194 | # tag: latest 195 | # pci: 196 | # modelName: "model" 197 | # metricName: "metrics" 198 | # logging: 199 | # loggers: 200 | # root: 201 | # level: info 202 | # onos-kpimon: 203 | # image: 204 | # pullPolicy: IfNotPresent 205 | # repository: onosproject/onos-kpimon 206 | # tag: latest 207 | # logging: 208 | # loggers: 209 | # root: 210 | # level: info 211 | # onos-pci: 212 | # image: 213 | # pullPolicy: IfNotPresent 214 | # repository: onosproject/onos-pci 215 | # tag: latest 216 | # logging: 217 | # loggers: 218 | # root: 219 | # level: info 220 | # onos-mlb: 221 | # image: 222 | # pullPolicy: IfNotPresent 223 | # repository: onosproject/onos-mlb 224 | # tag: latest 225 | # logging: 226 | # loggers: 227 | # root: 228 | # level: info 229 | # config: 230 | # mlb: 231 | # e2tEndpoint: "onos-e2t:5150" 232 | # thresholds: 233 | # overload: 100 234 | # target: 0 235 | # config_json: 236 | # controller: 237 | # interval: 10 238 | # onos-mho: 239 | # image: 240 | # pullPolicy: IfNotPresent 241 | # repository: onosproject/onos-mho 242 | # tag: latest 243 | # logging: 244 | # loggers: 245 | # root: 246 | # level: info 247 | # config: 248 | # mho: 249 | # e2tEndpoint: "onos-e2t:5150" 250 | # config_json: 251 | # reportingPeriod: 1000 252 | # periodic: true 253 | # uponRcvMeasReport: true 254 | # uponChangeRrcStatus: true 255 | # A3OffsetRange: 0 256 | # HysteresisRange: 0 257 | # CellIndividualOffset: 0 258 | # FrequencyOffset: 0 259 | # TimeToTrigger: 0 260 | # onos-rsm: 261 | # image: 262 | # repository: onosproject/onos-rsm 263 | # tag: latest 264 | # pullPolicy: IfNotPresent 265 | # fb-ah-xapp: 266 | # image: 267 | # repository: onosproject/fb-ah-xapp 268 | # tag: 0.0.4 269 | # pullPolicy: IfNotPresent 270 | # fb-kpimon-xapp: 271 | # image: 272 | # repository: onosproject/fb-kpimon-xapp 273 | # tag: 0.0.2 274 | # pullPolicy: IfNotPresent 275 | # fb-ah-gui: 276 | # image: 277 | # repository: onosproject/fb-ah-gui 278 | # tag: 0.0.2 279 | # pullPolicy: IfNotPresent 280 | # ah-eson-test-server: 281 | # image: 282 | # repository: onosproject/ah-eson-test-server 283 | # tag: 0.0.2 284 | # pullPolicy: IfNotPresent 285 | 286 | 287 | # For OMEC & OAI 288 | images: 289 | pullPolicy: IfNotPresent 290 | tags: 291 | # For OMEC - Those images are stable image for RiaB 292 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 293 | # init: docker.io/omecproject/pod-init:1.0.0 294 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 295 | hssdb: docker.io/onosproject/riab-hssdb:master-9de5dba 296 | hss: docker.io/onosproject/riab-hss:master-9de5dba 297 | mme: docker.io/onosproject/riab-nucleus-mme:master-9e2bf16 298 | spgwc: docker.io/onosproject/riab-spgw:master-d8b0987-onfvm-1 299 | pcrf: docker.io/onosproject/riab-pcrf:pcrf-b29af70 300 | pcrfdb: docker.io/onosproject/riab-pcrfdb:pcrf-b29af70 301 | bess: docker.io/onosproject/riab-bess-upf:master-635b4d4-onfvm-1 302 | pfcpiface: docker.io/onosproject/riab-pfcpiface:master-635b4d4-onfvm-1 303 | # For OAI 304 | # oaicucp: docker.io/onosproject/oai-enb-cu:latest 305 | # oaidu: docker.io/onosproject/oai-enb-du:latest 306 | # oaiue: docker.io/onosproject/oai-ue:latest 307 | 308 | # For SD-RAN Umbrella chart: 309 | # ONOS-KPIMON xAPP and ONOS-UENIB are imported in the RiaB by default 310 | # ONOS-PCI xApp is imported in the RiaB when using OPT=ransim and OPT=mlb 311 | # ONOS-MLB xApp is imported in the RiaB when using OPT=mlb 312 | # ONOS-MHO xApp is imported in the RiaB when using OPT=mho 313 | import: 314 | onos-uenib: 315 | enabled: true 316 | onos-kpimon: 317 | enabled: true 318 | onos-pci: 319 | enabled: false 320 | onos-mlb: 321 | enabled: false 322 | onos-mho: 323 | enabled: false 324 | # Other ONOS-RIC micro-services 325 | # onos-topo: 326 | # enabled: true 327 | # onos-e2t: 328 | # enabled: true 329 | # onos-e2sub: 330 | # enabled: true 331 | # onos-o1t: 332 | # enabled: false 333 | # onos-config: 334 | # enabled: true 335 | # onos-sdran-cli: 336 | # enabled: true 337 | # ran-simulator chart is automatically imported when pushing ransim option 338 | # ran-simulator: 339 | # enabled: false 340 | # onos-gui: 341 | # enabled: false 342 | # nem-monitoring: 343 | # enabled: false 344 | # fb-ah-xapp, fb-ah-gui, fb-kpimon-xapp and ah-eson-test-server are automatically imported when pushing fbc-pci option 345 | # fb-ah-xapp: 346 | # enabled: false 347 | # fb-ah-gui: 348 | # enabled: false 349 | # ah-eson-test-server: 350 | # enabled: false 351 | # fb-kpimon-xapp: 352 | # enabled: false 353 | -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-master-v1.3.0.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | multiUpfs: true 17 | pfcp: true 18 | jsonCfgFiles: 19 | subscriber_mapping.json: 20 | subscriber-selection-rules: 21 | - priority: 5 22 | keys: 23 | serving-plmn: 24 | mcc: 208 25 | mnc: 10 26 | tac: 1 27 | imsi-range: 28 | from: 200000000000000 29 | to: 299999999999999 30 | selected-apn-profile: apn-profile1 31 | selected-qos-profile: qos-profile1 32 | selected-access-profile: 33 | - access-all 34 | selected-user-plane-profile: user-plane1 35 | - priority: 10 36 | keys: 37 | match-all: true 38 | selected-apn-profile: apn-profile1 39 | selected-qos-profile: qos-profile1 40 | selected-access-profile: 41 | - access-all 42 | selected-user-plane-profile: user-plane1 43 | apn-profiles: 44 | apn-profile1: 45 | apn-name: internet 46 | usage: 1 47 | network: lbo 48 | gx_enabled: true 49 | dns_primary: 8.8.8.4 50 | dns_secondary: 8.8.8.8 51 | mtu: 1460 52 | ueIpPool: 53 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 54 | upf: 55 | privileged: true 56 | enb: 57 | subnet: 192.168.251.0/24 58 | access: 59 | gateway: 192.168.252.1 60 | ip: 192.168.252.3/24 61 | core: 62 | gateway: 192.168.250.1 63 | ip: 192.168.250.3/24 64 | name: "oaisim" 65 | sriov: 66 | enabled: false 67 | hugepage: 68 | enabled: false 69 | cniPlugin: simpleovs 70 | ipam: static 71 | cfgFiles: 72 | upf.json: 73 | mode: af_packet 74 | mme: 75 | cfgFiles: 76 | config.json: 77 | mme: 78 | mcc: 79 | dig1: 2 80 | dig2: 0 81 | dig3: 8 82 | mnc: 83 | dig1: 0 84 | dig2: 1 85 | dig3: -1 86 | apnlist: 87 | internet: "spgwc" 88 | plmnlist: 89 | plmn1: "mcc=315,mnc=010" 90 | plmn2: "mcc=208,mnc=01" 91 | hss: 92 | bootstrap: 93 | users: 94 | - apn: "internet" 95 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 96 | opc: "d4416644f6154936193433dd20a0ace0" 97 | sqn: 96 98 | imsiStart: "208014567891201" 99 | msisdnStart: "1122334455" 100 | count: 10 101 | mmes: 102 | - id: 1 103 | mme_identity: mme.riab.svc.cluster.local 104 | mme_realm: riab.svc.cluster.local 105 | isdn: "19136246000" 106 | unreachability: 1 107 | oai-enb-cu: 108 | networks: 109 | f1: 110 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 111 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 112 | s1mme: 113 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 114 | s1u: 115 | interface: enb 116 | oai-enb-du: 117 | mode: nfapi #or local_L1 for USRP and BasicSim 118 | networks: 119 | f1: 120 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 121 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 122 | nfapi: 123 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 124 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 125 | oai-ue: 126 | numDevices: 1 # support up to 3 127 | networks: 128 | nfapi: 129 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 130 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 131 | onos-e2t: 132 | enabled: "yes" 133 | networks: 134 | e2: 135 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 136 | port: 36421 137 | 138 | # for the development, we can use the custom images 139 | # For ONOS-RIC 140 | # onos-topo: 141 | # image: 142 | # pullPolicy: IfNotPresent 143 | # repository: onosproject/onos-topo 144 | # tag: latest 145 | # logging: 146 | # loggers: 147 | # root: 148 | # level: info 149 | # onos-uenib: 150 | # image: 151 | # pullPolicy: IfNotPresent 152 | # repository: onosproject/onos-uenib 153 | # tag: latest 154 | # logging: 155 | # loggers: 156 | # root: 157 | # level: info 158 | # onos-config: 159 | # image: 160 | # pullPolicy: IfNotPresent 161 | # repository: onosproject/onos-config 162 | # tag: latest 163 | # logging: 164 | # loggers: 165 | # root: 166 | # level: info 167 | # onos-e2t: 168 | # service: 169 | # external: 170 | # enabled: true 171 | # e2: 172 | # nodePort: 36421 173 | # image: 174 | # pullPolicy: IfNotPresent 175 | # repository: onosproject/onos-e2t 176 | # tag: latest 177 | # logging: 178 | # loggers: 179 | # root: 180 | # level: info 181 | # onos-cli: 182 | # image: 183 | # pullPolicy: IfNotPresent 184 | # repository: onosproject/onos-cli 185 | # tag: latest 186 | # logging: 187 | # loggers: 188 | # root: 189 | # level: info 190 | # ran-simulator: 191 | # image: 192 | # pullPolicy: IfNotPresent 193 | # repository: onosproject/ran-simulator 194 | # tag: latest 195 | # pci: 196 | # modelName: "model" 197 | # metricName: "metrics" 198 | # logging: 199 | # loggers: 200 | # root: 201 | # level: info 202 | # onos-kpimon: 203 | # image: 204 | # pullPolicy: IfNotPresent 205 | # repository: onosproject/onos-kpimon 206 | # tag: latest 207 | # logging: 208 | # loggers: 209 | # root: 210 | # level: info 211 | # onos-pci: 212 | # image: 213 | # pullPolicy: IfNotPresent 214 | # repository: onosproject/onos-pci 215 | # tag: latest 216 | # logging: 217 | # loggers: 218 | # root: 219 | # level: info 220 | # onos-mlb: 221 | # image: 222 | # pullPolicy: IfNotPresent 223 | # repository: onosproject/onos-mlb 224 | # tag: latest 225 | # logging: 226 | # loggers: 227 | # root: 228 | # level: info 229 | # config: 230 | # mlb: 231 | # e2tEndpoint: "onos-e2t:5150" 232 | # thresholds: 233 | # overload: 100 234 | # target: 0 235 | # config_json: 236 | # controller: 237 | # interval: 10 238 | # onos-mho: 239 | # image: 240 | # pullPolicy: IfNotPresent 241 | # repository: onosproject/onos-mho 242 | # tag: latest 243 | # logging: 244 | # loggers: 245 | # root: 246 | # level: info 247 | # config: 248 | # mho: 249 | # e2tEndpoint: "onos-e2t:5150" 250 | # config_json: 251 | # reportingPeriod: 1000 252 | # periodic: true 253 | # uponRcvMeasReport: true 254 | # uponChangeRrcStatus: true 255 | # A3OffsetRange: 0 256 | # HysteresisRange: 0 257 | # CellIndividualOffset: 0 258 | # FrequencyOffset: 0 259 | # TimeToTrigger: 0 260 | # onos-rsm: 261 | # image: 262 | # repository: onosproject/onos-rsm 263 | # tag: latest 264 | # pullPolicy: IfNotPresent 265 | # fb-ah-xapp: 266 | # image: 267 | # repository: onosproject/fb-ah-xapp 268 | # tag: 0.0.4 269 | # pullPolicy: IfNotPresent 270 | # fb-kpimon-xapp: 271 | # image: 272 | # repository: onosproject/fb-kpimon-xapp 273 | # tag: 0.0.2 274 | # pullPolicy: IfNotPresent 275 | # fb-ah-gui: 276 | # image: 277 | # repository: onosproject/fb-ah-gui 278 | # tag: 0.0.2 279 | # pullPolicy: IfNotPresent 280 | # ah-eson-test-server: 281 | # image: 282 | # repository: onosproject/ah-eson-test-server 283 | # tag: 0.0.2 284 | # pullPolicy: IfNotPresent 285 | 286 | 287 | # For OMEC & OAI 288 | images: 289 | pullPolicy: IfNotPresent 290 | tags: 291 | # For OMEC - Those images are stable image for RiaB 292 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 293 | # init: docker.io/omecproject/pod-init:1.0.0 294 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 295 | hssdb: docker.io/onosproject/riab-hssdb:master-9de5dba 296 | hss: docker.io/onosproject/riab-hss:master-9de5dba 297 | mme: docker.io/onosproject/riab-nucleus-mme:master-9e2bf16 298 | spgwc: docker.io/onosproject/riab-spgw:master-d8b0987-onfvm-1 299 | pcrf: docker.io/onosproject/riab-pcrf:pcrf-b29af70 300 | pcrfdb: docker.io/onosproject/riab-pcrfdb:pcrf-b29af70 301 | bess: docker.io/onosproject/riab-bess-upf:master-635b4d4-onfvm-1 302 | pfcpiface: docker.io/onosproject/riab-pfcpiface:master-635b4d4-onfvm-1 303 | # For OAI 304 | # oaicucp: docker.io/onosproject/oai-enb-cu:latest 305 | # oaidu: docker.io/onosproject/oai-enb-du:latest 306 | # oaiue: docker.io/onosproject/oai-ue:latest 307 | 308 | # For SD-RAN Umbrella chart: 309 | # ONOS-KPIMON xAPP and ONOS-UENIB are imported in the RiaB by default 310 | # ONOS-PCI xApp is imported in the RiaB when using OPT=ransim and OPT=mlb 311 | # ONOS-MLB xApp is imported in the RiaB when using OPT=mlb 312 | # ONOS-MHO xApp is imported in the RiaB when using OPT=mho 313 | import: 314 | onos-uenib: 315 | enabled: true 316 | onos-kpimon: 317 | enabled: true 318 | onos-pci: 319 | enabled: false 320 | onos-mlb: 321 | enabled: false 322 | onos-mho: 323 | enabled: false 324 | # Other ONOS-RIC micro-services 325 | # onos-topo: 326 | # enabled: true 327 | # onos-e2t: 328 | # enabled: true 329 | # onos-e2sub: 330 | # enabled: true 331 | # onos-o1t: 332 | # enabled: false 333 | # onos-config: 334 | # enabled: true 335 | # onos-sdran-cli: 336 | # enabled: true 337 | # ran-simulator chart is automatically imported when pushing ransim option 338 | # ran-simulator: 339 | # enabled: false 340 | # onos-gui: 341 | # enabled: false 342 | # nem-monitoring: 343 | # enabled: false 344 | # fb-ah-xapp, fb-ah-gui, fb-kpimon-xapp and ah-eson-test-server are automatically imported when pushing fbc-pci option 345 | # fb-ah-xapp: 346 | # enabled: false 347 | # fb-ah-gui: 348 | # enabled: false 349 | # ah-eson-test-server: 350 | # enabled: false 351 | # fb-kpimon-xapp: 352 | # enabled: false 353 | -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-values-v1.0.0.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | pfcp: true 17 | ueIpPool: 18 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 19 | upf: 20 | name: "oaisim" 21 | sriov: 22 | enabled: false 23 | hugepage: 24 | enabled: false 25 | cniPlugin: simpleovs 26 | ipam: static 27 | cfgFiles: 28 | upf.json: 29 | mode: af_packet 30 | mme: 31 | cfgFiles: 32 | config.json: 33 | mme: 34 | mcc: 35 | dig1: 2 36 | dig2: 0 37 | dig3: 8 38 | mnc: 39 | dig1: 0 40 | dig2: 1 41 | dig3: -1 42 | apnlist: 43 | internet: "spgwc" 44 | hss: 45 | bootstrap: 46 | users: 47 | - apn: "internet" 48 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 49 | opc: "d4416644f6154936193433dd20a0ace0" 50 | sqn: 96 51 | imsiStart: "208014567891201" 52 | msisdnStart: "1122334455" 53 | count: 10 54 | mmes: 55 | - id: 1 56 | mme_identity: mme.riab.svc.cluster.local 57 | mme_realm: riab.svc.cluster.local 58 | isdn: "19136246000" 59 | unreachability: 1 60 | oai-enb-cu: 61 | networks: 62 | f1: 63 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 64 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 65 | s1mme: 66 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 67 | s1u: 68 | interface: enb 69 | oai-enb-du: 70 | mode: nfapi #or local_L1 for USRP and BasicSim 71 | networks: 72 | f1: 73 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 74 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 75 | nfapi: 76 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 77 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 78 | oai-ue: 79 | networks: 80 | nfapi: 81 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 82 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 83 | onos-e2t: 84 | enabled: "yes" 85 | networks: 86 | e2: 87 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 88 | port: 36421 89 | 90 | # for the development, we can use the custom images 91 | # For ONOS-RIC 92 | #onos-topo: 93 | # image: 94 | # pullPolicy: Always 95 | # repository: onosproject/onos-topo 96 | # tag: latest 97 | # logging: 98 | # loggers: 99 | # root: 100 | # level: info 101 | #onos-config: 102 | # image: 103 | # pullPolicy: Always 104 | # repository: onosproject/onos-config 105 | # tag: latest 106 | # logging: 107 | # loggers: 108 | # root: 109 | # level: info 110 | #onos-e2t: 111 | # image: 112 | # pullPolicy: Always 113 | # repository: onosproject/onos-e2t 114 | # tag: latest 115 | # servicemodels: 116 | # - name: e2sm_kpm 117 | # version: 1.0.0 118 | # image: 119 | # repository: onosproject/service-model-docker-e2sm_kpm-1.0.0 120 | # tag: v0.6.5 121 | # pullPolicy: IfNotPresent 122 | # - name: e2sm_ni 123 | # version: 1.0.0 124 | # image: 125 | # repository: onosproject/service-model-docker-e2sm_ni-1.0.0 126 | # tag: v0.6.5 127 | # pullPolicy: IfNotPresent 128 | # logging: 129 | # loggers: 130 | # root: 131 | # level: info 132 | #onos-e2sub: 133 | # image: 134 | # pullPolicy: Always 135 | # repository: onosproject/onos-e2sub 136 | # tag: latest 137 | # logging: 138 | # loggers: 139 | # root: 140 | # level: info 141 | #onos-sdran-cli: 142 | # image: 143 | # pullPolicy: Always 144 | # repository: onosproject/onos-sdran-cli 145 | # tag: latest 146 | # logging: 147 | # loggers: 148 | # root: 149 | # level: info 150 | #onos-kpimon: 151 | # image: 152 | # pullPolicy: Always 153 | # repository: onosproject/onos-kpimon 154 | # tag: latest 155 | # logging: 156 | # loggers: 157 | # root: 158 | # level: info 159 | 160 | # For OMEC & OAI 161 | images: 162 | pullPolicy: IfNotPresent 163 | tags: 164 | # For OMEC - Those images are stable image for RiaB 165 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 166 | # init: docker.io/omecproject/pod-init:1.0.0 167 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 168 | hssdb: docker.io/onosproject/riab-hssdb:v1.0.0 169 | hss: docker.io/onosproject/riab-hss:v1.0.0 170 | mme: docker.io/onosproject/riab-nucleus-mme:v1.0.0 171 | spgwc: docker.io/onosproject/riab-spgw:v1.0.0-onfvm-1 172 | pcrf: docker.io/onosproject/riab-pcrf:v1.0.0 173 | pcrfdb: docker.io/onosproject/riab-pcrfdb:v1.0.0 174 | bess: docker.io/onosproject/riab-bess-upf:v1.0.0-onfvm-1 175 | pfcpiface: docker.io/onosproject/riab-pfcpiface:v1.0.0-onfvm-1 176 | # For OAI 177 | # oaicucp: docker.io/onosproject/oai-enb-cu:latest 178 | # oaidu: docker.io/onosproject/oai-enb-du:latest 179 | # oaiue: docker.io/onosproject/oai-enb-ue:latest 180 | 181 | # For SD-RAN Umbrella chart: 182 | # ONOS-KPIMON xAPP is imported in the RiaB by default 183 | import: 184 | onos-kpimon: 185 | enabled: true 186 | # Other ONOS-RIC micro-services 187 | # onos-topo: 188 | # enabled: true 189 | # onos-e2t: 190 | # enabled: true 191 | # onos-e2sub: 192 | # enabled: true 193 | # onos-o1t: 194 | # enabled: false 195 | # onos-config: 196 | # enabled: true 197 | # onos-sdran-cli: 198 | # enabled: true 199 | # ran-simulator chart is automatically imported when pushing ransim option 200 | # ran-simulator: 201 | # enabled: false 202 | # onos-gui: 203 | # enabled: false 204 | # nem-monitoring: 205 | # enabled: false 206 | -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-values-v1.1.0.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | pfcp: true 17 | ueIpPool: 18 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 19 | upf: 20 | name: "oaisim" 21 | sriov: 22 | enabled: false 23 | hugepage: 24 | enabled: false 25 | cniPlugin: simpleovs 26 | ipam: static 27 | cfgFiles: 28 | upf.json: 29 | mode: af_packet 30 | mme: 31 | cfgFiles: 32 | config.json: 33 | mme: 34 | mcc: 35 | dig1: 2 36 | dig2: 0 37 | dig3: 8 38 | mnc: 39 | dig1: 0 40 | dig2: 1 41 | dig3: -1 42 | apnlist: 43 | internet: "spgwc" 44 | hss: 45 | bootstrap: 46 | users: 47 | - apn: "internet" 48 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 49 | opc: "d4416644f6154936193433dd20a0ace0" 50 | sqn: 96 51 | imsiStart: "208014567891201" 52 | msisdnStart: "1122334455" 53 | count: 10 54 | mmes: 55 | - id: 1 56 | mme_identity: mme.riab.svc.cluster.local 57 | mme_realm: riab.svc.cluster.local 58 | isdn: "19136246000" 59 | unreachability: 1 60 | oai-enb-cu: 61 | networks: 62 | f1: 63 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 64 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 65 | s1mme: 66 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 67 | s1u: 68 | interface: enb 69 | oai-enb-du: 70 | mode: nfapi #or local_L1 for USRP and BasicSim 71 | networks: 72 | f1: 73 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 74 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 75 | nfapi: 76 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 77 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 78 | oai-ue: 79 | numDevices: 1 # support up to 3 80 | networks: 81 | nfapi: 82 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 83 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 84 | onos-e2t: 85 | enabled: "yes" 86 | networks: 87 | e2: 88 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 89 | port: 36421 90 | 91 | # for the development, we can use the custom images 92 | # For ONOS-RIC 93 | onos-topo: 94 | image: 95 | pullPolicy: IfNotPresent 96 | repository: onosproject/onos-topo 97 | tag: v0.7.3 98 | logging: 99 | loggers: 100 | root: 101 | level: info 102 | onos-config: 103 | image: 104 | pullPolicy: IfNotPresent 105 | repository: onosproject/onos-config 106 | tag: v0.7.18 107 | logging: 108 | loggers: 109 | root: 110 | level: info 111 | onos-e2t: 112 | service: 113 | external: 114 | enabled: true 115 | e2: 116 | nodePort: 36421 117 | image: 118 | pullPolicy: IfNotPresent 119 | repository: onosproject/onos-e2t 120 | tag: v0.7.14 121 | logging: 122 | loggers: 123 | root: 124 | level: info 125 | onos-e2sub: 126 | image: 127 | pullPolicy: IfNotPresent 128 | repository: onosproject/onos-e2sub 129 | tag: v0.7.3 130 | logging: 131 | loggers: 132 | root: 133 | level: info 134 | onos-cli: 135 | image: 136 | pullPolicy: IfNotPresent 137 | repository: onosproject/onos-cli 138 | tag: v0.7.11 139 | logging: 140 | loggers: 141 | root: 142 | level: info 143 | ran-simulator: 144 | image: 145 | pullPolicy: IfNotPresent 146 | repository: onosproject/ran-simulator 147 | tag: v0.7.24 148 | logging: 149 | loggers: 150 | root: 151 | level: info 152 | onos-kpimon-v1: 153 | image: 154 | pullPolicy: IfNotPresent 155 | repository: onosproject/onos-kpimon 156 | tag: v0.1.7 157 | logging: 158 | loggers: 159 | root: 160 | level: info 161 | onos-kpimon-v2: 162 | image: 163 | pullPolicy: IfNotPresent 164 | repository: onosproject/onos-kpimon 165 | tag: v0.1.7 166 | logging: 167 | loggers: 168 | root: 169 | level: info 170 | onos-pci: 171 | image: 172 | pullPolicy: IfNotPresent 173 | repository: onosproject/onos-pci 174 | tag: v0.1.2 175 | logging: 176 | loggers: 177 | root: 178 | level: info 179 | fb-ah-xapp: 180 | image: 181 | repository: onosproject/fb-ah-xapp 182 | tag: 0.0.1 183 | pullPolicy: IfNotPresent 184 | fb-ah-gui: 185 | image: 186 | repository: onosproject/fb-ah-gui 187 | tag: 0.0.1 188 | pullPolicy: IfNotPresent 189 | ah-eson-test-server: 190 | image: 191 | repository: onosproject/ah-eson-test-server 192 | tag: 0.0.1 193 | pullPolicy: IfNotPresent 194 | 195 | # For OMEC & OAI 196 | images: 197 | pullPolicy: IfNotPresent 198 | tags: 199 | # For OMEC - Those images are stable image for RiaB 200 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 201 | # init: docker.io/omecproject/pod-init:1.0.0 202 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 203 | hssdb: docker.io/onosproject/riab-hssdb:v1.0.0 204 | hss: docker.io/onosproject/riab-hss:v1.0.0 205 | mme: docker.io/onosproject/riab-nucleus-mme:v1.0.0 206 | spgwc: docker.io/onosproject/riab-spgw:v1.0.0-onfvm-1 207 | pcrf: docker.io/onosproject/riab-pcrf:v1.0.0 208 | pcrfdb: docker.io/onosproject/riab-pcrfdb:v1.0.0 209 | bess: docker.io/onosproject/riab-bess-upf:v1.0.0-onfvm-1 210 | pfcpiface: docker.io/onosproject/riab-pfcpiface:v1.0.0-onfvm-1 211 | # For OAI 212 | oaicucp: docker.io/onosproject/oai-enb-cu:v0.1.4 213 | oaidu: docker.io/onosproject/oai-enb-du:v0.1.4 214 | oaiue: docker.io/onosproject/oai-ue:v0.1.4 215 | 216 | # For SD-RAN Umbrella chart: 217 | # ONOS-KPIMON xAPP is imported in the RiaB by default 218 | import: 219 | onos-kpimon-v1: 220 | enabled: false 221 | onos-kpimon-v2: 222 | enabled: true 223 | onos-pci: 224 | enabled: false 225 | # Other ONOS-RIC micro-services 226 | # onos-topo: 227 | # enabled: true 228 | # onos-e2t: 229 | # enabled: true 230 | # onos-e2sub: 231 | # enabled: true 232 | # onos-o1t: 233 | # enabled: false 234 | # onos-config: 235 | # enabled: true 236 | # onos-sdran-cli: 237 | # enabled: true 238 | # ran-simulator chart is automatically imported when pushing ransim option 239 | # ran-simulator: 240 | # enabled: false 241 | # onos-gui: 242 | # enabled: false 243 | # nem-monitoring: 244 | # enabled: false 245 | # fb-ah-xapp, fb-ah-gui, and ah-eson-test-server are automatically imported when pushing fbc-pci option 246 | # fb-ah-xapp: 247 | # enabled: false 248 | # fb-ah-gui: 249 | # enabled: false 250 | # ah-eson-test-server: 251 | # enabled: false -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-values-v1.1.1.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | pfcp: true 17 | ueIpPool: 18 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 19 | upf: 20 | name: "oaisim" 21 | sriov: 22 | enabled: false 23 | hugepage: 24 | enabled: false 25 | cniPlugin: simpleovs 26 | ipam: static 27 | cfgFiles: 28 | upf.json: 29 | mode: af_packet 30 | mme: 31 | cfgFiles: 32 | config.json: 33 | mme: 34 | mcc: 35 | dig1: 2 36 | dig2: 0 37 | dig3: 8 38 | mnc: 39 | dig1: 0 40 | dig2: 1 41 | dig3: -1 42 | apnlist: 43 | internet: "spgwc" 44 | hss: 45 | bootstrap: 46 | users: 47 | - apn: "internet" 48 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 49 | opc: "d4416644f6154936193433dd20a0ace0" 50 | sqn: 96 51 | imsiStart: "208014567891201" 52 | msisdnStart: "1122334455" 53 | count: 10 54 | mmes: 55 | - id: 1 56 | mme_identity: mme.riab.svc.cluster.local 57 | mme_realm: riab.svc.cluster.local 58 | isdn: "19136246000" 59 | unreachability: 1 60 | oai-enb-cu: 61 | networks: 62 | f1: 63 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 64 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 65 | s1mme: 66 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 67 | s1u: 68 | interface: enb 69 | oai-enb-du: 70 | mode: nfapi #or local_L1 for USRP and BasicSim 71 | networks: 72 | f1: 73 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 74 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 75 | nfapi: 76 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 77 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 78 | oai-ue: 79 | numDevices: 1 # support up to 3 80 | networks: 81 | nfapi: 82 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 83 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 84 | onos-e2t: 85 | enabled: "yes" 86 | networks: 87 | e2: 88 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 89 | port: 36421 90 | 91 | # for the development, we can use the custom images 92 | # For ONOS-RIC 93 | onos-topo: 94 | image: 95 | pullPolicy: IfNotPresent 96 | repository: onosproject/onos-topo 97 | tag: v0.7.3 98 | logging: 99 | loggers: 100 | root: 101 | level: info 102 | onos-config: 103 | image: 104 | pullPolicy: IfNotPresent 105 | repository: onosproject/onos-config 106 | tag: v0.7.18 107 | logging: 108 | loggers: 109 | root: 110 | level: info 111 | onos-e2t: 112 | service: 113 | external: 114 | enabled: true 115 | e2: 116 | nodePort: 36421 117 | image: 118 | pullPolicy: IfNotPresent 119 | repository: onosproject/onos-e2t 120 | tag: v0.7.15 121 | logging: 122 | loggers: 123 | root: 124 | level: info 125 | onos-e2sub: 126 | image: 127 | pullPolicy: IfNotPresent 128 | repository: onosproject/onos-e2sub 129 | tag: v0.7.3 130 | logging: 131 | loggers: 132 | root: 133 | level: info 134 | onos-cli: 135 | image: 136 | pullPolicy: IfNotPresent 137 | repository: onosproject/onos-cli 138 | tag: v0.7.12 139 | logging: 140 | loggers: 141 | root: 142 | level: info 143 | ran-simulator: 144 | image: 145 | pullPolicy: IfNotPresent 146 | repository: onosproject/ran-simulator 147 | tag: v0.7.26 148 | logging: 149 | loggers: 150 | root: 151 | level: info 152 | onos-kpimon-v1: 153 | image: 154 | pullPolicy: IfNotPresent 155 | repository: onosproject/onos-kpimon 156 | tag: v0.1.8 157 | logging: 158 | loggers: 159 | root: 160 | level: info 161 | onos-kpimon-v2: 162 | image: 163 | pullPolicy: IfNotPresent 164 | repository: onosproject/onos-kpimon 165 | tag: v0.1.8 166 | logging: 167 | loggers: 168 | root: 169 | level: info 170 | onos-pci: 171 | image: 172 | pullPolicy: IfNotPresent 173 | repository: onosproject/onos-pci 174 | tag: v0.1.3 175 | logging: 176 | loggers: 177 | root: 178 | level: info 179 | fb-ah-xapp: 180 | image: 181 | repository: onosproject/fb-ah-xapp 182 | tag: 0.0.1 183 | pullPolicy: IfNotPresent 184 | fb-ah-gui: 185 | image: 186 | repository: onosproject/fb-ah-gui 187 | tag: 0.0.1 188 | pullPolicy: IfNotPresent 189 | ah-eson-test-server: 190 | image: 191 | repository: onosproject/ah-eson-test-server 192 | tag: 0.0.1 193 | pullPolicy: IfNotPresent 194 | 195 | # For OMEC & OAI 196 | images: 197 | pullPolicy: IfNotPresent 198 | tags: 199 | # For OMEC - Those images are stable image for RiaB 200 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 201 | # init: docker.io/omecproject/pod-init:1.0.0 202 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 203 | hssdb: docker.io/onosproject/riab-hssdb:v1.0.0 204 | hss: docker.io/onosproject/riab-hss:v1.0.0 205 | mme: docker.io/onosproject/riab-nucleus-mme:v1.0.0 206 | spgwc: docker.io/onosproject/riab-spgw:v1.0.0-onfvm-1 207 | pcrf: docker.io/onosproject/riab-pcrf:v1.0.0 208 | pcrfdb: docker.io/onosproject/riab-pcrfdb:v1.0.0 209 | bess: docker.io/onosproject/riab-bess-upf:v1.0.0-onfvm-1 210 | pfcpiface: docker.io/onosproject/riab-pfcpiface:v1.0.0-onfvm-1 211 | # For OAI 212 | oaicucp: docker.io/onosproject/oai-enb-cu:v0.1.5 213 | oaidu: docker.io/onosproject/oai-enb-du:v0.1.4 214 | oaiue: docker.io/onosproject/oai-ue:v0.1.4 215 | 216 | # For SD-RAN Umbrella chart: 217 | # ONOS-KPIMON xAPP is imported in the RiaB by default 218 | import: 219 | onos-kpimon-v1: 220 | enabled: false 221 | onos-kpimon-v2: 222 | enabled: true 223 | onos-pci: 224 | enabled: false 225 | # Other ONOS-RIC micro-services 226 | # onos-topo: 227 | # enabled: true 228 | # onos-e2t: 229 | # enabled: true 230 | # onos-e2sub: 231 | # enabled: true 232 | # onos-o1t: 233 | # enabled: false 234 | # onos-config: 235 | # enabled: true 236 | # onos-sdran-cli: 237 | # enabled: true 238 | # ran-simulator chart is automatically imported when pushing ransim option 239 | # ran-simulator: 240 | # enabled: false 241 | # onos-gui: 242 | # enabled: false 243 | # nem-monitoring: 244 | # enabled: false 245 | # fb-ah-xapp, fb-ah-gui, and ah-eson-test-server are automatically imported when pushing fbc-pci option 246 | # fb-ah-xapp: 247 | # enabled: false 248 | # fb-ah-gui: 249 | # enabled: false 250 | # ah-eson-test-server: 251 | # enabled: false -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-values-v1.2.0.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | multiUpfs: true 17 | pfcp: true 18 | jsonCfgFiles: 19 | subscriber_mapping.json: 20 | subscriber-selection-rules: 21 | - priority: 5 22 | keys: 23 | serving-plmn: 24 | mcc: 208 25 | mnc: 10 26 | tac: 1 27 | imsi-range: 28 | from: 200000000000000 29 | to: 299999999999999 30 | selected-apn-profile: apn-profile1 31 | selected-qos-profile: qos-profile1 32 | selected-access-profile: 33 | - access-all 34 | selected-user-plane-profile: user-plane1 35 | - priority: 10 36 | keys: 37 | match-all: true 38 | selected-apn-profile: apn-profile1 39 | selected-qos-profile: qos-profile1 40 | selected-access-profile: 41 | - access-all 42 | selected-user-plane-profile: user-plane1 43 | apn-profiles: 44 | apn-profile1: 45 | apn-name: internet 46 | usage: 1 47 | network: lbo 48 | gx_enabled: true 49 | dns_primary: 8.8.8.4 50 | dns_secondary: 8.8.8.8 51 | mtu: 1460 52 | ueIpPool: 53 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 54 | upf: 55 | privileged: true 56 | enb: 57 | subnet: 192.168.251.0/24 58 | access: 59 | gateway: 192.168.252.1 60 | ip: 192.168.252.3/24 61 | core: 62 | gateway: 192.168.250.1 63 | ip: 192.168.250.3/24 64 | name: "oaisim" 65 | sriov: 66 | enabled: false 67 | hugepage: 68 | enabled: false 69 | cniPlugin: simpleovs 70 | ipam: static 71 | cfgFiles: 72 | upf.json: 73 | mode: af_packet 74 | mme: 75 | cfgFiles: 76 | config.json: 77 | mme: 78 | mcc: 79 | dig1: 2 80 | dig2: 0 81 | dig3: 8 82 | mnc: 83 | dig1: 0 84 | dig2: 1 85 | dig3: -1 86 | apnlist: 87 | internet: "spgwc" 88 | plmnlist: 89 | plmn1: "mcc=315,mnc=010" 90 | plmn2: "mcc=208,mnc=01" 91 | hss: 92 | bootstrap: 93 | users: 94 | - apn: "internet" 95 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 96 | opc: "d4416644f6154936193433dd20a0ace0" 97 | sqn: 96 98 | imsiStart: "208014567891201" 99 | msisdnStart: "1122334455" 100 | count: 10 101 | mmes: 102 | - id: 1 103 | mme_identity: mme.riab.svc.cluster.local 104 | mme_realm: riab.svc.cluster.local 105 | isdn: "19136246000" 106 | unreachability: 1 107 | oai-enb-cu: 108 | networks: 109 | f1: 110 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 111 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 112 | s1mme: 113 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 114 | s1u: 115 | interface: enb 116 | oai-enb-du: 117 | mode: nfapi #or local_L1 for USRP and BasicSim 118 | networks: 119 | f1: 120 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 121 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 122 | nfapi: 123 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 124 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 125 | oai-ue: 126 | numDevices: 1 # support up to 3 127 | networks: 128 | nfapi: 129 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 130 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 131 | onos-e2t: 132 | enabled: "yes" 133 | networks: 134 | e2: 135 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 136 | port: 36421 137 | 138 | # for the development, we can use the custom images 139 | # For ONOS-RIC 140 | onos-topo: 141 | image: 142 | pullPolicy: IfNotPresent 143 | repository: onosproject/onos-topo 144 | tag: v0.7.10 145 | logging: 146 | loggers: 147 | root: 148 | level: info 149 | onos-uenib: 150 | image: 151 | pullPolicy: IfNotPresent 152 | repository: onosproject/onos-uenib 153 | tag: v0.1.0 154 | logging: 155 | loggers: 156 | root: 157 | level: info 158 | onos-config: 159 | image: 160 | pullPolicy: IfNotPresent 161 | repository: onosproject/onos-config 162 | tag: v0.8.4 163 | logging: 164 | loggers: 165 | root: 166 | level: info 167 | onos-e2t: 168 | service: 169 | external: 170 | enabled: true 171 | e2: 172 | nodePort: 36421 173 | image: 174 | pullPolicy: IfNotPresent 175 | repository: onosproject/onos-e2t 176 | tag: v0.7.38 177 | logging: 178 | loggers: 179 | root: 180 | level: info 181 | onos-cli: 182 | image: 183 | pullPolicy: IfNotPresent 184 | repository: onosproject/onos-cli 185 | tag: v0.7.33 186 | logging: 187 | loggers: 188 | root: 189 | level: info 190 | ran-simulator: 191 | image: 192 | pullPolicy: IfNotPresent 193 | repository: onosproject/ran-simulator 194 | tag: v0.7.56 195 | pci: 196 | modelName: "model" 197 | metricName: "metrics" 198 | logging: 199 | loggers: 200 | root: 201 | level: info 202 | onos-kpimon: 203 | image: 204 | pullPolicy: IfNotPresent 205 | repository: onosproject/onos-kpimon 206 | tag: v0.1.26 207 | logging: 208 | loggers: 209 | root: 210 | level: info 211 | onos-pci: 212 | image: 213 | pullPolicy: IfNotPresent 214 | repository: onosproject/onos-pci 215 | tag: v0.1.19 216 | logging: 217 | loggers: 218 | root: 219 | level: info 220 | onos-mlb: 221 | image: 222 | pullPolicy: IfNotPresent 223 | repository: onosproject/onos-mlb 224 | tag: v0.0.7 225 | logging: 226 | loggers: 227 | root: 228 | level: info 229 | config: 230 | mlb: 231 | e2tEndpoint: "onos-e2t:5150" 232 | thresholds: 233 | overload: 100 234 | target: 0 235 | config_json: 236 | controller: 237 | interval: 10 238 | fb-ah-xapp: 239 | image: 240 | repository: onosproject/fb-ah-xapp 241 | tag: 0.0.4 242 | pullPolicy: IfNotPresent 243 | fb-kpimon-xapp: 244 | image: 245 | repository: onosproject/fb-kpimon-xapp 246 | tag: 0.0.2 247 | pullPolicy: IfNotPresent 248 | fb-ah-gui: 249 | image: 250 | repository: onosproject/fb-ah-gui 251 | tag: 0.0.2 252 | pullPolicy: IfNotPresent 253 | ah-eson-test-server: 254 | image: 255 | repository: onosproject/ah-eson-test-server 256 | tag: 0.0.2 257 | pullPolicy: IfNotPresent 258 | 259 | 260 | # For OMEC & OAI 261 | images: 262 | pullPolicy: IfNotPresent 263 | tags: 264 | # For OMEC - Those images are stable image for RiaB 265 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 266 | # init: docker.io/omecproject/pod-init:1.0.0 267 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 268 | hssdb: docker.io/onosproject/riab-hssdb:v1.0.0 269 | hss: docker.io/onosproject/riab-hss:v1.0.0 270 | mme: docker.io/onosproject/riab-nucleus-mme:v1.0.0 271 | spgwc: docker.io/onosproject/riab-spgw:v1.0.0-onfvm-1 272 | pcrf: docker.io/onosproject/riab-pcrf:v1.0.0 273 | pcrfdb: docker.io/onosproject/riab-pcrfdb:v1.0.0 274 | bess: docker.io/onosproject/riab-bess-upf:v1.0.0-onfvm-1 275 | pfcpiface: docker.io/onosproject/riab-pfcpiface:v1.0.0-onfvm-1 276 | # For OAI 277 | oaicucp: docker.io/onosproject/oai-enb-cu:v0.1.6 278 | oaidu: docker.io/onosproject/oai-enb-du:v0.1.6 279 | oaiue: docker.io/onosproject/oai-ue:v0.1.6 280 | 281 | # For SD-RAN Umbrella chart: 282 | # ONOS-KPIMON xAPP and ONOS-UENIB are imported in the RiaB by default 283 | # ONOS-PCI xApp is imported in the RiaB when using OPT=ransim and OPT=mlb 284 | # ONOS-MLB xApp is imported in the RiaB when using OPT=mlb 285 | import: 286 | onos-uenib: 287 | enabled: true 288 | onos-kpimon: 289 | enabled: true 290 | onos-pci: 291 | enabled: false 292 | onos-mlb: 293 | enabled: false 294 | # Other ONOS-RIC micro-services 295 | # onos-topo: 296 | # enabled: true 297 | # onos-e2t: 298 | # enabled: true 299 | # onos-e2sub: 300 | # enabled: true 301 | # onos-o1t: 302 | # enabled: false 303 | # onos-config: 304 | # enabled: true 305 | # onos-sdran-cli: 306 | # enabled: true 307 | # ran-simulator chart is automatically imported when pushing ransim option 308 | # ran-simulator: 309 | # enabled: false 310 | # onos-gui: 311 | # enabled: false 312 | # nem-monitoring: 313 | # enabled: false 314 | # fb-ah-xapp, fb-ah-gui, fb-kpimon-xapp and ah-eson-test-server are automatically imported when pushing fbc-pci option 315 | # fb-ah-xapp: 316 | # enabled: false 317 | # fb-ah-gui: 318 | # enabled: false 319 | # ah-eson-test-server: 320 | # enabled: false 321 | # fb-kpimon-xapp: 322 | # enabled: false -------------------------------------------------------------------------------- /configs/chart_values/onf-server-1-riab-values.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # cassandra values 6 | cassandra: 7 | config: 8 | cluster_size: 1 9 | seed_size: 1 10 | 11 | resources: 12 | enabled: false 13 | 14 | config: 15 | spgwc: 16 | multiUpfs: true 17 | pfcp: true 18 | jsonCfgFiles: 19 | subscriber_mapping.json: 20 | subscriber-selection-rules: 21 | - priority: 5 22 | keys: 23 | serving-plmn: 24 | mcc: 208 25 | mnc: 10 26 | tac: 1 27 | imsi-range: 28 | from: 200000000000000 29 | to: 299999999999999 30 | selected-apn-profile: apn-profile1 31 | selected-qos-profile: qos-profile1 32 | selected-access-profile: 33 | - access-all 34 | selected-user-plane-profile: user-plane1 35 | - priority: 10 36 | keys: 37 | match-all: true 38 | selected-apn-profile: apn-profile1 39 | selected-qos-profile: qos-profile1 40 | selected-access-profile: 41 | - access-all 42 | selected-user-plane-profile: user-plane1 43 | apn-profiles: 44 | apn-profile1: 45 | apn-name: internet 46 | usage: 1 47 | network: lbo 48 | gx_enabled: true 49 | dns_primary: 8.8.8.4 50 | dns_secondary: 8.8.8.8 51 | mtu: 1460 52 | ueIpPool: 53 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 54 | upf: 55 | privileged: true 56 | enb: 57 | subnet: 192.168.251.0/24 58 | access: 59 | gateway: 192.168.252.1 60 | ip: 192.168.252.3/24 61 | core: 62 | gateway: 192.168.250.1 63 | ip: 192.168.250.3/24 64 | name: "oaisim" 65 | sriov: 66 | enabled: false 67 | hugepage: 68 | enabled: false 69 | cniPlugin: simpleovs 70 | ipam: static 71 | cfgFiles: 72 | upf.json: 73 | mode: af_packet 74 | mme: 75 | cfgFiles: 76 | config.json: 77 | mme: 78 | mcc: 79 | dig1: 2 80 | dig2: 0 81 | dig3: 8 82 | mnc: 83 | dig1: 0 84 | dig2: 1 85 | dig3: -1 86 | apnlist: 87 | internet: "spgwc" 88 | plmnlist: 89 | plmn1: "mcc=315,mnc=010" 90 | plmn2: "mcc=208,mnc=01" 91 | hss: 92 | bootstrap: 93 | users: 94 | - apn: "internet" 95 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 96 | opc: "d4416644f6154936193433dd20a0ace0" 97 | sqn: 96 98 | imsiStart: "208014567891201" 99 | msisdnStart: "1122334455" 100 | count: 10 101 | mmes: 102 | - id: 1 103 | mme_identity: mme.riab.svc.cluster.local 104 | mme_realm: riab.svc.cluster.local 105 | isdn: "19136246000" 106 | unreachability: 1 107 | oai-enb-cu: 108 | networks: 109 | f1: 110 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 111 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 112 | s1mme: 113 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 114 | s1u: 115 | interface: enb 116 | oai-enb-du: 117 | mode: nfapi #or local_L1 for USRP and BasicSim 118 | networks: 119 | f1: 120 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 121 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 122 | nfapi: 123 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 124 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 125 | oai-ue: 126 | numDevices: 1 # support up to 3 127 | networks: 128 | nfapi: 129 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 130 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 131 | onos-e2t: 132 | enabled: "yes" 133 | networks: 134 | e2: 135 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 136 | port: 36421 137 | 138 | # for the development, we can use the custom images 139 | # For ONOS-RIC 140 | onos-topo: 141 | image: 142 | pullPolicy: IfNotPresent 143 | repository: onosproject/onos-topo 144 | tag: latest 145 | logging: 146 | loggers: 147 | root: 148 | level: info 149 | onos-uenib: 150 | image: 151 | pullPolicy: IfNotPresent 152 | repository: onosproject/onos-uenib 153 | tag: latest 154 | logging: 155 | loggers: 156 | root: 157 | level: info 158 | onos-config: 159 | image: 160 | pullPolicy: IfNotPresent 161 | repository: onosproject/onos-config 162 | tag: latest 163 | logging: 164 | loggers: 165 | root: 166 | level: info 167 | onos-e2t: 168 | service: 169 | external: 170 | enabled: true 171 | e2: 172 | nodePort: 36421 173 | image: 174 | pullPolicy: IfNotPresent 175 | repository: onosproject/onos-e2t 176 | tag: latest 177 | logging: 178 | loggers: 179 | root: 180 | level: info 181 | onos-cli: 182 | image: 183 | pullPolicy: IfNotPresent 184 | repository: onosproject/onos-cli 185 | tag: latest 186 | logging: 187 | loggers: 188 | root: 189 | level: info 190 | ran-simulator: 191 | image: 192 | pullPolicy: IfNotPresent 193 | repository: onosproject/ran-simulator 194 | tag: latest 195 | pci: 196 | modelName: "model" 197 | metricName: "metrics" 198 | logging: 199 | loggers: 200 | root: 201 | level: info 202 | onos-kpimon: 203 | image: 204 | pullPolicy: IfNotPresent 205 | repository: onosproject/onos-kpimon 206 | tag: latest 207 | logging: 208 | loggers: 209 | root: 210 | level: info 211 | onos-pci: 212 | image: 213 | pullPolicy: IfNotPresent 214 | repository: onosproject/onos-pci 215 | tag: latest 216 | logging: 217 | loggers: 218 | root: 219 | level: info 220 | onos-mlb: 221 | image: 222 | pullPolicy: IfNotPresent 223 | repository: onosproject/onos-mlb 224 | tag: latest 225 | logging: 226 | loggers: 227 | root: 228 | level: info 229 | config: 230 | mlb: 231 | e2tEndpoint: "onos-e2t:5150" 232 | thresholds: 233 | overload: 100 234 | target: 0 235 | config_json: 236 | controller: 237 | interval: 10 238 | onos-mho: 239 | image: 240 | pullPolicy: IfNotPresent 241 | repository: onosproject/onos-mho 242 | tag: latest 243 | logging: 244 | loggers: 245 | root: 246 | level: info 247 | config: 248 | mho: 249 | e2tEndpoint: "onos-e2t:5150" 250 | config_json: 251 | reportingPeriod: 1000 252 | periodic: true 253 | uponRcvMeasReport: true 254 | uponChangeRrcStatus: true 255 | A3OffsetRange: 0 256 | HysteresisRange: 0 257 | CellIndividualOffset: 0 258 | FrequencyOffset: 0 259 | TimeToTrigger: 0 260 | onos-rsm: 261 | image: 262 | repository: onosproject/onos-rsm 263 | tag: latest 264 | pullPolicy: IfNotPresent 265 | fb-ah-xapp: 266 | image: 267 | repository: onosproject/fb-ah-xapp 268 | tag: 0.0.4 269 | pullPolicy: IfNotPresent 270 | fb-kpimon-xapp: 271 | image: 272 | repository: onosproject/fb-kpimon-xapp 273 | tag: 0.0.2 274 | pullPolicy: IfNotPresent 275 | fb-ah-gui: 276 | image: 277 | repository: onosproject/fb-ah-gui 278 | tag: 0.0.2 279 | pullPolicy: IfNotPresent 280 | ah-eson-test-server: 281 | image: 282 | repository: onosproject/ah-eson-test-server 283 | tag: 0.0.2 284 | pullPolicy: IfNotPresent 285 | 286 | # For OMEC & OAI 287 | images: 288 | pullPolicy: IfNotPresent 289 | tags: 290 | # For OMEC - Those images are stable image for RiaB 291 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 292 | # init: docker.io/omecproject/pod-init:1.0.0 293 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 294 | hssdb: docker.io/onosproject/riab-hssdb:master-9de5dba 295 | hss: docker.io/onosproject/riab-hss:master-9de5dba 296 | mme: docker.io/onosproject/riab-nucleus-mme:master-9e2bf16 297 | spgwc: docker.io/onosproject/riab-spgw:master-d8b0987-onfvm-1 298 | pcrf: docker.io/onosproject/riab-pcrf:pcrf-b29af70 299 | pcrfdb: docker.io/onosproject/riab-pcrfdb:pcrf-b29af70 300 | bess: docker.io/onosproject/riab-bess-upf:master-635b4d4-onfvm-1 301 | pfcpiface: docker.io/onosproject/riab-pfcpiface:master-635b4d4-onfvm-1 302 | # For OAI 303 | oaicucp: docker.io/onosproject/oai-enb-cu:latest 304 | oaidu: docker.io/onosproject/oai-enb-du:latest 305 | oaiue: docker.io/onosproject/oai-ue:latest 306 | 307 | # For SD-RAN Umbrella chart: 308 | # ONOS-KPIMON xAPP and ONOS-UENIB are imported in the RiaB by default 309 | # ONOS-PCI xApp is imported in the RiaB when using OPT=ransim and OPT=mlb 310 | # ONOS-MLB xApp is imported in the RiaB when using OPT=mlb 311 | # ONOS-MHO xApp is imported in the RiaB when using OPT=mho 312 | import: 313 | onos-uenib: 314 | enabled: true 315 | onos-kpimon: 316 | enabled: true 317 | onos-pci: 318 | enabled: false 319 | onos-mlb: 320 | enabled: false 321 | onos-mho: 322 | enabled: false 323 | # Other ONOS-RIC micro-services 324 | # onos-topo: 325 | # enabled: true 326 | # onos-e2t: 327 | # enabled: true 328 | # onos-e2sub: 329 | # enabled: true 330 | # onos-o1t: 331 | # enabled: false 332 | # onos-config: 333 | # enabled: true 334 | # onos-sdran-cli: 335 | # enabled: true 336 | # ran-simulator chart is automatically imported when pushing ransim option 337 | # ran-simulator: 338 | # enabled: false 339 | # onos-gui: 340 | # enabled: false 341 | # nem-monitoring: 342 | # enabled: false 343 | # fb-ah-xapp, fb-ah-gui, and ah-eson-test-server are automatically imported when pushing fbc-pci option 344 | # fb-ah-xapp: 345 | # enabled: false 346 | # fb-ah-gui: 347 | # enabled: false 348 | # ah-eson-test-server: 349 | # enabled: false 350 | # Monitoring/Logging 351 | # fluent-bit: 352 | # enabled: true 353 | # opendistro-es: 354 | # enabled: true 355 | # prometheus-stack: 356 | # enabled: true 357 | -------------------------------------------------------------------------------- /docs/Configuration_files.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # RiaB configuration 8 | 9 | ## Configuration files for each version 10 | If we want to tune RiaB, we should modify below YAML file for each version before the RiaB deployment. 11 | * For `latest` and `dev` version: `sdran-in-a-box-values.yaml` file 12 | * For `master-stable` version: `sdran-in-a-box-values-master-stable.yaml` file 13 | * For a specific release version: `sdran-in-a-box-values-.yaml` file 14 | 15 | ## First block - Enables Cassandra DB in OMEC 16 | This is the Cassandra DB configuration for OMEC. We don't really need to change this. 17 | ```yaml 18 | cassandra: 19 | config: 20 | cluster_size: 1 21 | seed_size: 1 22 | ``` 23 | 24 | ## Second block - Enables CPU/MEM size configuration 25 | This is for the CPU/MEM size configuration. We don't need to change this. 26 | ```yaml 27 | resources: 28 | enabled: false 29 | ``` 30 | 31 | ## Third block - OMEC, CU-CP, and OAI nFAPI parameter configuration block 32 | This block has parameters for OMEC, CU-CP, OAI DU (nFAPI), and OAI UE (nFAPI) parameter configuration. 33 | ```yaml 34 | config: 35 | spgwc: 36 | pfcp: true 37 | ueIpPool: 38 | ip: 172.250.0.0 # if we use RiaB, Makefile script will override this value with the value defined in Makefile script. 39 | upf: 40 | name: "oaisim" 41 | sriov: 42 | enabled: false 43 | hugepage: 44 | enabled: false 45 | cniPlugin: simpleovs 46 | ipam: static 47 | cfgFiles: 48 | upf.json: 49 | mode: af_packet 50 | mme: 51 | cfgFiles: 52 | config.json: 53 | mme: 54 | mcc: 55 | dig1: 2 56 | dig2: 0 57 | dig3: 8 58 | mnc: 59 | dig1: 0 60 | dig2: 1 61 | dig3: -1 62 | apnlist: 63 | internet: "spgwc" 64 | hss: 65 | bootstrap: 66 | users: 67 | - apn: "internet" 68 | key: "465b5ce8b199b49faa5f0a2ee238a6bc" 69 | opc: "d4416644f6154936193433dd20a0ace0" 70 | sqn: 96 71 | imsiStart: "208014567891201" 72 | msisdnStart: "1122334455" 73 | count: 10 74 | mmes: 75 | - id: 1 76 | mme_identity: mme.riab.svc.cluster.local 77 | mme_realm: riab.svc.cluster.local 78 | isdn: "19136246000" 79 | unreachability: 1 80 | oai-enb-cu: 81 | networks: 82 | f1: 83 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 84 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 85 | s1mme: 86 | interface: eno1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 87 | s1u: 88 | interface: enb 89 | oai-enb-du: 90 | mode: nfapi #or local_L1 for USRP and BasicSim 91 | networks: 92 | f1: 93 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 94 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 95 | nfapi: 96 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 97 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 98 | oai-ue: 99 | numDevices: 1 # support up to 3 100 | networks: 101 | nfapi: 102 | interface: eno1 #if we use RiaB, Makefile script will automatically apply appropriate IP address 103 | address: 10.128.100.100 #if we use RiaB, Makefile script will automatically apply appropriate IP address 104 | onos-e2t: 105 | enabled: "yes" 106 | networks: 107 | e2: 108 | address: 127.0.0.1 # if we use RiaB, Makefile script will automatically apply appropriate interface name 109 | port: 36421 110 | ``` 111 | 112 | Normally, we don't need to touch one of those values except for `numDevices` in `oai-ue` block. 113 | If we want to deploy more UEs, we should change `numDevices` and then deploy RiaB with OAI nFAPI emulator option. 114 | 115 | ## Fourth block - image tag block 116 | This block has all containers' repository, tag/version, and pulling policy. 117 | To test a specific Docker container image within RiaB, we should change imamge tag and repository in this block. 118 | ```yaml 119 | # for the development, we can use the custom images 120 | # For ONOS-RIC 121 | onos-topo: 122 | image: 123 | pullPolicy: IfNotPresent 124 | repository: onosproject/onos-topo 125 | tag: latest 126 | onos-config: 127 | image: 128 | pullPolicy: IfNotPresent 129 | repository: onosproject/onos-config 130 | tag: latest 131 | onos-e2t: 132 | service: 133 | external: 134 | enabled: true 135 | e2: 136 | nodePort: 36421 137 | image: 138 | pullPolicy: IfNotPresent 139 | repository: onosproject/onos-e2t 140 | tag: latest 141 | onos-e2sub: 142 | image: 143 | pullPolicy: IfNotPresent 144 | repository: onosproject/onos-e2sub 145 | tag: latest 146 | onos-cli: 147 | image: 148 | pullPolicy: IfNotPresent 149 | repository: onosproject/onos-cli 150 | tag: latest 151 | ran-simulator: 152 | image: 153 | pullPolicy: IfNotPresent 154 | repository: onosproject/ran-simulator 155 | tag: latest 156 | onos-kpimon-v1: 157 | image: 158 | pullPolicy: IfNotPresent 159 | repository: onosproject/onos-kpimon 160 | tag: latest 161 | onos-kpimon-v2: 162 | image: 163 | pullPolicy: IfNotPresent 164 | repository: onosproject/onos-kpimon 165 | tag: latest 166 | onos-pci: 167 | image: 168 | pullPolicy: IfNotPresent 169 | repository: onosproject/onos-pci 170 | tag: latest 171 | fb-ah-xapp: 172 | image: 173 | repository: onosproject/fb-ah-xapp 174 | tag: 0.0.1 175 | pullPolicy: IfNotPresent 176 | fb-ah-gui: 177 | image: 178 | repository: onosproject/fb-ah-gui 179 | tag: 0.0.1 180 | pullPolicy: IfNotPresent 181 | ah-eson-test-server: 182 | image: 183 | repository: onosproject/ah-eson-test-server 184 | tag: 0.0.1 185 | pullPolicy: IfNotPresent 186 | 187 | # For OMEC & OAI 188 | images: 189 | pullPolicy: IfNotPresent 190 | tags: 191 | # For OMEC - Those images are stable image for RiaB 192 | # latest Aether helm chart commit ID: 3d1e936e87b4ddae784a33f036f87899e9d00b95 193 | # init: docker.io/omecproject/pod-init:1.0.0 194 | # depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1 195 | hssdb: docker.io/onosproject/riab-hssdb:v1.0.0 196 | hss: docker.io/onosproject/riab-hss:v1.0.0 197 | mme: docker.io/onosproject/riab-nucleus-mme:v1.0.0 198 | spgwc: docker.io/onosproject/riab-spgw:v1.0.0 199 | pcrf: docker.io/onosproject/riab-pcrf:v1.0.0 200 | pcrfdb: docker.io/onosproject/riab-pcrfdb:v1.0.0 201 | bess: docker.io/onosproject/riab-bess-upf:v1.0.0 202 | pfcpiface: docker.io/onosproject/riab-pfcpiface:v1.0.0 203 | # For OAI 204 | oaicucp: docker.io/onosproject/oai-enb-cu:latest 205 | oaidu: docker.io/onosproject/oai-enb-du:latest 206 | oaiue: docker.io/onosproject/oai-ue:latest 207 | ``` 208 | 209 | ## Fifth block - import block 210 | This block is the import block to speicify which services are onboarded in ONOS RIC services. 211 | In fact, ONOS RIC services are packaged as a single umbrella Helm chart. 212 | By adjusting this block, we can configure which service is onboarded and which service is not deployed. 213 | ```yaml 214 | # For SD-RAN Umbrella chart: 215 | # ONOS-KPIMON xAPP is imported in the RiaB by default 216 | import: 217 | onos-kpimon-v1: 218 | enabled: false 219 | onos-kpimon-v2: 220 | enabled: true 221 | onos-pci: 222 | enabled: true 223 | # Other ONOS-RIC micro-services 224 | # onos-topo: 225 | # enabled: true 226 | # onos-e2t: 227 | # enabled: true 228 | # onos-e2sub: 229 | # enabled: true 230 | # onos-o1t: 231 | # enabled: false 232 | # onos-config: 233 | # enabled: true 234 | # onos-sdran-cli: 235 | # enabled: true 236 | # ran-simulator chart is automatically imported when pushing ransim option 237 | # ran-simulator: 238 | # enabled: false 239 | # onos-gui: 240 | # enabled: false 241 | # nem-monitoring: 242 | # enabled: false 243 | # fb-ah-xapp, fb-ah-gui, and ah-eson-test-server are automatically imported when pushing fbc-pci option 244 | # fb-ah-xapp: 245 | # enabled: false 246 | # fb-ah-gui: 247 | # enabled: false 248 | # ah-eson-test-server: 249 | # enabled: false 250 | ``` -------------------------------------------------------------------------------- /docs/HW_Installation_oai_enb.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Install OAI CU/DU 8 | 9 | This section explains how to execute only the OAI components using the RiaB Makefile. 10 | 11 | Bofere proceeding, make sure you follow all the instructions on how to install the OAI/USRP requirements prerequisites in the NUC machines. 12 | 13 | In the RiaB makefile targets are included options to execute OAI CU/DU/UE components using helm charts. Those steps do not require any source code compilation of OAI, the OAI components run in docker images and have their parameters configured by the sdran-in-a-box-values.yaml file. 14 | 15 | **Notice: The sdran-in-a-box-values.yaml contain the latest versions/tags of the OAI docker images. In order to use the versions of the OAI docker images specified in RiaB v1.0.0 or v1.1.0 releases make sure to respectively copy and paste to the sdran-in-a-box-values.yaml file the contents of the files sdran-in-a-box-values-v1.0.0.yaml and sdran-in-a-box-values-v1.1.0.yaml as needed.** 16 | 17 | ## Network parameter configuration 18 | 19 | We should then configure the network parameters (e.g., routing rules, MTU size, and packet fregmentation) on the OAI-CU/DU machine. 20 | 21 | ### Configure the IP addresses on the OAI NUC 22 | Before run CU-CP, the NUC machine for OAI has to have two IP addresses on the Ethernet port. 23 | The one IP address is the IP address in 192.168.11.8/29 subnet to communiacte with Quagga internal router in OMEC VM. 24 | The other ons is for the IP address to communicate with the OMEC machine and RIC machine. 25 | This the the IP assignment: 26 | ```bash 27 | $ ip a show eno1 28 | 2: eno1: mtu 1500 qdisc fq_codel state UP group default qlen 1000 29 | link/ether 1c:69:7a:6e:97:91 brd ff:ff:ff:ff:ff:ff 30 | inet 192.168.11.10/29 brd 192.168.11.15 scope global eno1 31 | valid_lft forever preferred_lft forever 32 | inet 192.168.13.21/16 brd 192.168.255.255 scope global eno1 33 | valid_lft forever preferred_lft forever 34 | ... 35 | ``` 36 | 37 | Here, the most important thing is the order of IP address. The IP address `192.168.11.10/29` should be first and the IP address `192.168.13.21/16` should be the secondary IP address. 38 | Otherwise, the user traffic does not work as well as the CU-CP cannot make a E2 connection. 39 | In order to assign two IP address like above, we can configure the `netplan`. 40 | ```bash 41 | $ cat /etc/netplan/50-cloud-init.yaml 42 | # This file is generated from information provided by the datasource. Changes 43 | # to it will not persist across an instance reboot. To disable cloud-init's 44 | # network configuration capabilities, write a file 45 | # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: 46 | # network: {config: disabled} 47 | network: 48 | ethernets: 49 | eno1: 50 | addresses: 51 | - 192.168.11.10/29 52 | - 192.168.13.21/16 53 | gateway4: 192.168.0.1 54 | nameservers: 55 | addresses: 56 | - 8.8.8.8 57 | version: 2 58 | ``` 59 | 60 | ### Configuration in OAI-CU/DU machine 61 | Then, We should go to the the OAI-CU/DU NUC machine and add some routing rules 62 | 63 | ```bash 64 | $ cd /path/to/sdran-in-a-box 65 | $ make routing-hw-oai 66 | ``` 67 | 68 | ## Run OAI eNB CU/DU 69 | 70 | ```bash 71 | $ cd /path/to/sdran-in-a-box 72 | $ sudo apt install build-essential 73 | $ make oai-hw 74 | ``` 75 | 76 | This command starts the execution of oai-enb-cu and oai-enb-du components. 77 | 78 | This step might take some time due to the download of the oai-enb-cu and oai-enb-du docker images. 79 | After the conditions (pod/oai-enb-cu-0 condition met and pod/oai-enb-du-0 condition met) were achieved the deployment was successful. 80 | 81 | The pod pod/oai-enb-du-0 takes some time to start as it needs to configure the USRP first. 82 | 83 | *Note: If we want to deploy a specific release version of OAI in SD-RAN project, we should add `VER=VERSION` argument; VERSION should be one of {v1.0.0, v1.1.0, v1.2.0, latest, stable}.* 84 | 85 | ## Stop/Clean OAI components 86 | 87 | After finishing the hardware installation setup procedures, run the command below to delete all deployed Helm charts for OAI CU/DU components: 88 | 89 | ```bash 90 | $ make reset-oai 91 | ``` 92 | 93 | And this deletes not only deployed Helm chart but also Kubernetes and Helm. 94 | 95 | ```bash 96 | make clean # if we want to keep the ~/helm-charts directory - option to develop/test changed/new Helm charts 97 | make clean-all # if we also want to delete ~/helm-charts directory 98 | ``` 99 | -------------------------------------------------------------------------------- /docs/HW_Installation_oai_ue.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Install OAI UE 8 | 9 | This section explains how to execute only the OAI components using the RiaB Makefile. 10 | 11 | Bofere proceeding, make sure you follow all the instructions on how to install the OAI/USRP requirements prerequisites in the NUC machines. 12 | 13 | In the RiaB makefile targets are included options to execute OAI CU/DU/UE components using helm charts. Those steps do not require any source code compilation of OAI, the OAI components run in docker images and have their parameters configured by the sdran-in-a-box-values.yaml file. 14 | 15 | **Notice: The sdran-in-a-box-values.yaml contain the latest versions/tags of the OAI docker images. In order to use the versions of the OAI docker images specified in RiaB v1.0.0 or v1.1.0 releases make sure to respectively copy and paste to the sdran-in-a-box-values.yaml file the contents of the files sdran-in-a-box-values-v1.0.0.yaml and sdran-in-a-box-values-v1.1.0.yaml as needed.** 16 | 17 | ## Update UE image tag in sdran-in-a-box-values-version.yaml file 18 | In the `sdran-in-a-box-values-version.yaml` file, we can find `oai-ue` image tag. The `oai-ue` tag should be `sdran-1.1.2`: 19 | ```yaml 20 | oaicucp: docker.io/onosproject/oai-enb-cu:v0.1.6 21 | oaidu: docker.io/onosproject/oai-enb-du:v0.1.6 22 | oaiue: docker.io/onosproject/oai-ue:sdran-1.1.2 23 | ``` 24 | 25 | ## Run OAI UE 26 | ```bash 27 | $ cd /path/to/sdran-in-a-box 28 | $ sudo apt install build-essential 29 | $ make oai-ue-usrp 30 | ``` 31 | 32 | This step might take some time due to the download of the oai-ue docker image. 33 | After the condition (pod/oai-ue-0 condition met) were achieved proceed to the next topic. 34 | 35 | The pod pod/oai-ue-0 takes some time to start as it needs to configure the USRP first. 36 | 37 | 38 | ## Stop/Clean OAI components 39 | 40 | After finishing the hardware installation setup procedures, run the command below to delete all deployed Helm charts for OAI UE component. 41 | 42 | ```bash 43 | $ make reset-oai 44 | ``` 45 | 46 | And this deletes not only deployed Helm chart but also Kubernetes and Helm. 47 | 48 | ```bash 49 | make clean # if we want to keep the ~/helm-charts directory - option to develop/test changed/new Helm charts 50 | make clean-all # if we also want to delete ~/helm-charts directory 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/HW_Installation_omec.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Install OMEC 8 | 9 | This section explains how to install the EPC OMEC components using RiaB in the EPC-OMEC machine. 10 | 11 | ## Start the RiaB EPC-OMEC components 12 | 13 | After changing the file `sdran-in-a-box-values.yaml`, run the following commands: 14 | 15 | ```bash 16 | $ cd /path/to/sdran-in-a-box 17 | $ sudo apt install build-essential 18 | $ make omec 19 | ``` 20 | 21 | ## Verify whether everything is up and running 22 | After a while, RiaB Makefile completes to install K8s and deploy OMEC CP, OMEC UP, and an internal router. 23 | Once it is done, you can check with the below command in the EPC-OMEC machine. 24 | ```bash 25 | $ kubectl get pods --all-namespaces 26 | NAMESPACE NAME READY STATUS RESTARTS AGE 27 | default router 1/1 Running 0 19h 28 | kube-system calico-kube-controllers-865c7978b5-k6f62 1/1 Running 0 19h 29 | kube-system calico-node-bldr4 1/1 Running 0 19h 30 | kube-system coredns-dff8fc7d-hqfcn 1/1 Running 0 19h 31 | kube-system dns-autoscaler-5d74bb9b8f-5w2j4 1/1 Running 0 19h 32 | kube-system kube-apiserver-node1 1/1 Running 0 19h 33 | kube-system kube-controller-manager-node1 1/1 Running 0 19h 34 | kube-system kube-multus-ds-amd64-jzvzr 1/1 Running 0 19h 35 | kube-system kube-proxy-wclnq 1/1 Running 0 19h 36 | kube-system kube-scheduler-node1 1/1 Running 0 19h 37 | kube-system kubernetes-dashboard-667c4c65f8-bqkgl 1/1 Running 0 19h 38 | kube-system kubernetes-metrics-scraper-54fbb4d595-7kjss 1/1 Running 0 19h 39 | kube-system nodelocaldns-p6j8m 1/1 Running 0 19h 40 | omec cassandra-0 1/1 Running 0 113m 41 | omec hss-0 1/1 Running 0 113m 42 | omec mme-0 4/4 Running 0 113m 43 | omec pcrf-0 1/1 Running 0 113m 44 | omec spgwc-0 2/2 Running 0 113m 45 | omec upf-0 4/4 Running 0 112m 46 | ``` 47 | If you can see the router and all OMEC PODs are running, then everything is good to go. 48 | 49 | ## Network parameter configuration 50 | 51 | We should then configure the network parameters (e.g., routing rules, MTU size, and packet fregmentation) on EPC-OMEC so it can reach out to OAI-CU/DU machine. 52 | 53 | ``` 54 | $ cd /path/to/sdran-in-a-box 55 | $ make routing-hw-omec 56 | ``` 57 | -------------------------------------------------------------------------------- /docs/HW_Installation_ops.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Operations Guide 8 | 9 | ## Evaluate the RIC operation 10 | 11 | In the ONOS-RIC machine, log in the onos-cli pod, running: 12 | 13 | ```bash 14 | $ kubectl -n riab exec -ti deployment/onos-cli -- bash 15 | ``` 16 | 17 | Once inside the onos-cli pod, check the ONOS-RIC connections and subscriptions: 18 | 19 | ```bash 20 | $ onos e2t list connections #Shows the associated CU/DU connection 21 | $ onos e2sub list subscriptions #Shows the apps subscrition to the CU/DU nodes 22 | ``` 23 | 24 | In the output of the kpimonv2 list of metrics, there should appear 1 UE registered. It means the UE was attached to the DU/CU setup. 25 | 26 | ```bash 27 | $ kubectl exec -it deployment/onos-cli -n riab -- onos kpimonv2 list metrics 28 | Cell ID RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum 29 | 1112066:57344 0 0 0 1 0 30 | ``` 31 | 32 | ## Custom Network Routes and IP Addresses 33 | 34 | It is important to explain the custom settings associated with the hardware installation setup, in specific the network routes and IP addresses defined in the EPC-OMEC router and the OAI-CU/DU machine and the cu.onf.conf file. 35 | 36 | In the EPC-OMEC, a router Pod (running the Quagga engine) interconnects the core, enb and access networks, each one respectively in the following subnets 192.168.11.0/29, 192.168.11.8/29, and 192.168.11.16/29. 37 | 38 | Via the definition of the secondary IP address (192.168.11.10/29) in the OAI-CU/DU machine, it was possible to configure the EPC-OMEC core to forward traffic to the host 192.168.11.10 via the gateway 192.168.13.21 (the primary OAI-CU/DU IP address). 39 | 40 | In the OAI-CU/DU machine, the set of routes had to be configured so the traffic from the CU/DU be forwarded to the EPC-OMEC machine. 41 | 42 | Inside the router of the EPC-OMEC, a route had to be configured to reach the secondary IP address of OAI-CU/DU via the enb interface. 43 | 44 | And the cu.onf.conf file in the OAI-CU/DU machine had to be correctly configured using the IP addresses of the MME (EPC-CORE) and RIC machines. 45 | 46 | **Notice, in summary the routing rule and IP addresses configuration are performed so OAI-CU/DU can reach EPC-OMEC and vice-versa.** 47 | 48 | 49 | ## User Equipment (UE) Handset 50 | As of now, the current OAI with RiaB setup is running over LTE Band 7. 51 | To communicate with this setup, we should prepare the Android smartphone which supports LTE Band 7. 52 | We should then insert a SIM card to the smartphone, where the SIM card should have the below IMSI, Key, and OPc values: 53 | 54 | * IMSI: `315010999912340-315010999912370` 55 | * Key: `465b5ce8b199b49faa5f0a2ee238a6bc` 56 | * OPc: `69d5c2eb2e2e624750541d3bbc692ba5` 57 | 58 | If we want to use the different IMSI number, we have to change the HSS configuration. 59 | In order to change SIM information in HSS, we first go to the ONOS-RIC machine and open the `sdran-in-a-box-values.yaml` file. 60 | And change this section to the appropriate number: 61 | ```yaml 62 | hss: 63 | bootstrap: 64 | users: 65 | - apn: "internet" 66 | key: "000102030405060708090a0b0c0d0e0f" # Change me 67 | opc: "69d5c2eb2e2e624750541d3bbc692ba5" # Change me 68 | sqn: 135 69 | imsiStart: "315010999912340" # Change me 70 | msisdnStart: "9999334455" 71 | count: 30 72 | ``` 73 | 74 | If the new SIM information has the different PLMN ID, we should also change the PLMN ID into MME, HSS, CU-CP, and DU configuration files. 75 | We should find PLMN ID or MCC/MNC values and change them to the appropriate number. 76 | 77 | `sdran-in-a-box-values.yaml`: 78 | ```yaml 79 | spgwc: 80 | pfcp: true 81 | multiUpfs: true 82 | jsonCfgFiles: 83 | subscriber_mapping.json: 84 | subscriber-selection-rules: 85 | - selected-user-plane-profile: "menlo" 86 | keys: 87 | serving-plmn: 88 | mcc: 315 # Change me 89 | mnc: 10 # Change me 90 | ... 91 | mme: 92 | cfgFiles: 93 | config.json: 94 | mme: 95 | logging: debug 96 | mcc: 97 | dig1: 3 # Change me 98 | dig2: 1 # Change me 99 | dig3: 5 # Change me 100 | mnc: 101 | dig1: 0 # Change me 102 | dig2: 1 # Change me 103 | dig3: 0 # Change me 104 | apnlist: 105 | internet: "spgwc" 106 | ``` 107 | 108 | `cu.onf.conf`: 109 | ```text 110 | tracking_area_code = 1001; 111 | plmn_list = ( { mcc = 315; mnc = 010; mnc_length = 3; } ) // Change me 112 | ``` 113 | 114 | `du.onf.conf`: 115 | ```text 116 | tracking_area_code = 1001; 117 | plmn_list = ( { mcc = 315; mnc = 010; mnc_length = 3; } ) // Change me 118 | ``` -------------------------------------------------------------------------------- /docs/HW_Installation_prereq.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Prerequisites 8 | 9 | This section explains how to install the requirements needed for the execution of an OAI component in a host machine connected to a USRP. 10 | 11 | In the case of the hardware installation tutorial using 2 NUCs, proceed with the execution of the steps below on both NUCs. 12 | 13 | Before we start this section, we consider the host machine already have Ubuntu 18.04 server OS installed. 14 | **Also, please DO NOT connect the USRP B210 device to the host machines yet.** 15 | **Otherwise, the host machine may not boot up.** 16 | 17 | 18 | ## Install Linux Image low-latency 19 | 20 | ```bash 21 | $ sudo apt install linux-image-lowlatency linux-headers-lowlatency 22 | ``` 23 | 24 | ## Power management and CPU frequency configuration 25 | To run on OAI, we must disable p-state and c-state in Linux. 26 | Go to `/etc/default/grub` file and add change `GRUB_CMDLINE_LINUX_DEFAULT` line as below: 27 | ```text 28 | GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable processor.max_cstate=1 intel_idle.max_cstate=0 idle=poll" 29 | ``` 30 | 31 | After save that file, we should command this: 32 | ```bash 33 | $ sudo update-grub2 34 | ``` 35 | 36 | Next, go to `/etc/modprobe.d/blacklist.conf` file and append below at the end of the file: 37 | ```text 38 | # for OAI 39 | blacklist intel_powerclamp 40 | ``` 41 | 42 | After that, reboot the NUC machine. When rebooting, we have to change the `BIOS` configuration. 43 | Go to the BIOS setup page and change some parameters: 44 | * Disable secure booting option 45 | * Disable hyperthreading 46 | * Enable virtualization 47 | * Disable all power management functions (c-/p-state related) 48 | * Enable real-time tuning and Intel Turbo boost 49 | Once it is done, we should save and exit. Then, we reboot NUC board again. 50 | 51 | When NUC is up and running, we should install the below tool: 52 | ```bash 53 | $ sudo apt-get install cpufrequtils 54 | ``` 55 | 56 | After the installation, go to `/etc/default/cpufrequtils` and write below: 57 | ```text 58 | GOVERNOR="performance" 59 | ``` 60 | 61 | *NOTE: If the `/etc/default/cpufrequtils` file does not exist, we should make that file.* 62 | 63 | Next, we should command below: 64 | ```bash 65 | $ sudo systemctl disable ondemand.service 66 | $ sudo /etc/init.d/cpufrequtils restart 67 | ``` 68 | 69 | After that, we should reboot this machine again. 70 | 71 | ## Verification of the power management and CPU frequency configuration 72 | In order to verify configurations for the power management and CPU frequency, we should use `i7z` tool. 73 | ```bash 74 | $ sudo apt install i7z 75 | $ sudo i7z 76 | True Frequency (without accounting Turbo) 1607 MHz 77 | CPU Multiplier 16x || Bus clock frequency (BCLK) 100.44 MHz 78 | 79 | Socket [0] - [physical cores=6, logical cores=6, max online cores ever=6] 80 | TURBO ENABLED on 6 Cores, Hyper Threading OFF 81 | Max Frequency without considering Turbo 1707.44 MHz (100.44 x [17]) 82 | Max TURBO Multiplier (if Enabled) with 1/2/3/4/5/6 Cores is 47x/47x/41x/41x/39x/39x 83 | Real Current Frequency 3058.82 MHz [100.44 x 30.45] (Max of below) 84 | Core [core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp VCore 85 | Core 1 [0]: 3058.81 (30.45x) 100 0 0 0 64 0.9698 86 | Core 2 [1]: 3058.82 (30.45x) 100 0 0 0 63 0.9698 87 | Core 3 [2]: 3058.82 (30.45x) 100 0 0 0 64 0.9698 88 | Core 4 [3]: 3058.81 (30.45x) 100 0 0 0 64 0.9698 89 | Core 5 [4]: 3058.81 (30.45x) 100 0 0 0 65 0.9698 90 | Core 6 [5]: 3058.82 (30.45x) 100 0 0 0 62 0.9686 91 | ``` 92 | 93 | In the above results, we have to see that all cores should get `C0%` as `100` and `Halt(C1)%` as `0`. 94 | If not, some of the above configuration are missing. 95 | Or, some of BIOS configurations are incorrect. 96 | 97 | **The steps above conclude the installation of OAI/USRP requirements.** 98 | 99 | **Now, please connect the USRP B210 device to the host machines (usb 3.0).** -------------------------------------------------------------------------------- /docs/HW_Installation_ric.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Install the ONOS-RIC 8 | 9 | This section explains how to install the RIC components using RiaB in the ONOS-RIC machine. 10 | 11 | ## Start the RiaB ONOS-RIC components 12 | 13 | ```bash 14 | $ cd /path/to/sdran-in-a-box 15 | $ sudo apt install build-essential 16 | $ make riab OPT=ric 17 | ``` 18 | 19 | *Note: If we want to deploy a specific RIC version, we should add `VER=VERSION` argument; VERSION should be one of {v1.0.0, v1.1.0, v1.2.0, latest, stable}.* 20 | 21 | ## Verify whether everything is up and running 22 | After a while, RiaB Makefile completes to install K8s and deploy ONOS-RIC components. 23 | Once it is done, you can check with the below command in the ONOS-RIC machine. 24 | 25 | ```bash 26 | NAMESPACE NAME READY STATUS RESTARTS AGE 27 | default router 1/1 Running 0 16m 28 | kube-system atomix-controller-6b6d96775-bc8s4 1/1 Running 0 15m 29 | kube-system atomix-raft-storage-controller-77bd965f8d-785gz 1/1 Running 0 15m 30 | kube-system calico-kube-controllers-6759976d49-zkvjt 1/1 Running 0 3d7h 31 | kube-system calico-node-n22vw 1/1 Running 0 3d7h 32 | kube-system coredns-dff8fc7d-b8lvl 1/1 Running 52 3d7h 33 | kube-system dns-autoscaler-5d74bb9b8f-5948j 1/1 Running 0 3d7h 34 | kube-system kube-apiserver-node1 1/1 Running 64 3d7h 35 | kube-system kube-controller-manager-node1 1/1 Running 64 3d7h 36 | kube-system kube-multus-ds-amd64-wg99f 1/1 Running 0 3d7h 37 | kube-system kube-proxy-cvxz2 1/1 Running 1 3d7h 38 | kube-system kube-scheduler-node1 1/1 Running 62 3d7h 39 | kube-system kubernetes-dashboard-667c4c65f8-5kdcp 1/1 Running 97 3d7h 40 | kube-system kubernetes-metrics-scraper-54fbb4d595-slnlv 1/1 Running 63 3d7h 41 | kube-system nodelocaldns-55nr9 1/1 Running 53 3d7h 42 | kube-system onos-operator-app-d56cb6f55-bbqbp 1/1 Running 0 10m 43 | kube-system onos-operator-config-7986b568b-vj8tj 1/1 Running 0 10m 44 | kube-system onos-operator-topo-76fdf46db5-56rh9 1/1 Running 0 10m 45 | prometheus alertmanager-prometheus-prometheus-oper-alertmanager-0 2/2 Running 46 3d4h 46 | prometheus prometheus-grafana-d6545c767-pjchc 2/2 Running 40 3d4h 47 | prometheus prometheus-kube-state-metrics-c65b87574-w92hj 1/1 Running 98 3d4h 48 | prometheus prometheus-prometheus-node-exporter-khqbv 1/1 Running 84 3d4h 49 | prometheus prometheus-prometheus-oper-operator-5ff8fbd5fb-6dm4g 2/2 Running 0 3d4h 50 | prometheus prometheus-prometheus-prometheus-oper-prometheus-0 3/3 Running 38 3d4h 51 | riab onos-cli-9f75bc57c-vf4mr 1/1 Running 0 7m44s 52 | riab onos-config-5d7cd9dd8c-ml8fk 4/4 Running 0 7m44s 53 | riab onos-consensus-store-0 1/1 Running 0 7m44s 54 | riab onos-e2t-65cddb59cc-jztrn 3/3 Running 0 7m44s 55 | riab onos-kpimon-6bdff5875c-gng64 2/2 Running 0 7m44s 56 | riab onos-rsm-59f79876ff-qhmpm 2/2 Running 0 7m44s 57 | riab onos-topo-775f5f946f-t29b2 3/3 Running 0 7m44s 58 | riab onos-uenib-5b6445d58f-qljqp 3/3 Running 0 7m44s 59 | ``` 60 | 61 | **Note: RIC does not have a fixed IP address by which oai-enb-cu (or another eNB) can communicate with it. The onos-e2t component exposes a service in port 36421, which is associated with the IP address of the eno1 interface (i.e., the default gateway interface) where it is running. To check that IP address run the command "kubectl -n riab get svc". In the output of this command, one of the lines should show something similar to "onos-e2t-external NodePort x.y.w.z 36421:36421/SCTP 0m40s". The IP address "x.y.w.z" shown in the output of the previous command (listed in the onos-e2t-external service) is the one that is accessible from the outside of the RIC VM, i.e., by the oai-enb-cu in case of this tutorial. In a test case with another eNB, that should be the IP address to be configured in the eNB so it can communicate with onos RIC.** 62 | 63 | 64 | ## Routing 65 | If RIC is running outside the OAI-CU/DU machine, run below command: 66 | ```bash 67 | $ make routing-ric-external-ran 68 | ``` 69 | 70 | If there are multiple machines, we should manually add routing rules like: 71 | ```bash 72 | $ sudo route add -host gw dev 73 | $ sudo route add -host gw dev 74 | ``` -------------------------------------------------------------------------------- /docs/HW_Installation_ric_only.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Install RIC only 8 | 9 | This section explains how to execute only the RIC components (without RanSim/OAI) using the RiaB Makefile. 10 | 11 | ## Get the RiaB source code 12 | 13 | To get the source code, please see: `https://github.com/onosproject/sdran-in-a-box`. 14 | 15 | Since SDRAN-in-a-Box repository is a member-only repository, a user should log in github and then check the git clone command on that web site. 16 | Clone the RiaB repository to the target machine. 17 | 18 | This option is usefull to test RIC with CU/DU components running in other machines. 19 | 20 | 21 | ## Run RIC 22 | 23 | In the sdran-in-a-box folder, edit the Makefile to disable the ran-simulator execution, it should look like the line below: 24 | 25 | ```bash 26 | RANSIM_ARGS ?= --set import.ran-simulator.enabled=false # Change this value from true to false 27 | ``` 28 | 29 | Then run the RIC components with the commands below. 30 | 31 | ```bash 32 | $ cd /path/to/sdran-in-a-box 33 | $ sudo apt install build-essential 34 | $ make OPT=ric VER= 35 | ``` 36 | 37 | **Notice: The sdran-in-a-box-values.yaml contain the latest versions of the RIC components. In order to use the v1.0.0 or v1.1.0 versions make sure to respectively copy and paste to the sdran-in-a-box-values.yaml file the contents of the files sdran-in-a-box-values-v1.0.0.yaml and sdran-in-a-box-values-v1.1.0.yaml as needed.** 38 | 39 | Check the deployed RIC components using the commands: 40 | ```bash 41 | $ kubectl -n riab get pods 42 | $ kubectl -n riab get svc 43 | ``` 44 | 45 | Notice, in the output of the command `kubectl -n riab get svc` the service onos-e2t-external must be present in order to E2 nodes reach the RIC running node using a remote SCTP connection in port 36421. The IP address to be configured in E2 nodes connecting to RIC must be the IP address of the primary network interface of the RIC host machine. 46 | 47 | If such service (onos-e2t-external) does not exist, make sure in the file sdran-in-a-box-values.yaml the lines below are not commented. 48 | 49 | ```yaml 50 | onos-e2t: 51 | service: 52 | external: 53 | enabled: true 54 | e2: 55 | nodePort: 36421 56 | ``` 57 | 58 | ## Routing 59 | If RIC is running outside the OAI-CU/DU machine, run below command: 60 | ```bash 61 | $ make routing-ric-external-ran 62 | ``` 63 | 64 | If there are multiple machines, we should manually add routing rules like: 65 | ```bash 66 | $ sudo route add -host gw dev 67 | $ sudo route add -host gw dev 68 | ``` 69 | 70 | ## Stop/Clean RIC 71 | 72 | This deletes all deployed Helm charts for RIC components (keeps Kubernetes and Helm installed/running). 73 | 74 | ```bash 75 | $ make reset-ric 76 | ``` 77 | 78 | And this deletes not only deployed Helm charts but also Kubernetes and Helm. 79 | 80 | ```bash 81 | make clean # if we want to keep the ~/helm-charts directory - option to develop/test changed/new Helm charts 82 | make clean-all # if we also want to delete ~/helm-charts directory 83 | ``` -------------------------------------------------------------------------------- /docs/HW_Installation_troubleshooting.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Troubleshooting Guide 8 | 9 | This section covers how to solve the reported issues. This section will be updated, continuously. 10 | 11 | ## SPGW-C or UPF is not working 12 | Please check the log with below commands: 13 | ```bash 14 | $ kubectl logs spgwc-0 -n riab -c spgwc # for SPGW-C log 15 | $ kubectl logs upf-0 -n riab -c bess # for UPF log 16 | ``` 17 | 18 | In the log, if we can see `unsupported CPU type` or `a specific flag (e.g., AES) is missing`, we should check the CPU microarchitecture. RiaB requires Intel Haswell or more recent CPU microarchitecture. 19 | If we have the appropriate CPU type, we should build SPGW-C or UPF image on the machine where RiaB will run. 20 | 21 | To build SPGW-C, first clone the SPGW-C repository on the machine with `git clone https://github.com/omec-project/spgw`. Then, edit below line in Makefile: 22 | ```makefile 23 | DOCKER_BUILD_ARGS ?= --build-arg RTE_MACHINE='native' 24 | ``` 25 | Then, run `make` on the `spgw` directory. 26 | 27 | Likewise, for building UPF image, we should clone UPF repository with `git clone https://github.com/omec-project/upf-epc`. Then, edit below line in Makefile: 28 | ```makefile 29 | CPU ?= native 30 | ``` 31 | Then, run `make` on the `upf-epc` directory. 32 | 33 | After building those images, we should modify overriding value yaml file (i.e., `sdran-in-a-box-values.yaml`). Go to the file and write down below: 34 | ```yaml 35 | images: 36 | tags: 37 | spgwc: 38 | bess: 39 | pfcpiface: 40 | pullPolicy: IfNotPresent 41 | ``` 42 | Then, run below commands: 43 | ```bash 44 | $ cd /path/to/sdran-in-a-box 45 | $ make reset-test 46 | # after all OMEC pods are deleted, run make again 47 | $ make 48 | ``` 49 | 50 | ## ETCD is not working 51 | Sometimes, we see the below outputs when building RiaB. 52 | ```text 53 | TASK [etcd : Configure | Ensure etcd is running] *********************************************************************** 54 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (4 retries left). 55 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (3 retries left). 56 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (2 retries left). 57 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (1 retries left). 58 | ``` 59 | 60 | If we see this, we can command below: 61 | ```bash 62 | $ sudo systemctl restart docker 63 | $ cd /path/to/sdran-in-a-box 64 | $ make 65 | ``` 66 | 67 | ## Atomix controllers cannot be deleted/reset 68 | Sometimes, Atomix controllers cannot be deleted (maybe we will get stuck when deleting Atomix controller pods) when we command `make reset-test`. 69 | ```bash 70 | rm -f /tmp/build/milestones/oai-enb-cu 71 | rm -f /tmp/build/milestones/oai-enb-du 72 | rm -f /tmp/build/milestones/oai-ue 73 | helm delete -n riab sd-ran || true 74 | release "sd-ran" uninstalled 75 | cd /tmp/build/milestones; rm -f ric 76 | kubectl delete -f https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml || true 77 | customresourcedefinition.apiextensions.k8s.io "databases.cloud.atomix.io" deleted 78 | customresourcedefinition.apiextensions.k8s.io "partitions.cloud.atomix.io" deleted 79 | customresourcedefinition.apiextensions.k8s.io "members.cloud.atomix.io" deleted 80 | customresourcedefinition.apiextensions.k8s.io "primitives.cloud.atomix.io" deleted 81 | serviceaccount "atomix-controller" deleted 82 | clusterrole.rbac.authorization.k8s.io "atomix-controller" deleted 83 | clusterrolebinding.rbac.authorization.k8s.io "atomix-controller" deleted 84 | service "atomix-controller" deleted 85 | deployment.apps "atomix-controller" deleted 86 | ``` 87 | 88 | If the script is stopped here, we can command: 89 | ```bash 90 | # Commmand Ctrl+c first to stop the Makefile script if the make reset-test is got stuck. Then command below. 91 | $ make reset-atomix # Manually delete Atomix controller pods 92 | $ make atomix # Manually install Atomix controller pods 93 | $ make reset-test # Then, make reset-test again 94 | ``` 95 | 96 | Or, sometimes we see this when deploying RiaB: 97 | ```text 98 | Error from server (AlreadyExists): error when creating "https://raw.githubusercontent.com/atomix/kubernetes-controller/master/deploy/atomix-controller.yaml": object is being deleted: customresourcedefinitions.apiextensions.k8s.io "members.cloud.atomix.io" already exists 99 | Makefile:231: recipe for target '/tmp/build/milestones/atomix' failed 100 | ``` 101 | 102 | In this case, we can manually delete atomix with the command `make atomix || make reset-atomix`, and then resume to deploy RiaB. 103 | 104 | ## Pod onos-consensus-db-1-0 initialization failed 105 | 106 | In Ubuntu 20.04 (kernel 5.4.0-65-generic), the k8s pod named `onos-consensus-db-1-0` might fail due to a bug of using go and alpine together (e.g., https://github.com/docker-library/golang/issues/320). 107 | 108 | It can be seen in `kubectl logs -n riab onos-consensus-db-1-0` as: 109 | ```bash 110 | runtime: mlock of signal stack failed: 12 111 | runtime: increase the mlock limit (ulimit -l) or 112 | runtime: update your kernel to 5.3.15+, 5.4.2+, or 5.5+ 113 | fatal error: mlock failed 114 | ``` 115 | 116 | Such pod utilizes the docker image atomix/raft-storage-node:v0.5.3, tagged from the build of the image atomix/dragonboat-raft-storage-node:latest available at https://github.com/atomix/dragonboat-raft-storage-node. 117 | 118 | A quick fix (allowing an unlimited amount memory to be locked by the pod) to this issue is cloning the repository https://github.com/atomix/dragonboat-raft-storage-node, and changing the Makefile: 119 | 120 | ```bash 121 | # Before change 122 | image: build 123 | docker build . -f build/dragonboat-raft-storage-node/Dockerfile -t atomix/dragonboat-raft-storage-node:${RAFT_STORAGE_NODE_VERSION} 124 | 125 | # After change: unlimited maximum locked-in-memory address space 126 | image: build 127 | docker build --ulimit memlock=-1 . -f build/dragonboat-raft-storage-node/Dockerfile -t atomix/dragonboat-raft-storage-node:${RAFT_STORAGE_NODE_VERSION} 128 | ``` 129 | 130 | Then running in the source dir of this repository the command `make image`, and tagging the built image as: 131 | 132 | ```bash 133 | docker tag atomix/dragonboat-raft-storage-node:latest atomix/raft-storage-node:v0.5.3 134 | ``` 135 | 136 | After that proceed with the execution of the Riab setup again. 137 | 138 | 139 | ## Other issues? 140 | Please contact ONF SD-RAN team, if you see any issue. Any issue report from users is very welcome. 141 | Mostly, the redeployment by using `make reset-test and make [option]` resolves issues. -------------------------------------------------------------------------------- /docs/Installation_RANSim_FBAH.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Installation with RAN-Simulator and Facebook-AirHop xAPP 8 | This document covers how to install ONOS RIC services with RAN-Simulator and Facebook-Airhop xAPP. 9 | With this option, RiaB will deploy ONOS RIC services including ONOS-KPIMON (KPM 2.0 supported) together with RAN-Simulator and Facebook-AirHop xAPP. 10 | 11 | ## Clone this repository 12 | To begin with, clone this repository: 13 | ```bash 14 | $ git clone https://github.com/onosproject/sdran-in-a-box 15 | ``` 16 | **NOTE: If we want to use a specific release, we can change the branch with `git checkout [args]` command:** 17 | ```bash 18 | $ cd /path/to/sdran-in-a-box 19 | $ git checkout v1.1.0 # for release 1.1 20 | $ git checkout v1.1.1 # for release 1.1.1 21 | $ git checkout v1.2.0 # for release 1.2 22 | $ git checkout v1.3.0 # for release 1.3 23 | $ git checkout v1.4.0 # for release 1.4 24 | $ git checkout master # for master 25 | ``` 26 | 27 | ## Deploy RiaB with RAN-Simulator and Facebook-AirHop xAPP 28 | To deploy RiaB with RAN-Simulator and Facebook-AirHop xAPP, we should go to `sdran-in-a-box` directory and command below: 29 | ```bash 30 | $ cd /path/to/sdran-in-a-box 31 | # type one of below commands 32 | # for "master-stable" version 33 | $ make riab OPT=fbah VER=stable # or just make riab OPT=fbah 34 | # for "latest" version 35 | $ make riab OPT=fbah VER=latest 36 | # for a specific version 37 | $ make riab OPT=fbah VER=v1.1.0 # for release SD-RAN 1.1 38 | $ make riab OPT=fbah VER=v1.1.1 # for release SD-RAN 1.1.1 39 | $ make riab OPT=fbah VER=v1.2.0 # for release SD-RAN 1.2 40 | $ make riab OPT=fbah VER=v1.3.0 # for release SD-RAN 1.3 41 | $ make riab OPT=fbah VER=v1.4.0 # for release SD-RAN 1.4 42 | # for a "dev" version 43 | $ make riab OPT=fbah VER=dev # for dev version 44 | ``` 45 | 46 | Once we push one of above commands, the deployment procedure starts. 47 | 48 | If we don't see any error or failure messages, everything is deployed. 49 | ```bash 50 | $ kubectl get po --all-namespaces 51 | NAMESPACE NAME READY STATUS RESTARTS AGE 52 | kube-system atomix-controller-99f978c7d-85cpn 1/1 Running 0 25m 53 | kube-system atomix-raft-storage-controller-75979cfff8-4bsnz 1/1 Running 0 25m 54 | kube-system calico-kube-controllers-584ddbb8fb-nxb7l 1/1 Running 0 4h42m 55 | kube-system calico-node-s5czk 1/1 Running 1 4h42m 56 | kube-system coredns-dff8fc7d-nznzf 1/1 Running 0 4h42m 57 | kube-system dns-autoscaler-5d74bb9b8f-cfwvp 1/1 Running 0 4h42m 58 | kube-system kube-apiserver-node1 1/1 Running 0 4h43m 59 | kube-system kube-controller-manager-node1 1/1 Running 0 4h43m 60 | kube-system kube-multus-ds-amd64-r42zf 1/1 Running 0 4h42m 61 | kube-system kube-proxy-vp7k7 1/1 Running 1 4h43m 62 | kube-system kube-scheduler-node1 1/1 Running 0 4h43m 63 | kube-system kubernetes-dashboard-667c4c65f8-cr6q5 1/1 Running 0 4h42m 64 | kube-system kubernetes-metrics-scraper-54fbb4d595-t8rgz 1/1 Running 0 4h42m 65 | kube-system nodelocaldns-rc6w7 1/1 Running 0 4h42m 66 | kube-system onos-operator-app-d56cb6f55-stfkb 1/1 Running 0 24m 67 | kube-system onos-operator-config-7986b568b-f8dlq 1/1 Running 0 24m 68 | kube-system onos-operator-topo-76fdf46db5-h2vvd 1/1 Running 0 24m 69 | riab ah-eson-test-server-ccf5ccf5d-jcmj7 1/1 Running 0 2m52s 70 | riab fb-ah-gui-64689f6986-tjvpc 1/1 Running 0 88s 71 | riab fb-ah-xapp-58b745fcf9-6bgbv 2/2 Running 0 70s 72 | riab fb-kpimon-xapp-5c78fd7486-ms6wq 2/2 Running 2 2m52s 73 | riab onos-a1t-84db77df99-4klzb 2/2 Running 0 2m52s 74 | riab onos-cli-6b746874c8-9cn82 1/1 Running 0 2m52s 75 | riab onos-config-7bd4b6f7f6-b24ws 4/4 Running 0 2m52s 76 | riab onos-consensus-store-0 1/1 Running 0 2m51s 77 | riab onos-e2t-58b4cd867-ljmpr 3/3 Running 0 2m52s 78 | riab onos-kpimon-966bdf77f-97pmr 2/2 Running 0 2m51s 79 | riab onos-topo-7cc9d754d7-kngj9 3/3 Running 0 2m51s 80 | riab onos-uenib-779cb5dbd6-tb7nm 3/3 Running 0 2m51s 81 | riab ran-simulator-85b945db79-ltjnd 1/1 Running 0 2m51s 82 | ``` 83 | 84 | NOTE: If we see any issue when deploying RiaB, please check [Troubleshooting](./troubleshooting.md) 85 | 86 | ## End-to-End (E2E) tests for verification 87 | In order to check whether everything is running, we should conduct some E2E tests and check their results. 88 | Since RAN-Sim does only generate SD-RAN control messages, we can run E2E tests on the SD-RAN control plane. 89 | 90 | ### The E2E test on SD-RAN control plane 91 | * `make test-kpimon`: 92 | ```bash 93 | $ make test-kpimon 94 | ... 95 | *** Get KPIMON result through CLI *** 96 | Node ID Cell Object ID Cell Global ID Time RRC.Conn.Avg RRC.Conn.Max RRC.ConnEstabAtt.Sum RRC.ConnEstabSucc.Sum RRC.ConnReEstabAtt.HOFail RRC.ConnReEstabAtt.Other RRC.ConnReEstabAtt.Sum RRC.ConnReEstabAtt.reconfigFail 97 | e2:1/5153 13842601454c001 1454c001 03:11:28.0 2 2 0 0 0 0 0 0 98 | e2:1/5153 13842601454c002 1454c002 03:11:28.0 3 3 0 0 0 0 0 0 99 | e2:1/5153 13842601454c003 1454c003 03:11:28.0 2 2 0 0 0 0 0 0 100 | e2:1/5154 138426014550001 14550001 03:11:51.0 1 1 0 0 0 0 0 0 101 | e2:1/5154 138426014550002 14550002 03:11:51.0 2 2 0 0 0 0 0 0 102 | e2:1/5154 138426014550003 14550003 03:11:50.0 1 1 0 0 0 0 0 0 103 | ``` 104 | 105 | * Use Facebook-AirHop GUI page: for SD-RAN release 1.1, release 1.1.1, release 1.2, release 1.3, master-stable, latest, and dev versions 106 | 107 | ### GUI [for SD-RAN release 1.2 and beyond] 108 | 109 | To access GUI, we should open web browser like [Chrome](https://www.google.com/chrome/) or [Safari](https://www.apple.com/safari/). 110 | Next, go to `http://:30095` 111 | Then, we can see the xAPP webpage. 112 | 113 | ![FBAH WEB GUI](./figures/fbah-with-map-v1.2.png) 114 | 115 | *Note: If we put the mouse cursor over the black circles, some tool tips should pop up.* 116 | 117 | *Note: If we want to change the cell's location, please see push-cell-loc.sh file in scripts directory.* 118 | 119 | ### GUI [for SD-RAN release 1.1 and 1.1.1] 120 | 121 | To access GUI, we should open web browser like [Chrome](https://www.google.com/chrome/) or [Safari](https://www.apple.com/safari/). 122 | Next, go to `http://:30095` 123 | Then, we can see the xAPP webpage. 124 | 125 | ![FBAH WEB GUI](./figures/fbah-no-map-v1.1.png) 126 | 127 | On this page, we can see the `Cells` table which shows ECGI, PCI, and each cell's neighbor cells. 128 | 129 | If we want to see the Google Map View, we should make a SSH tunnel from our local machine to the RiaB server with below command: 130 | ```bash 131 | $ ssh @ -L "*:8080::30095" 132 | ``` 133 | After that, go to `http://localhost:8080` on the web browser. 134 | 135 | ![FBAH WEB GUI](./figures/fbah-with-map-v1.1.png) 136 | 137 | Since the Google Map API only allows us to use the url `localhost:8080` to show Google Map view, we should make the SSH tunnel. 138 | 139 | NOTE 1: Of course, all other port forwarding should work as long as we can access the GUI with `localhost:8080` URL. 140 | 141 | ## Other commands 142 | ### Reset and delete RiaB environment 143 | If we want to reset our RiaB environment or delete RiaB compoents, we can use below commands: 144 | * `make reset-test`: It deletes ONOS RIC services and RAN-Simulator but Kubernetes is still running 145 | * `make clean`: It just deletes Kubernets environment; Eventually, all ONOS RIC and RAN-Simulator are terminated; The Helm chart directory is not deleted 146 | * `make clean-all`: It deletes all including Kubernetes environment, all componentes/PODs which RiaB deployed, and even the Helm chart directory 147 | 148 | ### Deploy or reset a chart/service 149 | If we want to only deploy or reset a chart/service, we can use below command: 150 | * `make atomix`: It deploys Atomix controllers 151 | * `make reset-atomix`: It deletes Atomix controllers 152 | * `make ric`: It deploys ONOS RIC services 153 | * `make reset-ric`: It deletes ONOS RIC services -------------------------------------------------------------------------------- /docs/RiaB_Prerequisites.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Prerequisites 8 | 9 | ## Supported machines and OS 10 | In order to run RiaB, we should prepare at least a single machine which has the below minimum requirements. 11 | 12 | * CloudLab Wisconsin and Utah clusters 13 | * CPU: Intel CPU and Haswell microarchitecture or beyond; at least 4 cores 14 | * OS: Ubuntu 18.04 (e.g., OnePC-Ubuntu18.04 profile in CloudLab) 15 | * RAM: At least 16GB 16 | * Storage: At least 50GB (recommendation: 100GB) 17 | * Any baremetal server, VM, or public cloud VM (e.g., Amazon AWS, MS Azure, Google Cloud, etc.) 18 | * CPU: Intel CPU and Haswell microarchitecture or beyond; at least 4 cores 19 | * OS: Ubuntu 18.04 (under test with Ubuntu 20.04) 20 | * RAM: At least 16GB 21 | * Storage: At least 50GB (recommendation: 100GB) 22 | -------------------------------------------------------------------------------- /docs/Troubleshooting.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | # Troubleshooting 8 | This section covers how to solve the reported issues. This section will be updated, continuously. 9 | 10 | ## Helm charts are out-of-date 11 | If we want to update Helm chart up-to-date, we can fetch all charts to `~/helm-charts/aether-helm-charts` and `~/helm-charts/sdran-helm-charts` directories. 12 | For the development perspective, sometimes we need to fetch the latest Helm chart commits, although the RiaB uses a specific chart version. This command fetches all latest commits: 13 | ```bash 14 | $ make fetch-all-charts 15 | ``` 16 | It just fetches the all latest commits, i.e., it does not change/checkout the specific branch/commit. 17 | 18 | NOTE: It may request credentials for the OpenCORD gerrit and SD-RAN Github. 19 | 20 | ## SPGW-C or UPF is not working 21 | Please check the log with below commands: 22 | ```bash 23 | $ kubectl logs spgwc-0 -n riab -c spgwc # for SPGW-C log 24 | $ kubectl logs upf-0 -n riab -c bess # for UPF log 25 | ``` 26 | 27 | In the log, if we can see `unsupported CPU type` or `a specific flag (e.g., AES) is missing`, we should check the CPU microarchitecture. RiaB requires Intel Haswell or more recent CPU microarchitecture. 28 | If we have the appropriate CPU type, we should build SPGW-C or UPF image on the machine where RiaB will run. 29 | 30 | To build SPGW-C, first clone the SPGW-C repository on the machine with `git clone https://github.com/omec-project/spgw`. Then, edit below line in Makefile: 31 | ```makefile 32 | DOCKER_BUILD_ARGS ?= --build-arg RTE_MACHINE='native' 33 | ``` 34 | Then, run `make` on the `spgw` directory. 35 | 36 | Likewise, for building UPF image, we should clone UPF repository with `git clone https://github.com/omec-project/upf-epc`. Then, edit below line in Makefile: 37 | ```makefile 38 | CPU ?= native 39 | ``` 40 | Then, run `make` on the `upf-epc` directory. 41 | 42 | After building those images, we should modify overriding value yaml file (i.e., `sdran-in-a-box-values.yaml`). Go to the file and write down below: 43 | ```yaml 44 | images: 45 | tags: 46 | spgwc: 47 | bess: 48 | pfcpiface: 49 | pullPolicy: IfNotPresent 50 | ``` 51 | Then, run below commands: 52 | ```bash 53 | $ cd /path/to/sdran-in-a-box 54 | $ make reset-test 55 | # after all OMEC pods are deleted, run make again 56 | $ make 57 | ``` 58 | 59 | ## ETCD is not working 60 | Sometimes, we see the below outputs when building RiaB. 61 | ```text 62 | TASK [etcd : Configure | Ensure etcd is running] *********************************************************************** 63 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (4 retries left). 64 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (3 retries left). 65 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (2 retries left). 66 | FAILED - RETRYING: Configure | Check if etcd cluster is healthy (1 retries left). 67 | ``` 68 | 69 | If we see this, we can command below: 70 | ```bash 71 | $ sudo systemctl restart docker 72 | $ cd /path/to/sdran-in-a-box 73 | $ make 74 | ``` 75 | 76 | ## Pod onos-consensus-db-1-0 initialization failed 77 | 78 | In Ubuntu 20.04 (kernel 5.4.0-65-generic), the k8s pod named `onos-consensus-db-1-0` might fail due to a bug of using go and alpine together (e.g., https://github.com/docker-library/golang/issues/320). 79 | 80 | It can be seen in `kubectl logs -n riab onos-consensus-db-1-0` as: 81 | ```bash 82 | runtime: mlock of signal stack failed: 12 83 | runtime: increase the mlock limit (ulimit -l) or 84 | runtime: update your kernel to 5.3.15+, 5.4.2+, or 5.5+ 85 | fatal error: mlock failed 86 | ``` 87 | 88 | Such pod utilizes the docker image atomix/raft-storage-node:v0.5.3, tagged from the build of the image atomix/dragonboat-raft-storage-node:latest available at https://github.com/atomix/dragonboat-raft-storage-node. 89 | 90 | A quick fix (allowing an unlimited amount memory to be locked by the pod) to this issue is cloning the repository https://github.com/atomix/dragonboat-raft-storage-node, and changing the Makefile: 91 | 92 | ```bash 93 | # Before change 94 | image: build 95 | docker build . -f build/dragonboat-raft-storage-node/Dockerfile -t atomix/dragonboat-raft-storage-node:${RAFT_STORAGE_NODE_VERSION} 96 | 97 | # After change: unlimited maximum locked-in-memory address space 98 | image: build 99 | docker build --ulimit memlock=-1 . -f build/dragonboat-raft-storage-node/Dockerfile -t atomix/dragonboat-raft-storage-node:${RAFT_STORAGE_NODE_VERSION} 100 | ``` 101 | 102 | Then running in the source dir of this repository the command `make image`, and tagging the built image as: 103 | 104 | ```bash 105 | docker tag atomix/dragonboat-raft-storage-node:latest atomix/raft-storage-node:v0.5.3 106 | ``` 107 | 108 | After that proceed with the execution of the Riab setup again. 109 | 110 | ## Cannot see Google Map view on the Facebook-AirHop xAPP GUI 111 | ### for all SD-RAN releases 112 | Please remove caches and then try again. 113 | Or, it would be good to use `Incognito window` in Chrome. 114 | 115 | ### only for SD-RAN release 1.1 and 1.1.1 116 | The Google Map API in the Facebook-AirHop xAPP GUI only allows us to use `localhost:8080` URL. 117 | If we runs Facebook-AirHop xAPP on the remote machine, we have to make a SSH tunnel from the local machine to the remote machine: 118 | ```bash 119 | $ ssh @ -L "*:8080::30095" 120 | ``` 121 | 122 | ## Failed to install with `Create kubeadm token for joining nodes with 24h expiration` message 123 | In order to resolve this problem, we need to reinstall RiaB again. 124 | You should `make clean` or `make clean-all` and then install RiaB again. 125 | 126 | ## Failed to clean RiaB 127 | When we clean up RiaB, sometimes we can see below error messages. 128 | ```bash 129 | TASK [reset : reset | gather mounted kubelet dirs] ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* 130 | fatal: [node1]: FAILED! => {"changed": true, "cmd": "set -o pipefail && mount | grep /var/lib/kubelet/ | awk '{print $3}' | tac", "delta": "0:00:00.007286", "end": "2021-07-15 19:15:47.566996", "msg": "non-zero return code", "rc": 1, "start": "2021-07-15 19:15:47.559710", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} 131 | 132 | PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 133 | localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 134 | node1 : ok=14 changed=7 unreachable=0 failed=1 skipped=22 rescued=0 ignored=0 135 | ``` 136 | 137 | The easiest way to solve this issue is to remove Kubernetes manually. 138 | Here is the instructions to remote the Kubernetes. 139 | ```bash 140 | sudo reboot 141 | 142 | docker rm -f $(docker ps -qa) 143 | docker rmi -f $(docker images -q) 144 | docker volume rm $(docker volume ls -q) 145 | 146 | sudo su 147 | 148 | for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done 149 | 150 | rm -rf /etc/ceph \ 151 | /etc/cni \ 152 | /etc/kubernetes \ 153 | /opt/cni \ 154 | /opt/rke \ 155 | /run/secrets/kubernetes.io \ 156 | /run/calico \ 157 | /run/flannel \ 158 | /var/lib/calico \ 159 | /var/lib/etcd \ 160 | /var/lib/cni \ 161 | /var/lib/kubelet \ 162 | /var/lib/rancher/rke/log \ 163 | /var/log/containers \ 164 | /var/log/kube-audit \ 165 | /var/log/pods \ 166 | /var/run/calico 167 | 168 | sudo reboot 169 | ``` 170 | 171 | ## Other issues? 172 | Please contact ONF SD-RAN team, if you see any issue. Any issue report from users is very welcome. 173 | Mostly, the redeployment by using `make clean-all and make [option]` resolves issues. -------------------------------------------------------------------------------- /docs/figures/fbah-no-map-v1.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onosproject/sdran-in-a-box/68a91e5d15f64f34330e248e8dbac220d70a4dff/docs/figures/fbah-no-map-v1.1.png -------------------------------------------------------------------------------- /docs/figures/fbah-with-map-v1.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onosproject/sdran-in-a-box/68a91e5d15f64f34330e248e8dbac220d70a4dff/docs/figures/fbah-with-map-v1.1.png -------------------------------------------------------------------------------- /docs/figures/fbah-with-map-v1.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onosproject/sdran-in-a-box/68a91e5d15f64f34330e248e8dbac220d70a4dff/docs/figures/fbah-with-map-v1.2.png -------------------------------------------------------------------------------- /docs/figures/hw_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onosproject/sdran-in-a-box/68a91e5d15f64f34330e248e8dbac220d70a4dff/docs/figures/hw_install.png -------------------------------------------------------------------------------- /mk/epc.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | EPC_PHONY := omec 5gc 6 | 7 | omec: $(M)/omec 8 | 5gc: $(M)/5gc 9 | 10 | $(M)/omec: | version $(M)/helm-ready $(M)/fabric 11 | sudo sysctl -w fs.file-max=9223372036854775807 12 | sudo sysctl -w fs.inotify.max_user_instances=1024 13 | kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) 14 | helm repo update 15 | helm dep up $(AETHERCHARTDIR)/sdcore-helm-charts 16 | helm upgrade --install $(HELM_ARGS) \ 17 | --namespace $(RIAB_NAMESPACE) \ 18 | --values $(HELM_VALUES) \ 19 | --set omec-control-plane.config.spgwc.cfgFiles.cp.json.ip_pool_config.ueIpPool.ip=$(UE_IP_POOL) \ 20 | --set omec-control-plane.config.spgwc.cfgFiles.cp.json.ip_pool_config.staticUeIpPool.ip=$(STATIC_UE_IP_POOL) \ 21 | --set omec-user-plane.config.upf.cfgFiles.upf.jsonc.cpiface.ue_ip_pool=$(UE_IP_POOL)/$(UE_IP_MASK) \ 22 | sd-core \ 23 | $(AETHERCHARTDIR)/sdcore-helm-charts && \ 24 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=sd-core --timeout=300s && \ 25 | touch $@ 26 | 27 | $(M)/5gc: | version $(M)/helm-ready $(M)/fabric 28 | kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) 29 | helm repo update 30 | helm dep up $(AETHERCHARTDIR)/omec/5g-control-plane 31 | helm upgrade --install $(HELM_ARGS) \ 32 | --namespace $(RIAB_NAMESPACE) \ 33 | --values $(HELM_VALUES) \ 34 | sim-app \ 35 | $(AETHERCHARTDIR)/omec/omec-sub-provision && \ 36 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=sim-app --timeout=300s && \ 37 | helm upgrade --install $(HELM_ARGS) \ 38 | --namespace $(RIAB_NAMESPACE) \ 39 | --values $(HELM_VALUES) \ 40 | 5g-core-up \ 41 | $(AETHERCHARTDIR)/omec/omec-user-plane && \ 42 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=5g-core-up --timeout=300s && \ 43 | helm upgrade --install $(HELM_ARGS) \ 44 | --namespace $(RIAB_NAMESPACE) \ 45 | --values $(HELM_VALUES) \ 46 | --set config.upf.cfgFiles.upf.json.cpiface.ue_ip_pool=$(UE_IP_POOL)/$(UE_IP_MASK) \ 47 | fgc-core \ 48 | $(AETHERCHARTDIR)/omec/5g-control-plane && \ 49 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=fgc-core --timeout=300s && \ 50 | helm upgrade --install $(HELM_ARGS) \ 51 | --namespace $(RIAB_NAMESPACE) \ 52 | --values $(HELM_VALUES) \ 53 | 5g-ransim-plane \ 54 | $(AETHERCHARTDIR)/omec/5g-ran-sim && \ 55 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=5g-ransim-plane --timeout=300s 56 | touch $@ -------------------------------------------------------------------------------- /mk/infra.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | INFRA_PHONY := infra-k8s infra-fabric infra-atomix infra-onos-op infra-fabric-cu-du infra-prom-op-servicemonitor 6 | 7 | infra-k8s: $(M)/k8s-ready $(M)/helm-ready 8 | infra-fabric: $(M)/fabric 9 | infra-fabric-cu-du: $(M)/fabric-cu-du 10 | infra-atomix: $(M)/atomix 11 | infra-onos-op: $(M)/onos-operator 12 | infra-prom-op-servicemonitor: $(M)/prom-op-servicemonitor 13 | 14 | $(M)/k8s-ready: | $(M)/setup 15 | sudo mkdir -p /etc/rancher/rke2/ 16 | [ -d /usr/local/etc/emulab ] && [ ! -e /var/lib/rancher ] && sudo ln -s /var/lib/rancher /mnt/extra/rancher || true # that link gets deleted on cleanup 17 | echo "cni: multus,calico" >> config.yaml 18 | echo "cluster-cidr: 192.168.84.0/24" >> config.yaml 19 | echo "service-cidr: 192.168.85.0/24" >> config.yaml 20 | echo "kubelet-arg:" >> config.yaml 21 | echo "- --allowed-unsafe-sysctls="net.*"" >> config.yaml 22 | echo "- --node-ip="$(NODE_IP)"" >> config.yaml 23 | echo "pause-image: k8s.gcr.io/pause:3.3" >> config.yaml 24 | echo "kube-proxy-arg:" >> config.yaml 25 | echo "- --metrics-bind-address="0.0.0.0:10249"" >> config.yaml 26 | echo "- --proxy-mode="ipvs"" >> config.yaml 27 | echo "kube-apiserver-arg:" >> config.yaml 28 | echo "- --service-node-port-range="2000-36767"" >> config.yaml 29 | sudo mv config.yaml /etc/rancher/rke2/ 30 | curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_VERSION=$(RKE2_K8S_VERSION) sh - 31 | sudo systemctl enable rke2-server.service 32 | sudo systemctl start rke2-server.service 33 | sudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml wait nodes --for=condition=Ready --all --timeout=300s 34 | sudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml wait deployment -n kube-system --for=condition=available --all --timeout=300s 35 | @$(eval STORAGE_CLASS := $(shell /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get storageclass -o name)) 36 | @echo "STORAGE_CLASS: ${STORAGE_CLASS}" 37 | if [ "$(STORAGE_CLASS)" == "" ]; then \ 38 | sudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/$(LPP_VERSION)/deploy/local-path-storage.yaml --wait=true; \ 39 | sudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'; \ 40 | fi 41 | curl -LO "https://dl.k8s.io/release/$(KUBECTL_VERSION)/bin/linux/amd64/kubectl" 42 | sudo chmod +x kubectl 43 | sudo mv kubectl /usr/local/bin/ 44 | kubectl version --client 45 | mkdir -p $(HOME)/.kube 46 | sudo cp /etc/rancher/rke2/rke2.yaml $(HOME)/.kube/config 47 | sudo chown -R $(shell id -u):$(shell id -g) $(HOME)/.kube 48 | touch $@ 49 | 50 | $(M)/helm-ready: | $(M)/k8s-ready 51 | curl -fsSL -o ${GET_HELM} https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 52 | chmod 700 ${GET_HELM} 53 | sudo DESIRED_VERSION=$(HELM_VERSION) ./${GET_HELM} 54 | helm repo add incubator $(HELM_INCUBATOR_URL) 55 | helm repo add cord $(HELM_OPENCORD_URL) 56 | helm repo add sdran $(HELM_SDRAN_URL) 57 | helm repo add atomix https://charts.atomix.io 58 | helm repo add onos https://charts.onosproject.org 59 | helm repo update 60 | touch $@ 61 | 62 | /opt/cni/bin/simpleovs: | $(M)/k8s-ready 63 | sudo cp $(RESOURCEDIR)/simpleovs /opt/cni/bin/ 64 | 65 | /opt/cni/bin/static: | $(M)/k8s-ready 66 | mkdir -p $(BUILD)/cni-plugins; cd $(BUILD)/cni-plugins; \ 67 | wget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz && \ 68 | tar xvfz cni-plugins-linux-amd64-v0.8.2.tgz 69 | sudo cp $(BUILD)/cni-plugins/static /opt/cni/bin/ 70 | 71 | $(M)/fabric: | $(M)/setup /opt/cni/bin/simpleovs /opt/cni/bin/static 72 | sudo apt install -y openvswitch-switch 73 | sudo ovs-vsctl --if-exists del-br br-enb-net 74 | sudo ovs-vsctl --may-exist add-br br-enb-net 75 | sudo ovs-vsctl --may-exist add-port br-enb-net enb -- set Interface enb type=internal 76 | sudo ip addr add $(OMEC_ENB_NET_IP) dev enb || true 77 | sudo ip link set enb up 78 | sudo ovs-vsctl --may-exist add-br $(E2_F1_BRIDGE_NAME) 79 | sudo ovs-vsctl --may-exist add-port $(E2_F1_BRIDGE_NAME) $(E2_F1_CU_INTERFACE) -- set Interface $(E2_F1_CU_INTERFACE) type=internal 80 | sudo ovs-vsctl --may-exist add-port $(E2_F1_BRIDGE_NAME) $(E2_F1_DU_INTERFACE) -- set Interface $(E2_F1_DU_INTERFACE) type=internal 81 | sudo ovs-vsctl --may-exist add-port $(E2_F1_BRIDGE_NAME) $(E2T_NODEPORT_INTERFACE) -- set Interface $(E2T_NODEPORT_INTERFACE) type=internal 82 | sudo ip addr add $(E2_F1_CU_IPADDR) dev $(E2_F1_CU_INTERFACE) || true 83 | sudo ip addr add $(E2_F1_DU_IPADDR) dev $(E2_F1_DU_INTERFACE) || true 84 | sudo ip addr add $(E2T_NODEPORT_IPADDR) dev $(E2T_NODEPORT_INTERFACE) || true 85 | sudo ip link set $(E2_F1_CU_INTERFACE) up 86 | sudo ip link set $(E2_F1_DU_INTERFACE) up 87 | sudo ip link set $(E2T_NODEPORT_INTERFACE) up 88 | sudo ethtool --offload enb tx off 89 | sudo ip route replace $(ACCESS_SUBNET) via $(shell echo $(ENB_GATEWAY) | awk -F '/' '{print $$1}') dev enb 90 | cp $(RESOURCEDIR)/router-template.yaml $(RESOURCEDIR)/router.yaml 91 | sed -i -e "s#CORE_GATEWAY#$(CORE_GATEWAY)#" $(RESOURCEDIR)/router.yaml 92 | sed -i -e "s#ENB_GATEWAY#$(ENB_GATEWAY)#" $(RESOURCEDIR)/router.yaml 93 | sed -i -e "s#ACCESS_GATEWAY#$(ACCESS_GATEWAY)#" $(RESOURCEDIR)/router.yaml 94 | kubectl apply -f $(RESOURCEDIR)/router.yaml 95 | kubectl wait pod -n default --for=condition=Ready -l app=router --timeout=300s 96 | kubectl -n default exec router ip route add $(UE_IP_POOL)/$(UE_IP_MASK) via $(shell echo $(UPF_CORE_NET_IP) | awk -F '/' '{print $$1}') || true 97 | touch $@ 98 | 99 | $(M)/fabric-cu-du: | $(M)/setup /opt/cni/bin/simpleovs /opt/cni/bin/static 100 | sudo apt install -y openvswitch-switch 101 | sudo ovs-vsctl --may-exist add-br $(E2_F1_BRIDGE_NAME) 102 | sudo ovs-vsctl --may-exist add-port $(E2_F1_BRIDGE_NAME) $(E2_F1_CU_INTERFACE) -- set Interface $(E2_F1_CU_INTERFACE) type=internal 103 | sudo ovs-vsctl --may-exist add-port $(E2_F1_BRIDGE_NAME) $(E2_F1_DU_INTERFACE) -- set Interface $(E2_F1_DU_INTERFACE) type=internal 104 | sudo ip addr add $(E2_F1_CU_IPADDR) dev $(E2_F1_CU_INTERFACE) || true 105 | sudo ip addr add $(E2_F1_DU_IPADDR) dev $(E2_F1_DU_INTERFACE) || true 106 | sudo ip link set $(E2_F1_CU_INTERFACE) up 107 | sudo ip link set $(E2_F1_DU_INTERFACE) up 108 | touch $@ 109 | 110 | $(M)/prom-op-servicemonitor: | $(M)/k8s-ready 111 | kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.54.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml || true 112 | touch $@ 113 | 114 | $(M)/atomix: | $(M)/k8s-ready 115 | helm repo update 116 | ifeq ($(VER), v1.0.0) 117 | kubectl create -f https://raw.githubusercontent.com/atomix/kubernetes-controller/0a9e82ef37df25cf567a4dbc18f35b2bb454bda1/deploy/atomix-controller.yaml 118 | kubectl create -f https://raw.githubusercontent.com/atomix/raft-storage-controller/668951dff14e339f3c71b489863cbca8ec326a96/deploy/raft-storage-controller.yaml 119 | kubectl create -f https://raw.githubusercontent.com/atomix/cache-storage-controller/85014c6216e3d8cdf22df09aab3d1f16852fc584/deploy/cache-storage-controller.yaml 120 | else ifeq ($(VER), v1.1.0) 121 | helm install -n kube-system atomix-controller atomix/atomix-controller --version 0.5.2 --wait || true 122 | helm install -n kube-system raft-storage-controller atomix/raft-storage-controller --version 0.5.1 --wait || true 123 | helm install -n kube-system cache-storage-controller atomix/cache-storage-controller --version 0.4.0 --wait || true 124 | else ifeq ($(VER), v1.1.1) 125 | helm install -n kube-system atomix-controller atomix/atomix-controller --version 0.5.2 --wait || true 126 | helm install -n kube-system raft-storage-controller atomix/raft-storage-controller --version 0.5.1 --wait || true 127 | helm install -n kube-system cache-storage-controller atomix/cache-storage-controller --version 0.4.0 --wait || true 128 | else ifeq ($(VER), v1.2.0) 129 | helm install -n kube-system atomix-controller atomix/atomix-controller --version 0.6.7 --wait || true 130 | helm install -n kube-system atomix-raft-storage atomix/atomix-raft-storage --version 0.1.8 --wait || true 131 | helm install -n kube-system atomix-memory-storage atomix/atomix-memory-storage --version 0.1.1 --wait || true 132 | else ifeq ($(VER), v1.3.0) 133 | helm install -n kube-system atomix-controller atomix/atomix-controller --version 0.6.8 --wait || true 134 | helm install -n kube-system atomix-raft-storage atomix/atomix-raft-storage --version 0.1.15 --wait || true 135 | else ifeq ($(VER), v1.4.0) 136 | helm install -n kube-system atomix-controller atomix/atomix-controller --version 0.6.9 --wait || true 137 | helm install -n kube-system atomix-raft-storage atomix/atomix-raft-storage --version 0.1.25 --wait || true 138 | else ifeq ($(VER), stable) 139 | helm install -n kube-system atomix-runtime atomix/atomix --version 1.1.2 --wait || true 140 | else ifeq ($(VER), latest) 141 | helm install -n kube-system atomix-runtime atomix/atomix --wait || true 142 | else ifeq ($(VER), dev) 143 | helm install -n kube-system atomix-runtime atomix/atomix --wait || true 144 | else 145 | helm install -n kube-system atomix-runtime atomix/atomix --wait || true 146 | endif 147 | touch $@ 148 | 149 | $(M)/onos-operator: | $(M)/k8s-ready 150 | helm repo update 151 | ifeq ($(VER), v1.0.0) 152 | @echo v1.0.0 does not need onos-operator: skip deploying onos-operator chart 153 | else ifeq ($(VER), v1.1.0) 154 | helm install onos-operator onos/onos-operator -n kube-system --version 0.4.1 --wait || true 155 | else ifeq ($(VER), v1.1.1) 156 | helm install onos-operator onos/onos-operator -n kube-system --version 0.4.1 --wait || true 157 | else ifeq ($(VER), v1.2.0) 158 | helm install onos-operator onos/onos-operator -n kube-system --version 0.4.6 --wait || true 159 | else ifeq ($(VER), v1.3.0) 160 | helm install onos-operator onos/onos-operator -n kube-system --version 0.4.14 --wait || true 161 | else ifeq ($(VER), v1.4.0) 162 | helm install onos-operator onos/onos-operator -n kube-system --version 0.5.2 --wait || true 163 | else ifeq ($(VER), stable) 164 | helm install onos-operator onos/onos-operator -n kube-system --wait || true 165 | else ifeq ($(VER), latest) 166 | helm install onos-operator onos/onos-operator -n kube-system --wait || true 167 | else ifeq ($(VER), dev) 168 | helm install onos-operator onos/onos-operator -n kube-system --wait || true 169 | else 170 | helm install onos-operator onos/onos-operator -n kube-system --wait || true 171 | endif 172 | touch $@ 173 | -------------------------------------------------------------------------------- /mk/obsolete-targets.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | 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 6 | 7 | set-option-oai: 8 | $(eval HELM_ARGS=$(HELM_ARGS_OAI)) 9 | $(eval OPT=oai) 10 | 11 | set-option-ransim: 12 | $(eval HELM_ARGS=$(HELM_ARGS_RANSIM)) 13 | $(eval OPT=ransim) 14 | 15 | set-option-fbah: 16 | $(eval HELM_ARGS=$(HELM_ARGS_FBAH)) 17 | $(eval OPT=fbah) 18 | 19 | set-option-ric: 20 | $(eval HELM_ARGS=$(HELM_ARGS_RIC)) 21 | $(eval OPT=ric) 22 | 23 | set-stable-aether-chart: 24 | cd $(AETHERCHARTDIR); \ 25 | git checkout $(AETHERCHARTCID-LATEST); 26 | 27 | set-latest-sdran-chart: 28 | cd $(SDRANCHARTDIR); \ 29 | git checkout $(SDRANCHARTCID-LATEST) 30 | 31 | set-v1.0.0-sdran-chart: 32 | cd $(SDRANCHARTDIR); \ 33 | git fetch origin $(SDRANCHARTCID-V1.0.0); \ 34 | git checkout $(SDRANCHARTCID-V1.0.0) 35 | 36 | set-v1.1.0-sdran-chart: 37 | cd $(SDRANCHARTDIR); \ 38 | git fetch origin $(SDRANCHARTCID-V1.1.0); \ 39 | git checkout $(SDRANCHARTCID-V1.1.0) 40 | 41 | set-v1.1.1-sdran-chart: 42 | cd $(SDRANCHARTDIR); \ 43 | git fetch origin $(SDRANCHARTCID-V1.1.1); \ 44 | git checkout $(SDRANCHARTCID-V1.1.1) 45 | 46 | set-latest-riab-values: 47 | $(eval HELM_VALUES=$(HELM_VALUES_LATEST)) 48 | $(eval VER=latest) 49 | 50 | set-v1.0.0-riab-values: 51 | $(eval HELM_VALUES=$(HELM_VALUES_V1.0.0)) 52 | $(eval VER=v1.0.0) 53 | 54 | set-v1.1.0-riab-values: 55 | $(eval HELM_VALUES=$(HELM_VALUES_V1.1.0)) 56 | $(eval VER=v1.1.0) 57 | 58 | set-v1.1.1-riab-values: 59 | $(eval HELM_VALUES=$(HELM_VALUES_V1.1.1)) 60 | $(eval VER=v1.1.1) 61 | 62 | set-master-stable-riab-values: 63 | $(eval HELM_VALUES=$(HELM_VALUES_STABLE)) 64 | $(eval VER=stable) 65 | 66 | atomix: $(M)/atomix 67 | 68 | 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 69 | riab-ransim: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric 70 | riab-ric: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric 71 | riab-fbah: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-sdran-chart set-latest-riab-values ric 72 | 73 | riab-oai-latest: riab-oai 74 | riab-ransim-latest: riab-ransim 75 | riab-ric-latest: riab-ric 76 | riab-fbah-latest: riab-fbah 77 | 78 | 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 79 | 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 80 | 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 81 | 82 | 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 83 | 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 84 | 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 85 | 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 86 | 87 | 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 88 | 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 89 | 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 90 | 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 91 | 92 | riab-oai-dev: set-option-oai $(M)/system-check $(M)/helm-ready set-latest-riab-values omec ric oai 93 | riab-ransim-dev: set-option-ransim $(M)/system-check $(M)/helm-ready set-latest-riab-values ric 94 | riab-ric-dev: set-option-ric $(M)/system-check $(M)/helm-ready set-latest-riab-values ric 95 | riab-fbah-dev: set-option-fbah $(M)/system-check $(M)/helm-ready set-latest-riab-values ric 96 | 97 | 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 98 | 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 99 | ric-oai-latest: set-option-oai set-latest-sdran-chart set-latest-riab-values ric 100 | 101 | 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 102 | 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 103 | 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 104 | 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 -------------------------------------------------------------------------------- /mk/preliminaries.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | PRELIMINARIES_PHONY := preliminaries $(M)/proxy-setting 6 | 7 | preliminaries: $(M) $(M)/system-check $(M)/setup 8 | 9 | $(M)/system-check: | $(M) $(M)/repos 10 | @if [[ $(CPU_FAMILY) -eq 6 ]]; then \ 11 | if [[ $(CPU_MODEL) -lt 60 ]]; then \ 12 | echo "FATAL: haswell CPU or newer is required."; \ 13 | exit 1; \ 14 | fi \ 15 | else \ 16 | echo "FATAL: unsupported CPU family."; \ 17 | exit 1; \ 18 | fi 19 | @if [[ $(OS_VENDOR) =~ (Ubuntu) ]] || [[ $(OS_VENDOR) =~ (Debian) ]]; then \ 20 | if [[ ! $(OS_RELEASE) =~ (18.04) ]] && [[ ! $(OS_RELEASE) =~ (20.04) ]]; then \ 21 | echo "WARN: $(OS_VENDOR) $(OS_RELEASE) has not been tested."; \ 22 | fi; \ 23 | if dpkg --compare-versions 4.15 gt $(shell uname -r); then \ 24 | echo "FATAL: kernel 4.15 or later is required."; \ 25 | echo "Please upgrade your kernel by running" \ 26 | "apt install --install-recommends linux-generic-hwe-$(OS_RELEASE)"; \ 27 | exit 1; \ 28 | fi \ 29 | else \ 30 | echo "FAIL: unsupported OS."; \ 31 | exit 1; \ 32 | fi 33 | @if [[ ! -d "$(AETHERCHARTDIR)" ]]; then \ 34 | echo "FATAL: Please manually clone aether-helm-chart under $(CHARTDIR) directory."; \ 35 | exit 1; \ 36 | fi 37 | @if [[ ! -d "$(SDRANCHARTDIR)" ]]; then \ 38 | echo "FATAL: Please manually clone sdran-helm-chart under $(CHARTDIR) directory."; \ 39 | exit 1; \ 40 | fi 41 | touch $@ 42 | 43 | $(M)/setup: | $(M)/system-check $(M)/proxy-setting 44 | sudo $(SCRIPTDIR)/cloudlab-disksetup.sh 45 | sudo apt update; sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm ethtool net-tools 46 | systemctl list-units --full -all | grep "docker.service" || sudo apt install -y docker.io 47 | sudo adduser $(USER) docker || true 48 | touch $@ 49 | 50 | ifeq ($(PROXY_ENABLED),true) 51 | $(M)/proxy-setting: | $(M) 52 | echo "Defaults env_keep += \"HTTP_PROXY HTTPS_PROXY NO_PROXY http_proxy https_proxy no_proxy\"" | sudo EDITOR='tee -a' visudo -f /etc/sudoers.d/proxy 53 | echo "HTTP_PROXY=$(HTTP_PROXY)" >> rke2-server 54 | echo "HTTPS_PROXY=$(HTTPS_PROXY)" >> rke2-server 55 | echo "NO_PROXY=$(NO_PROXY),.cluster.local,.svc,$(NODE_IP),192.168.84.0/24,192.168.85.0/24,$(RAN_SUBNET)" >> rke2-server 56 | sudo mv rke2-server /etc/default/ 57 | echo "[Service]" >> http-proxy.conf 58 | echo "Environment='HTTP_PROXY=$(HTTP_PROXY)'" >> http-proxy.conf 59 | echo "Environment='HTTPS_PROXY=$(HTTPS_PROXY)'" >> http-proxy.conf 60 | echo "Environment='NO_PROXY=$(NO_PROXY)'" >> http-proxy.conf 61 | sudo mkdir -p /etc/systemd/system/docker.service.d 62 | sudo mv http-proxy.conf /etc/systemd/system/docker.service.d 63 | sudo systemctl daemon-reload 64 | sudo systemctl restart docker 65 | touch $(M)/proxy-setting 66 | else 67 | $(M)/proxy-setting: | $(M) 68 | @echo -n "" 69 | touch $(M)/proxy-setting 70 | endif -------------------------------------------------------------------------------- /mk/ran.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | RAN_PHONY := oai oai-hw oai-enb-cu oai-enb-cu-hw oai-enb-du oai-ue 6 | 7 | oai: oai-enb-cu oai-enb-du oai-ue 8 | oai-enb-cu: $(M)/oai-enb-cu 9 | oai-enb-du: $(M)/oai-enb-du 10 | oai-ue: $(M)/oai-ue 11 | 12 | oai-hw: oai-enb-cu-hw oai-enb-du 13 | oai-enb-cu-hw: $(M)/oai-enb-cu-hw 14 | 15 | $(M)/oai-enb-cu: | version $(M)/helm-ready $(M)/ric 16 | $(eval cu_e2t_nodeport_ipaddr=$(shell echo $(E2T_NODEPORT_IPADDR) | awk -F '/' '{print $$1}')) 17 | $(eval cu_e2_f1_cu_ipaddr=$(shell echo $(E2_F1_CU_IPADDR) | awk -F '/' '{print $$1}')) 18 | $(eval cu_e2_f1_du_ipaddr=$(shell echo $(E2_F1_DU_IPADDR) | awk -F '/' '{print $$1}')) 19 | helm upgrade --install $(HELM_ARGS) \ 20 | --namespace $(RIAB_NAMESPACE) \ 21 | --values $(HELM_VALUES) \ 22 | --set config.mme.address=$(MME_IP_ADDR) \ 23 | --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ 24 | --set config.onos-e2t.networks.e2.address=$(cu_e2t_nodeport_ipaddr) \ 25 | --set config.oai-enb-cu.networks.f1.interface=$(E2_F1_CU_INTERFACE) \ 26 | --set config.oai-enb-cu.networks.f1.address=$(cu_e2_f1_cu_ipaddr) \ 27 | --set config.oai-enb-du.networks.f1.interface=$(E2_F1_DU_INTERFACE) \ 28 | --set config.oai-enb-du.networks.f1.address=$(cu_e2_f1_du_ipaddr) \ 29 | oai-enb-cu \ 30 | $(SDRANCHARTDIR)/oai-enb-cu && \ 31 | sleep 60 && \ 32 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l release=oai-enb-cu --timeout=600s && \ 33 | sleep 10 34 | touch $@ 35 | 36 | $(M)/oai-enb-cu-hw: | version $(M)/helm-ready 37 | $(eval cu_e2t_nodeport_ipaddr=$(shell echo $(E2T_NODEPORT_IPADDR) | awk -F '/' '{print $$1}')) 38 | $(eval cu_e2_f1_cu_ipaddr=$(shell echo $(E2_F1_CU_IPADDR) | awk -F '/' '{print $$1}')) 39 | $(eval cu_e2_f1_du_ipaddr=$(shell echo $(E2_F1_DU_IPADDR) | awk -F '/' '{print $$1}')) 40 | helm upgrade --install $(HELM_ARGS) \ 41 | --namespace $(RIAB_NAMESPACE) \ 42 | --values $(HELM_VALUES) \ 43 | --set config.mme.address=$(MME_IP_ADDR) \ 44 | --set config.oai-enb-cu.networks.s1mme.interface=$(S1MME_CU_INTERFACE) \ 45 | --set config.oai-enb-cu.networks.f1.interface=$(E2_F1_CU_INTERFACE) \ 46 | --set config.onos-e2t.networks.e2.address=$(cu_e2t_nodeport_ipaddr) \ 47 | --set config.oai-enb-cu.networks.f1.address=$(cu_e2_f1_cu_ipaddr) \ 48 | --set config.oai-enb-du.networks.f1.interface=$(E2_F1_DU_INTERFACE) \ 49 | --set config.oai-enb-du.networks.f1.address=$(cu_e2_f1_du_ipaddr) \ 50 | oai-enb-cu \ 51 | $(SDRANCHARTDIR)/oai-enb-cu && \ 52 | sleep 60 && \ 53 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-cu --timeout=600s && \ 54 | sleep 10 55 | touch $@ 56 | 57 | $(M)/oai-enb-du: | version $(M)/helm-ready 58 | $(eval du_e2t_nodeport_ipaddr=$(shell echo $(E2T_NODEPORT_IPADDR) | awk -F '/' '{print $$1}')) 59 | $(eval du_e2_f1_cu_ipaddr=$(shell echo $(E2_F1_CU_IPADDR) | awk -F '/' '{print $$1}')) 60 | $(eval du_e2_f1_du_ipaddr=$(shell echo $(E2_F1_DU_IPADDR) | awk -F '/' '{print $$1}')) 61 | helm upgrade --install $(HELM_ARGS) \ 62 | --namespace $(RIAB_NAMESPACE) \ 63 | --values $(HELM_VALUES) \ 64 | --set config.oai-enb-cu.networks.f1.interface=$(E2_F1_CU_INTERFACE) \ 65 | --set config.oai-enb-cu.networks.f1.address=$(du_e2_f1_cu_ipaddr) \ 66 | --set config.oai-enb-du.networks.f1.interface=$(E2_F1_DU_INTERFACE) \ 67 | --set config.oai-enb-du.networks.f1.address=$(du_e2_f1_du_ipaddr) \ 68 | --set config.onos-e2t.networks.e2.address=$(du_e2t_nodeport_ipaddr) \ 69 | --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ 70 | --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ 71 | --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ 72 | --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ 73 | oai-enb-du \ 74 | $(SDRANCHARTDIR)/oai-enb-du && \ 75 | sleep 60 && \ 76 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-enb-du --timeout=600s && \ 77 | sleep 10 78 | touch $@ 79 | 80 | $(M)/oai-ue: | version $(M)/helm-ready 81 | helm upgrade --install $(HELM_ARGS) \ 82 | --namespace $(RIAB_NAMESPACE) \ 83 | --values $(HELM_VALUES) \ 84 | --set config.oai-enb-du.networks.nfapi.interface=$(NFAPI_DU_INTERFACE) \ 85 | --set config.oai-enb-du.networks.nfapi.address=$(NFAPI_DU_IPADDR) \ 86 | --set config.oai-ue.networks.nfapi.interface=$(NFAPI_UE_INTERFACE) \ 87 | --set config.oai-ue.networks.nfapi.address=$(NFAPI_UE_IPADDR) \ 88 | oai-ue \ 89 | $(SDRANCHARTDIR)/oai-ue && \ 90 | sleep 60 && \ 91 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=oai-ue --timeout=600s && \ 92 | touch $@ -------------------------------------------------------------------------------- /mk/releases.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 -------------------------------------------------------------------------------- /mk/reset-clean.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | RESET_CLEAN_PHONY := reset-oai reset-omec reset-atomix reset-onos-op reset-ric reset-fabric reset-oai-test reset-ransim-test reset-test clean clean-all reset-prom-op-servicemonitor 6 | 7 | reset-oai: 8 | helm delete -n $(RIAB_NAMESPACE) oai-enb-cu || true 9 | helm delete -n $(RIAB_NAMESPACE) oai-enb-du || true 10 | helm delete -n $(RIAB_NAMESPACE) oai-ue || true 11 | rm -f $(M)/oai-enb-cu* 12 | rm -f $(M)/oai-enb-du 13 | rm -f $(M)/oai-ue 14 | 15 | reset-oai-enb-cu: 16 | helm delete -n $(RIAB_NAMESPACE) oai-enb-cu || true 17 | rm -f $(M)/oai-enb-cu* 18 | 19 | reset-oai-enb-du: 20 | helm delete -n $(RIAB_NAMESPACE) oai-enb-du || true 21 | rm -f $(M)/oai-enb-du 22 | 23 | reset-oai-ue: 24 | helm delete -n $(RIAB_NAMESPACE) oai-ue || true 25 | rm -f $(M)/oai-ue 26 | 27 | reset-omec: 28 | helm delete -n $(RIAB_NAMESPACE) sd-core || true 29 | cd $(M); rm -f omec 30 | 31 | reset-5gc: 32 | helm uninstall -n $(RIAB_NAMESPACE) sim-app || true 33 | helm uninstall -n $(RIAB_NAMESPACE) fgc-core || true 34 | helm uninstall -n $(RIAB_NAMESPACE) 5g-core-up || true 35 | helm uninstall -n $(RIAB_NAMESPACE) 5g-ransim-plane || true 36 | helm uninstall -n $(RIAB_NAMESPACE) mongo || true 37 | cd $(M); rm -f 5gc 38 | 39 | reset-atomix: 40 | helm uninstall atomix-controller -n kube-system || true 41 | helm uninstall atomix-memory-storage -n kube-system || true 42 | helm uninstall atomix-raft-storage -n kube-system || true 43 | helm uninstall raft-storage-controller -n kube-system || true 44 | helm uninstall cache-storage-controller -n kube-system || true 45 | helm uninstall atomix-runtime -n kube-system || true 46 | kubectl delete -f https://raw.githubusercontent.com/atomix/kubernetes-controller/0a9e82ef37df25cf567a4dbc18f35b2bb454bda1/deploy/atomix-controller.yaml || true 47 | kubectl delete -f https://raw.githubusercontent.com/atomix/raft-storage-controller/668951dff14e339f3c71b489863cbca8ec326a96/deploy/raft-storage-controller.yaml || true 48 | kubectl delete -f https://raw.githubusercontent.com/atomix/cache-storage-controller/85014c6216e3d8cdf22df09aab3d1f16852fc584/deploy/cache-storage-controller.yaml || true 49 | for i in $$(kubectl get crd --no-headers --all-namespaces | grep atomix | awk '{print $$1}'); do for j in $$(kubectl get $$i --no-headers -n kube-system | awk '{print $$1}'); do kubectl patch $$i/$$j -n kube-system --type=merge --patch '{"metadata":{"finalizers":[]}}' || true; done; for k in $$(kubectl get $$i --no-headers -n riab | awk '{print $$1}'); do kubectl patch $$i/$$k -n riab --type=merge --patch '{"metadata":{"finalizers":[]}}' || true; done; kubectl delete crd $$i || true; done 50 | cd $(M); rm -f atomix 51 | 52 | reset-onos-op: 53 | helm uninstall onos-operator -n kube-system || true 54 | for i in $$(kubectl get crd --no-headers --all-namespaces | grep onos | awk '{print $$1}'); do for j in $$(kubectl get $$i --no-headers -n kube-system | awk '{print $$1}'); do kubectl patch $$i/$$j -n kube-system --type=merge --patch '{"metadata":{"finalizers":[]}}' || true; done; for k in $$(kubectl get $$i --no-headers -n riab | awk '{print $$1}'); do kubectl patch $$i/$$k -n riab --type=merge --patch '{"metadata":{"finalizers":[]}}' || true; done; kubectl delete crd $$i || true; done 55 | cd $(M); rm -f onos-operator 56 | 57 | reset-ric: 58 | helm delete -n $(RIAB_NAMESPACE) sd-ran || true 59 | @until [ $$(kubectl get po -n $(RIAB_NAMESPACE) -l app=onos --no-headers | wc -l) == 0 ]; do sleep 1; done 60 | kubectl delete namespace $(RIAB_NAMESPACE) 61 | cd $(M); rm -f ric 62 | 63 | reset-fabric: 64 | kubectl delete -f $(RESOURCEDIR)/router.yaml || true 65 | sudo apt remove --purge openvswitch-switch -y || true 66 | cd $(M); rm -rf fabric 67 | 68 | reset-oai-test: reset-omec reset-fabric reset-oai reset-ric 69 | 70 | reset-ransim-test: reset-ric 71 | 72 | reset-prom-op-servicemonitor: 73 | kubectl delete -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.54.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml || true 74 | cd $(M); rm -rf prom-op-servicemonitor 75 | 76 | reset-test: reset-oai-test reset-5gc reset-ransim-test reset-prom-op-servicemonitor reset-onos-op reset-atomix 77 | 78 | clean: reset-test 79 | helm repo remove sdran || true 80 | sudo /usr/local/bin/rke2-uninstall.sh || true 81 | sudo rm -rf /usr/local/bin/kubectl 82 | rm -rf $(M) 83 | 84 | clean-all: clean 85 | rm -rf $(CHARTDIR) 86 | -------------------------------------------------------------------------------- /mk/ric.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | RIC_PHONY := ric 6 | 7 | ric: $(M)/ric 8 | 9 | $(M)/ric: | version $(M)/helm-ready $(M)/atomix $(M)/onos-operator 10 | kubectl get namespace $(RIAB_NAMESPACE) 2> /dev/null || kubectl create namespace $(RIAB_NAMESPACE) 11 | cd $(SDRANCHARTDIR)/sd-ran; rm -rf charts Chart.lock tmpcharts; helm dep update 12 | helm upgrade --install $(HELM_ARGS) \ 13 | --namespace $(RIAB_NAMESPACE) \ 14 | --values $(HELM_VALUES) \ 15 | sd-ran \ 16 | $(SDRANCHARTDIR)/sd-ran && \ 17 | kubectl wait pod -n $(RIAB_NAMESPACE) --for=condition=Ready -l app=onos --timeout=600s 18 | touch $@ -------------------------------------------------------------------------------- /mk/routing.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # Phony definition 5 | ROUTING_PHONY := routing-hw-oai routing-hw-omec routing-omec routing-external-ran routing-quagga routing-ric-external-ran 6 | 7 | routing-hw-oai: 8 | sudo ethtool -K $(OAI_ENB_NET_INTERFACE) tx off rx off gro off gso off || true 9 | sudo route del -net $(ENB_SUBNET) dev $(OAI_ENB_NET_INTERFACE) || true 10 | sudo route add -net $(ENB_SUBNET) gw $(shell echo $(OMEC_MACHINE_IP) | awk -F '/' '{print $$1}') dev $(OAI_ENB_NET_INTERFACE) || true 11 | sudo route add -net $(ACCESS_SUBNET) gw $(shell echo $(OMEC_MACHINE_IP) | awk -F '/' '{print $$1}') dev $(OAI_ENB_NET_INTERFACE) || true 12 | sudo route add -net $(CORE_SUBNET) gw $(shell echo $(OMEC_MACHINE_IP) | awk -F '/' '{print $$1}') dev $(OAI_ENB_NET_INTERFACE) || true 13 | 14 | routing-hw-omec: routing-omec routing-external-ran routing-quagga 15 | 16 | routing-ric-external-ran: 17 | sudo route add -host $(shell echo $(E2_F1_CU_IPADDR) | awk -F '/' '{print $$1}') gw $(shell echo $(OAI_MACHINE_IP) | awk -F '/' '{print $$1}') dev $(RIC_DEFAULT_IP) || true 18 | sudo route add -host $(shell echo $(E2_F1_DU_IPADDR) | awk -F '/' '{print $$1}') gw $(shell echo $(OAI_MACHINE_IP) | awk -F '/' '{print $$1}') dev $(RIC_DEFAULT_IP) || true 19 | 20 | routing-omec: 21 | sudo ethtool -K $(OMEC_DEFAULT_INTERFACE) rx off tx on gro off gso on || true 22 | sudo ethtool -K enb rx off tx on gro off gso on || true 23 | kubectl exec -it upf-0 -n $(RIAB_NAMESPACE) -- ip l set mtu 1550 dev access || true 24 | kubectl exec -it upf-0 -n $(RIAB_NAMESPACE) -- ip l set mtu 1550 dev core || true 25 | sudo route add -net $(UE_IP_POOL)/$(UE_IP_MASK) gw $(shell echo $(ENB_GATEWAY) | awk -F '/' '{print $$1}') dev enb || true 26 | 27 | routing-external-ran: 28 | sudo route add -host $(shell echo $(OAI_ENB_NET_IP) | awk -F '/' '{print $$1}') gw $(shell echo $(OAI_MACHINE_IP) | awk -F '/' '{print $$1}') dev $(OMEC_DEFAULT_INTERFACE) || true 29 | kubectl exec -it router -- route add -host $(shell echo $(OAI_ENB_NET_IP) | awk -F '/' '{print $$1}') gw $(shell echo $(OMEC_ENB_NET_IP) | awk -F '/' '{print $$1}') dev enb-rtr || true 30 | 31 | routing-quagga: 32 | $(eval ROUTER_IP=$(shell kubectl exec -it router -- ifconfig eth0 | grep inet | awk '{print $$2}' | awk -F ':' '{print $$2}')) 33 | $(eval ROUTER_IF=$(shell route -n | grep $(ROUTER_IP) | awk '{print $$NF}')) 34 | sudo ethtool -K $(ROUTER_IF) gro off rx off || true 35 | kubectl exec -it router -- ifconfig core-rtr mtu 1550 || true 36 | kubectl exec -it router -- ifconfig access-rtr mtu 1550 || true 37 | kubectl exec -it router -- sudo apt update || true 38 | kubectl exec -it router -- sudo apt install ethtool -y || true 39 | kubectl exec -it router -- sudo ethtool -K eth0 tx off rx off gro off gso off || true 40 | kubectl exec -it router -- sudo ethtool -K enb-rtr tx off rx off gro off gso off || true 41 | kubectl exec -it router -- sudo ethtool -K access-rtr tx off rx off gro off gso off || true 42 | kubectl exec -it router -- sudo ethtool -K core-rtr tx off rx off gro off gso off || true -------------------------------------------------------------------------------- /mk/test-cases.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | TEST_PHONY := test-user-plane test-kpimon test-pci 6 | 7 | test-user-plane: | $(M)/omec $(M)/oai-ue 8 | @echo "*** T1: Internal network test: ping $(shell echo $(CORE_GATEWAY) | awk -F '/' '{print $$1}') (Internal router IP) ***"; \ 9 | ping -c 3 $(shell echo $(CORE_GATEWAY) | awk -F '/' '{print $$1}') -I oaitun_ue1; \ 10 | echo "*** T2: Internet connectivity test: ping to 8.8.8.8 ***"; \ 11 | ping -c 3 8.8.8.8 -I oaitun_ue1; \ 12 | echo "*** T3: DNS test: ping to google.com ***"; \ 13 | ping -c 3 google.com -I oaitun_ue1; 14 | 15 | test-kpimon: | $(M)/ric 16 | @echo "*** Get KPIMON result through CLI ***"; \ 17 | kubectl exec -it deploy/onos-cli -n riab -- onos kpimon list metrics; 18 | 19 | test-pci: | $(M)/ric 20 | @echo "*** Get PCI result through CLI ***"; \ 21 | kubectl exec -it deployment/onos-cli -n riab -- onos pci get resolved; 22 | 23 | test-mlb: | $(M)/ric 24 | @echo "*** Get MLB result through CLI ***"; \ 25 | kubectl exec -it deployment/onos-cli -n riab -- onos mlb list ocns; 26 | 27 | test-rnib: | $(M)/ric 28 | @echo "*** Get R-NIB result through CLI ***"; \ 29 | kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity -v; 30 | 31 | test-uenib: | $(M)/ric 32 | @echo "*** Get UE-NIB result through CLI ***"; \ 33 | kubectl exec -it deployment/onos-cli -n riab -- onos uenib get ues -v; 34 | 35 | test-e2-connection: | $(M)/ric 36 | @echo "*** Get E2 connections through CLI ***"; \ 37 | kubectl exec -it deployment/onos-cli -n riab -- onos e2t get connections; 38 | 39 | test-e2-subscription: | $(M)/ric 40 | @echo "*** Get E2 subscriptions through CLI ***"; \ 41 | kubectl exec -it deployment/onos-cli -n riab -- onos e2t get subscriptions; 42 | 43 | test-rsm-dataplane: $(M)/ric $(M)/omec $(M)/oai-ue 44 | @echo "*** Test downlink traffic (UDP) ***" 45 | sudo apt install -y iperf3 46 | kubectl exec -it router -- apt install -y iperf3 --force-yes 47 | iperf3 -s -B $$(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $$2}' | awk -F '/' '{print $$1}') -p 5001 > /dev/null & 48 | kubectl exec -it router -- iperf3 -u -c $$(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $$2}' | awk -F '/' '{print $$1}') -p 5001 -b 20M -l 1450 -O 2 -t 12 --get-server-output 49 | pkill -9 -ef iperf3 50 | 51 | test-mho: | $(M)/ric 52 | @echo "*** Get MHO result through CLI - Cells ***"; \ 53 | kubectl exec -it deployment/onos-cli -n riab -- onos mho get cells; 54 | @echo "*** Get MHO result through CLI - UEs ***"; \ 55 | kubectl exec -it deployment/onos-cli -n riab -- onos mho get ues; 56 | 57 | test-a1t: | $(M)/ric 58 | @echo "*** Get A1T subscriptions through CLI ***"; \ 59 | kubectl exec -it deployment/onos-cli -n riab -- onos a1t get subscription 60 | @echo "*** Get A1T policy type through CLI ***"; \ 61 | kubectl exec -it deployment/onos-cli -n riab -- onos a1t get policy type 62 | @echo "*** Get A1T policy objects through CLI ***"; \ 63 | kubectl exec -it deployment/onos-cli -n riab -- onos a1t get policy object 64 | @echo "*** Get A1T policy status through CLI ***"; \ 65 | kubectl exec -it deployment/onos-cli -n riab -- onos a1t get policy status -------------------------------------------------------------------------------- /mk/utils.mk: -------------------------------------------------------------------------------- 1 | # Copyright 2020-present Open Networking Foundation 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | # PHONY definitions 5 | UTIL_PHONY := detach-ue fetch-all-charts enable-fbah-gui 6 | 7 | detach-ue: | $(M)/oai-enb-cu $(M)/oai-enb-du $(M)/oai-ue 8 | echo -en "AT+CPIN=0000\r" | nc -u -w 1 localhost 10000 9 | echo -en "AT+CGATT=0\r" | nc -u -w 1 localhost 10000 10 | 11 | fetch-all-charts: 12 | cd $(AETHERCHARTDIR); \ 13 | git fetch --all; \ 14 | cd $(SDRANCHARTDIR); \ 15 | git fetch --all; 16 | 17 | 18 | enable-fbah-gui: 19 | kubectl wait --for=condition=available deployment/fb-ah-xapp -n riab --timeout=300s 20 | kubectl wait --for=condition=available deployment/fb-ah-gui -n riab --timeout=300s 21 | kubectl wait --for=condition=available deployment/fb-kpimon-xapp -n riab --timeout=300s 22 | while true; do sleep 1; NUM_CELLS=$$(kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity --no-headers | grep e2cell | wc -l); if [ $$NUM_CELLS -eq 6 ]; then break; fi; echo "Waiting until cells are all up"; done 23 | $(SCRIPTDIR)/push-cell-loc.sh 24 | kubectl rollout -n riab restart deployments/fb-ah-gui 25 | kubectl rollout -n riab status deployments/fb-ah-gui 26 | kubectl rollout -n riab restart deployments/fb-ah-xapp 27 | kubectl rollout -n riab status deployments/fb-ah-xapp -------------------------------------------------------------------------------- /resources/kubespray-reset-defaults.yml: -------------------------------------------------------------------------------- 1 | --- 2 | flush_iptables: true 3 | reset_restart_network: false 4 | -------------------------------------------------------------------------------- /resources/rimedots-sample-a1p.json: -------------------------------------------------------------------------------- 1 | { 2 | "scope":{ 3 | "ueId":"" 4 | }, 5 | "tspResources":[ 6 | { 7 | "cellIdList":[ 8 | { 9 | "plmnId":{ 10 | "mcc":"138", 11 | "mnc":"426" 12 | }, 13 | "cId":{ 14 | "ncI":470106432 15 | } 16 | } 17 | ], 18 | "preference":"FORBID" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /resources/router-sample.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2019-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | --- 6 | apiVersion: "k8s.cni.cncf.io/v1" 7 | kind: NetworkAttachmentDefinition 8 | metadata: 9 | name: core-net 10 | spec: 11 | config: '{ 12 | "cniVersion": "0.3.1", 13 | "type": "simpleovs", 14 | "ipam": { 15 | "type": "static" 16 | } 17 | }' 18 | --- 19 | apiVersion: "k8s.cni.cncf.io/v1" 20 | kind: NetworkAttachmentDefinition 21 | metadata: 22 | name: access-net 23 | spec: 24 | config: '{ 25 | "cniVersion": "0.3.1", 26 | "type": "simpleovs", 27 | "ipam": { 28 | "type": "static" 29 | } 30 | }' 31 | --- 32 | apiVersion: "k8s.cni.cncf.io/v1" 33 | kind: NetworkAttachmentDefinition 34 | metadata: 35 | name: enb-net 36 | spec: 37 | config: '{ 38 | "cniVersion": "0.3.1", 39 | "type": "simpleovs", 40 | "ipam": { 41 | "type": "static" 42 | } 43 | }' 44 | --- 45 | apiVersion: v1 46 | kind: Pod 47 | metadata: 48 | name: router 49 | labels: 50 | app: router 51 | annotations: 52 | k8s.v1.cni.cncf.io/networks: '[ 53 | { "name": "core-net", "interface": "core-rtr", "ips": ["192.168.250.1/24"] }, 54 | { "name": "enb-net", "interface": "enb-rtr", "ips": ["192.168.251.1/24"] }, 55 | { "name": "access-net", "interface": "access-rtr", "ips": ["192.168.252.1/24"] } 56 | ]' 57 | spec: 58 | containers: 59 | - name: quagga 60 | command: ["/bin/bash", "-c"] 61 | args: 62 | - > 63 | sysctl -w net.ipv4.ip_forward=1; 64 | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; 65 | trap : TERM INT; sleep infinity & wait 66 | image: opencord/quagga 67 | securityContext: 68 | privileged: true 69 | capabilities: 70 | add: 71 | - NET_ADMIN 72 | ports: 73 | - containerPort: 2601 74 | -------------------------------------------------------------------------------- /resources/router-template.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2019-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | --- 6 | apiVersion: "k8s.cni.cncf.io/v1" 7 | kind: NetworkAttachmentDefinition 8 | metadata: 9 | name: core-net 10 | spec: 11 | config: '{ 12 | "cniVersion": "0.3.1", 13 | "type": "simpleovs", 14 | "ipam": { 15 | "type": "static" 16 | } 17 | }' 18 | --- 19 | apiVersion: "k8s.cni.cncf.io/v1" 20 | kind: NetworkAttachmentDefinition 21 | metadata: 22 | name: access-net 23 | spec: 24 | config: '{ 25 | "cniVersion": "0.3.1", 26 | "type": "simpleovs", 27 | "ipam": { 28 | "type": "static" 29 | } 30 | }' 31 | --- 32 | apiVersion: "k8s.cni.cncf.io/v1" 33 | kind: NetworkAttachmentDefinition 34 | metadata: 35 | name: enb-net 36 | spec: 37 | config: '{ 38 | "cniVersion": "0.3.1", 39 | "type": "simpleovs", 40 | "ipam": { 41 | "type": "static" 42 | } 43 | }' 44 | --- 45 | apiVersion: v1 46 | kind: Pod 47 | metadata: 48 | name: router 49 | labels: 50 | app: router 51 | annotations: 52 | k8s.v1.cni.cncf.io/networks: '[ 53 | { "name": "core-net", "interface": "core-rtr", "ips": ["CORE_GATEWAY"] }, 54 | { "name": "enb-net", "interface": "enb-rtr", "ips": ["ENB_GATEWAY"] }, 55 | { "name": "access-net", "interface": "access-rtr", "ips": ["ACCESS_GATEWAY"] } 56 | ]' 57 | spec: 58 | containers: 59 | - name: quagga 60 | command: ["/bin/bash", "-c"] 61 | args: 62 | - > 63 | sysctl -w net.ipv4.ip_forward=1; 64 | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; 65 | trap : TERM INT; sleep infinity & wait 66 | image: opencord/quagga 67 | securityContext: 68 | privileged: true 69 | capabilities: 70 | add: 71 | - NET_ADMIN 72 | ports: 73 | - containerPort: 2601 74 | -------------------------------------------------------------------------------- /resources/simpleovs: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | # 3 | # Copyright 2019-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | set -o errexit 8 | set -o pipefail 9 | set -o nounset 10 | 11 | exec 3>&1 12 | exec &>>/var/log/simple-ovs-cni.log 13 | 14 | PATH="$CNI_PATH:$(dirname "${BASH_SOURCE[0]}"):$PATH" 15 | CNI_CONF=$(cat /dev/stdin) 16 | 17 | get_bridge() { 18 | echo "br-$(echo $CNI_CONF | jq -r '.name')" 19 | } 20 | 21 | ipam() { 22 | local plugin=$(echo $CNI_CONF | jq -r '.ipam.type') 23 | local res=$(echo $"$CNI_CONF" | "$plugin" | jq -c '.') 24 | echo $res 25 | } 26 | 27 | add_br_and_port() { 28 | mkdir -p /var/run/netns/ 29 | ln -sfT $CNI_NETNS /var/run/netns/$CNI_CONTAINERID 30 | 31 | local bridge=$(get_bridge) 32 | local ip=$1 33 | 34 | ovs-vsctl --may-exist add-br $bridge 35 | ovs-vsctl add-port $bridge $CNI_IFNAME -- set Interface $CNI_IFNAME type=internal 36 | 37 | ip link set $CNI_IFNAME netns $CNI_CONTAINERID 38 | ip netns exec $CNI_CONTAINERID ip addr add $ip dev $CNI_IFNAME 39 | ip netns exec $CNI_CONTAINERID ip link set $CNI_IFNAME up 40 | } 41 | 42 | delete_br_and_port() { 43 | local bridge="br-$(echo $CNI_CONF | jq -r '.name')" 44 | ovs-vsctl del-port $CNI_IFNAME 45 | if [ -z "$(ovs-vsctl list-ports $bridge)" ]; then 46 | ovs-vsctl del-br $bridge 47 | fi 48 | } 49 | 50 | case $CNI_COMMAND in 51 | ADD) 52 | res=$(ipam) 53 | ip=$(echo $res | jq -r '.ips[0].address') 54 | add_br_and_port $ip 55 | echo '{"cniVersion":"0.3.1"}' | jq -c --arg ip $ip '.ips[0].address = $ip' >&3 56 | ;; 57 | DEL) 58 | set +o errexit 59 | ipam 60 | delete_br_and_port 61 | set -o errexit 62 | ;; 63 | *) 64 | echo "CNI_COMMAND=[ADD|DEL] only supported" 65 | exit 1 66 | ;; 67 | esac 68 | -------------------------------------------------------------------------------- /scripts/cloudlab-disksetup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Copyright 2017-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | ############################################### 8 | # Disk setup and symlinks for a CloudLab node # 9 | ############################################### 10 | 11 | # Don't do anything if not a CloudLab node 12 | [ ! -d /usr/local/etc/emulab ] && exit 0 13 | 14 | # The watchdog will sometimes reset groups, turn it off 15 | if [ -e /usr/local/etc/emulab/watchdog ] 16 | then 17 | sudo /usr/bin/perl -w /usr/local/etc/emulab/watchdog stop 18 | sudo mv /usr/local/etc/emulab/watchdog /usr/local/etc/emulab/watchdog-disabled 19 | fi 20 | 21 | # Mount extra space, if haven't already 22 | if [ ! -d /mnt/extra ] 23 | then 24 | sudo mkdir -p /mnt/extra 25 | 26 | # for NVME SSD on Utah m510, not supported by mkextrafs 27 | if df | grep -q nvme0n1p1 && [ -e /usr/testbed/bin/mkextrafs ] 28 | then 29 | # set partition type of 4th partition to Linux, ignore errors 30 | echo -e "t\\n4\\n82\\np\\nw\\nq" | sudo fdisk /dev/nvme0n1 || true 31 | 32 | sudo mkfs.ext4 /dev/nvme0n1p4 33 | echo "/dev/nvme0n1p4 /mnt/extra/ ext4 defaults 0 0" | sudo tee -a /etc/fstab 34 | sudo mount /mnt/extra 35 | mount | grep nvme0n1p4 || (echo "ERROR: NVME mkfs/mount failed, exiting!" && exit 1) 36 | 37 | elif [ -e /usr/testbed/bin/mkextrafs ] && [ -b /dev/sdb ] # if on Clemson/Wisconsin Cloudlab 38 | then 39 | # Sometimes this command fails on the first try 40 | sudo /usr/testbed/bin/mkextrafs -s 1 -r /dev/sdb -qf "/mnt/extra/" || sudo /usr/testbed/bin/mkextrafs -s 1 -r /dev/sdb -qf "/mnt/extra/" 41 | 42 | # Check that the mount succeeded (sometimes mkextrafs succeeds but device not mounted) 43 | mount | grep sdb || (echo "ERROR: mkextrafs failed, exiting!" && exit 1) 44 | 45 | elif [ -e /usr/testbed/bin/mkextrafs ] && [ -b /dev/sda4 ] # if on Utah xl170 46 | then 47 | # set partition type of 4th partition to Linux, ignore errors 48 | printf "t\\n4\\n83\\np\\nw\\nq" | sudo fdisk /dev/sda || true 49 | 50 | sudo mkfs.ext4 /dev/sda4 51 | echo "/dev/sda4 /mnt/extra/ ext4 defaults 0 0" | sudo tee -a /etc/fstab 52 | sudo mount /mnt/extra 53 | mount | grep sda4 || (echo "ERROR: mkfs/mount failed, exiting!" && exit 1) 54 | fi 55 | fi 56 | 57 | # prepare for creating the libvirt/images symlink 58 | sudo mkdir -p /var/lib/libvirt 59 | sudo rm -rf /var/lib/libvirt/images 60 | 61 | # create symlinks to /mnt/extra partition 62 | for DIR in docker containerd kubelet openstack-helm nova libvirt/images 63 | do 64 | sudo mkdir -p "/mnt/extra/$DIR" 65 | sudo chmod -R a+rwx "/mnt/extra/$DIR" 66 | if [ ! -e "/var/lib/$DIR" ] 67 | then 68 | sudo ln -s "/mnt/extra/$DIR" "/var/lib/$DIR" 69 | fi 70 | done 71 | -------------------------------------------------------------------------------- /scripts/push-cell-loc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # SPDX-FileCopyrightText: 2019-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5154/14550001 --aspect onos.topo.Location='{"lat":52.504315,"lng":13.453262}' 8 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5154/14550002 --aspect onos.topo.Location='{"lat":52.504315,"lng":13.453262}' 9 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5154/14550003 --aspect onos.topo.Location='{"lat":52.504315,"lng":13.453262}' 10 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5153/1454c001 --aspect onos.topo.Location='{"lat":52.486405,"lng":13.412234}' 11 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5153/1454c002 --aspect onos.topo.Location='{"lat":52.486405,"lng":13.412234}' 12 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5153/1454c003 --aspect onos.topo.Location='{"lat":52.486405,"lng":13.412234}' 13 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5154/14550001 --aspect onos.topo.Coverage='{"arc_width":120,"tilt":-15,"height":46,"azimuth":0}' 14 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5154/14550002 --aspect onos.topo.Coverage='{"arc_width":120,"tilt":10,"height":49,"azimuth":120}' 15 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5154/14550003 --aspect onos.topo.Coverage='{"arc_width":120,"tilt":-6,"height":29,"azimuth":240}' 16 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5153/1454c001 --aspect onos.topo.Coverage='{"arc_width":120,"tilt":1,"height":43,"azimuth":0}' 17 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5153/1454c002 --aspect onos.topo.Coverage='{"arc_width":120,"tilt":-10,"height":28,"azimuth":120}' 18 | kubectl exec -it deployment/onos-cli -n riab -- onos topo set entity e2:1/5153/1454c003 --aspect onos.topo.Coverage='{"arc_width":120,"tilt":-10,"height":22,"azimuth":240}' -------------------------------------------------------------------------------- /vagrant/destroy_omec_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run OMEC node 8 | pushd omec 9 | sudo vagrant destroy 10 | popd -------------------------------------------------------------------------------- /vagrant/destroy_ran_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run RAN node 8 | pushd ran 9 | sudo vagrant destroy 10 | popd -------------------------------------------------------------------------------- /vagrant/destroy_ric_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run RIC node 8 | pushd ric 9 | sudo vagrant destroy 10 | popd -------------------------------------------------------------------------------- /vagrant/destroy_vms.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | ./destroy_ran_vm.sh 8 | 9 | ./destroy_ric_vm.sh 10 | 11 | ./destroy_omec_vm.sh -------------------------------------------------------------------------------- /vagrant/halt_omec_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run OMEC node 8 | pushd omec 9 | sudo vagrant halt 10 | popd -------------------------------------------------------------------------------- /vagrant/halt_ran_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run RAN node 8 | pushd ran 9 | sudo vagrant halt 10 | popd -------------------------------------------------------------------------------- /vagrant/halt_ric_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run RIC node 8 | pushd ric 9 | sudo vagrant halt 10 | popd -------------------------------------------------------------------------------- /vagrant/halt_vms.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | ./halt_ran_vm.sh 8 | 9 | ./halt_ric_vm.sh 10 | 11 | ./halt_omec_vm.sh -------------------------------------------------------------------------------- /vagrant/omec/Vagrantfile: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | Vagrant.configure(2) do |config| 6 | config.vm.define "omec" do |omec| 7 | omec.vm.box = "generic/ubuntu1804" 8 | omec.vm.disk :disk, size: "30GB", primary: true 9 | omec.vm.hostname = "omec" 10 | omec.vm.network :public_network, :dev => "br0", :ovs => true, :mode => "bridge", :type => "bridge" 11 | omec.vm.provider "libvirt" do |v| 12 | v.cpus = 4 13 | v.memory = 8192 14 | end 15 | 16 | omec.vm.provision "shell", inline: <<-SHELL 17 | sudo apt update -y 18 | sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm ethtool 19 | sudo bash -c 'echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf' 20 | SHELL 21 | 22 | omec.vm.provision "shell", run: 'always', inline: <<-SHELL 23 | sudo ifconfig eth1 192.168.10.21/24 up || true 24 | route add -net 192.168.11.0/24 dev eth1 || true 25 | route add -net 192.168.13.0/24 dev eth1 || true 26 | SHELL 27 | end 28 | end -------------------------------------------------------------------------------- /vagrant/ran/Vagrantfile: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | Vagrant.configure(2) do |config| 6 | config.vm.define "ran" do |ran| 7 | ran.vm.box = "generic/ubuntu1804" 8 | ran.vm.disk :disk, size: "30GB", primary: true 9 | ran.vm.hostname = "ran" 10 | ran.vm.network :public_network, :dev => "br0", :ovs => true, :mode => "bridge", :type => "bridge" 11 | ran.vm.provider "libvirt" do |v| 12 | v.cpus = 4 13 | v.memory = 8192 14 | end 15 | 16 | ran.vm.provision "shell", inline: <<-SHELL 17 | sudo apt update -y 18 | sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm ethtool 19 | sudo bash -c 'echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf' 20 | SHELL 21 | 22 | ran.vm.provision "shell", run: 'always', inline: <<-SHELL 23 | sudo ifconfig eth1 192.168.11.10/24 up || true 24 | sudo ip addr add 192.168.13.21/24 dev eth1 || true 25 | sudo route add -net 192.168.10.0/24 dev eth1 || true 26 | sudo route add -net 192.168.11.0/24 dev eth1 || true 27 | SHELL 28 | end 29 | end -------------------------------------------------------------------------------- /vagrant/ric/Vagrantfile: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2020-present Open Networking Foundation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | Vagrant.configure(2) do |config| 6 | config.vm.define "ric" do |ric| 7 | ric.vm.box = "generic/ubuntu1804" 8 | ric.vm.disk :disk, size: "30GB", primary: true 9 | ric.vm.hostname = "ric" 10 | ric.vm.network :public_network, :dev => "br0", :ovs => true, :mode => "bridge", :type => "bridge" 11 | ric.vm.provider "libvirt" do |v| 12 | v.cpus = 4 13 | v.memory = 8192 14 | end 15 | 16 | ric.vm.provision "shell", inline: <<-SHELL 17 | sudo apt update -y 18 | sudo apt install -y software-properties-common python3-pip jq httpie ipvsadm ethtool 19 | sudo bash -c 'echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf' 20 | SHELL 21 | 22 | ric.vm.provision "shell", run: 'always', inline: <<-SHELL 23 | sudo ifconfig eth1 192.168.10.22/24 up || true 24 | route add -net 192.168.11.0/24 dev eth1 || true 25 | route add -net 192.168.13.0/24 dev eth1 || true 26 | SHELL 27 | end 28 | end -------------------------------------------------------------------------------- /vagrant/run_omec_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run OMEC node 8 | pushd omec 9 | sudo vagrant up 10 | popd -------------------------------------------------------------------------------- /vagrant/run_ran_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run RAN node 8 | pushd ran 9 | sudo vagrant up 10 | popd -------------------------------------------------------------------------------- /vagrant/run_ric_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Run RIC node 8 | pushd ric 9 | sudo vagrant up 10 | popd -------------------------------------------------------------------------------- /vagrant/run_vms.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | ./run_ran_vm.sh 8 | 9 | ./run_ric_vm.sh 10 | 11 | ./run_omec_vm.sh -------------------------------------------------------------------------------- /vagrant/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | echo Install VM hypervisor and OpenVSwitch 8 | sudo apt update 9 | sudo apt install qemu libvirt-daemon-system libvirt-clients libxslt-dev libxml2-dev libvirt-dev zlib1g-dev ruby-dev ruby-libvirt ebtables dnsmasq-base qemu-kvm libvirt-bin bridge-utils virt-manager openvswitch-switch -y 10 | 11 | echo Install Vagrant 12 | curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - 13 | sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" 14 | sudo apt-get update && sudo apt-get install vagrant -y 15 | 16 | echo Add Vagrant plugins 17 | vagrant plugin install vagrant-libvirt 18 | vagrant plugin install vagrant-mutate 19 | 20 | echo Add OVS 21 | sudo ovs-vsctl --may-exist add-br br0 22 | sudo ovs-vsctl show 23 | 24 | ./run_vms.sh -------------------------------------------------------------------------------- /vagrant/vcmd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2022-present Open Networking Foundation 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | 7 | pushd $1 8 | sudo vagrant $2 9 | popd --------------------------------------------------------------------------------