├── .gitignore ├── .gitmodules ├── LICENSE ├── Makefile ├── README.md ├── aether.yml ├── ansible.cfg ├── debug.yml ├── hosts.ini ├── pingall.yml └── vars ├── README.md ├── main-eNB.yml ├── main-gNB.yml ├── main-gnbsim.yml ├── main-oai.yml ├── main-quickstart.yml ├── main-sdran.yml ├── main-sriov.yml ├── main-srsran.yml ├── main-ueransim.yml ├── main-upf.yml └── main.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2024 Intel Corporation 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | # 5 | 6 | # hosts file 7 | hosts.ini 8 | 9 | # debug 10 | *.log 11 | *.pcap 12 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "deps/gnbsim"] 2 | path = deps/gnbsim 3 | url = https://github.com/opennetworkinglab/aether-gnbsim.git 4 | branch = main 5 | [submodule "deps/k8s"] 6 | path = deps/k8s 7 | url = https://github.com/opennetworkinglab/aether-k8s.git 8 | branch = main 9 | [submodule "deps/5gc"] 10 | path = deps/5gc 11 | url = https://github.com/opennetworkinglab/aether-5gc.git 12 | branch = main 13 | [submodule "deps/amp"] 14 | path = deps/amp 15 | url = https://github.com/opennetworkinglab/aether-amp.git 16 | branch = main 17 | [submodule "deps/4gc"] 18 | path = deps/4gc 19 | url = https://github.com/opennetworkinglab/aether-4gc.git 20 | branch = main 21 | [submodule "deps/sdran"] 22 | path = deps/sdran 23 | url = https://github.com/opennetworkinglab/aether-sdran.git 24 | branch = main 25 | [submodule "deps/ueransim"] 26 | path = deps/ueransim 27 | url = https://github.com/opennetworkinglab/aether-ueransim.git 28 | branch = main 29 | [submodule "deps/aether-oai"] 30 | path = deps/oai 31 | url = https://github.com/opennetworkinglab/aether-oai.git 32 | branch = main 33 | [submodule "deps/srsran"] 34 | path = deps/srsran 35 | url = https://github.com/opennetworkinglab/aether-srsran.git 36 | branch = main 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 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, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2023 Serverless 5G / ONF / Aether Latest / Ansible 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #### Variables #### 2 | 3 | export ROOT_DIR ?= $(PWD) 4 | export AETHER_ROOT_DIR ?= $(ROOT_DIR) 5 | 6 | export SDRAN_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/sdran 7 | export 5GC_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/5gc 8 | export 4GC_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/4gc 9 | export AMP_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/amp 10 | export GNBSIM_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/gnbsim 11 | export OAI_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/oai 12 | export SRSRAN_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/srsran 13 | export UERANSIM_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/ueransim 14 | export K8S_ROOT_DIR ?= $(AETHER_ROOT_DIR)/deps/k8s 15 | 16 | export ANSIBLE_NAME ?= ansible-aether 17 | export ANSIBLE_CONFIG ?= $(AETHER_ROOT_DIR)/ansible.cfg 18 | export HOSTS_INI_FILE ?= $(AETHER_ROOT_DIR)/hosts.ini 19 | 20 | export EXTRA_VARS ?= "@$(AETHER_ROOT_DIR)/vars/main.yml" 21 | 22 | 23 | #### Validate Ansible Configuration #### 24 | aether-pingall: 25 | echo $(AETHER_ROOT_DIR) 26 | ansible-playbook -i $(HOSTS_INI_FILE) $(AETHER_ROOT_DIR)/pingall.yml \ 27 | --extra-vars "ROOT_DIR=$(ROOT_DIR)" --extra-vars $(EXTRA_VARS) 28 | 29 | #### Provision AETHER Components for 5G #### 30 | aether-k8s-install: k8s-install 31 | aether-k8s-uninstall: k8s-uninstall 32 | aether-5gc-install: 5gc-install 33 | aether-5gc-uninstall: 5gc-uninstall 34 | aether-gnbsim-install: gnbsim-install 35 | aether-gnbsim-uninstall: gnbsim-uninstall 36 | aether-amp-install: amp-install 37 | aether-amp-uninstall: amp-uninstall 38 | aether-sdran-install: sdran-install 39 | aether-sdran-uninstall: sdran-uninstall 40 | aether-ueransim-install: ueransim-install 41 | aether-ueransim-uninstall: ueransim-uninstall 42 | aether-oai-gnb-install: oai-gnb-install 43 | aether-oai-gnb-uninstall: oai-gnb-uninstall 44 | aether-oai-uesim-start: oai-uesim-start 45 | aether-oai-uesim-stop: oai-uesim-stop 46 | aether-srsran-gnb-install: srsran-gnb-install 47 | aether-srsran-gnb-uninstall: srsran-gnb-uninstall 48 | aether-srsran-uesim-start: srsran-uesim-start 49 | aether-srsran-uesim-stop: srsran-uesim-stop 50 | 51 | #### Shortcut for QuickStart Only #### 52 | aether-install: k8s-install 5gc-install gnbsim-install amp-install 53 | aether-uninstall: monitor-uninstall roc-uninstall gnbsim-uninstall 5gc-uninstall k8s-uninstall 54 | 55 | #### Provision AETHER for 4G #### 56 | #### 4G/5G share router role #### 57 | aether-4gc-install: 4gc-core-install 5gc-router-install 58 | aether-4gc-uninstall: 4gc-core-uninstall 5gc-router-uninstall 59 | 60 | #### Other Useful Targets #### 61 | aether-5gc-reset: 5gc-core-reset 62 | aether-4gc-reset: 4gc-core-uninstall 4gc-core-install 63 | aether-gnbsim-run: gnbsim-simulator-run 64 | aether-add-upfs: 5gc-upf-install 65 | aether-remove-upfs: 5gc-upf-uninstall 66 | aether-ueransim-run: ueransim-run 67 | 68 | # Rules: 69 | # amp-install: roc-install roc-load monitor-install monitor-load 70 | # amp-uninstall: monitor-uninstall roc-uninstall 71 | 72 | # 5gc-install: 5gc-router-install 5gc-core-install 73 | # 5gc-uninstall: 5gc-core-uninstall 5gc-router-uninstall 74 | 75 | ## run gnbsim-docker-install before running setup 76 | # gnbsim-install: gnbsim-docker-router-install gnbsim-docker-start 77 | # gnbsim-uninstall: gnbsim-docker-stop gnbsim-docker-router-uninstall 78 | 79 | 80 | ### Provision k8s #### 81 | # k8s-install 82 | # k8s-uninstall 83 | 84 | ### Provision router #### 85 | # 5gc-router-install 86 | # 5gc-router-uninstall 87 | 88 | ### Provision core #### 89 | # 5gc-core-install 90 | # 5gc-core-uninstall 91 | # 5gc-core-reset 92 | 93 | ### Provision AMP #### 94 | # amp-install: k8s-install roc-install roc-load monitor-install monitor-load 95 | # amp-uninstall: monitor-uninstall roc-uninstall k8s-uninstall 96 | 97 | ### Provision and load ROC ### 98 | # roc-install 99 | # roc-load 100 | # roc-uninstall 101 | 102 | ### Provision and load Monitoring ### 103 | # monitor-install 104 | # monitor-load 105 | # monitor-uninstall 106 | 107 | ### Provision and run gnbsim ### 108 | # gnbsim-docker-install 109 | # gnbsim-docker-uninstall 110 | 111 | # gnbsim-docker-router-install 112 | # gnbsim-docker-router-uninstall 113 | 114 | # gnbsim-docker-start 115 | # gnbsim-docker-stop 116 | 117 | # gnbsim-simulator-start 118 | 119 | ### Provision and run ueransim ### 120 | # ueransim-install 121 | # ueransim-run 122 | # ueransim-uninstall 123 | 124 | 125 | #include at the end so rules are not overwritten 126 | include $(K8S_ROOT_DIR)/Makefile 127 | include $(GNBSIM_ROOT_DIR)/Makefile 128 | include $(OAI_ROOT_DIR)/Makefile 129 | include $(SRSRAN_ROOT_DIR)/Makefile 130 | include $(5GC_ROOT_DIR)/Makefile 131 | include $(4GC_ROOT_DIR)/Makefile 132 | include $(AMP_ROOT_DIR)/Makefile 133 | include $(SDRAN_ROOT_DIR)/Makefile 134 | include $(UERANSIM_ROOT_DIR)/Makefile 135 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Aether OnRamp 2 | 3 | Aether OnRamp provides a low-overhead way to bring up a 4 | Kubernetes cluster, deploy a 5G version of SD-Core on that 5 | cluster, and then connect that Core to either an emulated 5G RAN 6 | or a network of physical gNBs. (OnRamp also supports a 4G 7 | configuration that connects physical eNBs.) 8 | 9 | To download Aether OnRamp (and all the submodules it depends on), 10 | type: 11 | 12 | ``` 13 | $ git clone --recursive https://github.com/opennetworkinglab/aether-onramp.git 14 | ``` 15 | 16 | Taking a quick look at your ``aether-onramp`` directory, you will 17 | find the following. 18 | 19 | 1. The ``deps`` directory contains Ansible deployment 20 | specifications for all the Aether subsystems. Each of these 21 | subdirectories (e.g., ``deps/5gc``) is self-contained, but 22 | the Makefile in the main OnRamp directory imports the 23 | per-subsystem Makefiles, meaning all the steps required 24 | to install Aether can be (and typically should be) managed from 25 | this main directory. 26 | 27 | 2. File ``vars/main.yml`` defines all the Ansible variables you will 28 | potentially need to modify to specify your deployment scenario. 29 | This file is the union of all the per-component ``var/main.yml`` 30 | files you find in the corresponding ``deps`` directory. This 31 | top-level variable file overrides the per-component files, so 32 | you will not need to modify the latter. The ``vars`` directory 33 | contains several variants of ``main.yml``, each tailored for a 34 | different deployment scenario, with the default ``main.yml`` 35 | supporting the Quick Start deployment described below. 36 | 37 | 3. File ``hosts.ini`` specifies the set of servers (physical or 38 | virtual) that Ansible targets with various playbooks. The 39 | default version included with OnRamp is simplified to run 40 | everything on a single server (the one you've cloned the 41 | repo onto). Example multi-node inventories are commented out. 42 | 43 | Aether OnRamp assumes Ansible is installed. (See the 44 | [Aether Guide](https://docs.aetherproject.org/master/onramp/start.html#prep-environment) 45 | for instructions on doing this, along with additional guidance if this 46 | is your first attempt to install OnRamp.) Then, once you edit ``hosts.ini`` to 47 | match your local details, type the following to verify the setup: 48 | 49 | ``` 50 | $ make aether-pingall 51 | ``` 52 | 53 | ## Quick Start 54 | 55 | Edit ``vars/main.yml`` to reflect your local scenario. For 56 | the Quick Start deployment, this means setting variable 57 | ``data_iface`` to your server's network interface. Note there are 58 | **two** lines that define this variable, one in the ``core`` section 59 | and one in the ``gnbsim`` section. You also need to set the 60 | IP address of the AMF (in the ``core`` section) to your servers's 61 | IP address. 62 | 63 | You are now ready to install a one-node Kubernetes cluster. Type: 64 | 65 | ``` 66 | $ make aether-k8s-install 67 | ``` 68 | 69 | Once Kubernetes is running (which you can verify with ``kubectl``), 70 | you are ready to intall the 5G version of SD-Core. Type: 71 | 72 | ``` 73 | $ make aether-5gc-install 74 | ``` 75 | 76 | Once the Core is running (which you can verify by using ``kubectl`` to 77 | check the ``omec`` name space), you are ready to emulate a RAN 78 | workload. Type: 79 | 80 | ``` 81 | $ make aether-gnbsim-install 82 | $ make aether-gnbsim-run 83 | ``` 84 | 85 | The second command can be executed multiple times, where the 86 | results of each run are saved in a file within the Docker container 87 | running the test. You can access that file by typing: 88 | 89 | ``` 90 | $ docker exec -it gnbsim-1 cat summary.log 91 | ``` 92 | 93 | Finally, you can bring up the Aether Management Platform (AMP) to view 94 | dashboards showing different aspects of Aether's runtime behavior. Type: 95 | 96 | ``` 97 | $ make aether-amp-install 98 | ``` 99 | 100 | You can access the dashboards for Aether's Runtime Control system and 101 | Aether's Monitoring system at the following URLs: 102 | 103 | ``` 104 | http://:31194 105 | http://:30950 106 | ``` 107 | 108 | You will probably want to rerun ``make aether-gnbsim-run`` to generate 109 | trafffic for the monitoring system to display. 110 | 111 | When you are ready to tear down your Quick Start deployment of Aether, 112 | execute the following commands: 113 | 114 | ``` 115 | $ make aether-gnbsim-uninstall 116 | $ make aether-amp-uninstall 117 | $ make aether-5gc-uninstall 118 | $ make aether-k8s-uninstall 119 | ``` 120 | 121 | Or alternatively: 122 | 123 | ``` 124 | $ make aether-uninstall 125 | ``` 126 | 127 | ## Beyond Quick Start 128 | 129 | Being able to support more complex configurations of Aether is whole 130 | point of OnRamp. See the OnRamp documentation available as part of 131 | the [Aether Guide](https://docs.aetherproject.org) for details. 132 | 133 | You might also check the `vars` directory of this repo, where file 134 | `main.yml` specifies global variables used to configure how Aether is 135 | deployed. By default, it is configured for the Quick Start deployment. 136 | The other files define other common configurations, any one of which 137 | you can copy to `main.yml`, and then edit to account for your local 138 | details. These alternative configurations are identified in the README. 139 | -------------------------------------------------------------------------------- /aether.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: provision aether 4 | hosts: all 5 | gather_facts: true 6 | 7 | vars_files: 8 | - "vars/main.yml" 9 | 10 | roles: 11 | - aether 12 | -------------------------------------------------------------------------------- /ansible.cfg: -------------------------------------------------------------------------------- 1 | [ssh_connection] 2 | ssh_args = "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ControlMaster=auto -o ControlPersist=5m -o LogLevel=QUIET -o ForwardAgent=yes" 3 | control_path = /tmp/ansible-%%r@%%h:%%p 4 | 5 | [defaults] 6 | forks = 48 7 | pipelining = True 8 | host_key_checking = False 9 | deprecation_warnings = False 10 | hash_behaviour = merge 11 | interpreter_python = auto_silent 12 | -------------------------------------------------------------------------------- /debug.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: debug hosts 4 | hosts: all 5 | gather_facts: true 6 | 7 | tasks: 8 | # - name: find files matching pattern 9 | # find: 10 | # paths: "*/systemd/network" 11 | # patterns: "*ens18.network" 12 | # file_type: file 13 | # depth: 1 14 | # register: found_files 15 | # become: true 16 | 17 | # - name: find files matching pattern 18 | # shell: basename $(find /*/systemd/network -maxdepth 1 -not -type d -name '*ens18.network' -print) 19 | # register: find_output 20 | # become: true 21 | 22 | # - name: print matching file paths 23 | # debug: 24 | # var: find_output.stdout 25 | 26 | # - name: Just force systemd to reread configs (2.4 and above) 27 | # ansible.builtin.systemd: 28 | # daemon_reload: true 29 | # become: true 30 | 31 | # - name: print facts 32 | # debug: 33 | # msg: "{{ hostvars[inventory_hostname] }}" 34 | 35 | # - name: dump facts 36 | # delegate_to: localhost 37 | # run_once: true 38 | # copy: 39 | # content: "{{ hostvars[inventory_hostname] | to_nice_json }}" 40 | # dest: /tmp/setup-dump.json 41 | -------------------------------------------------------------------------------- /hosts.ini: -------------------------------------------------------------------------------- 1 | [all] 2 | node1 ansible_host=10.76.28.113 ansible_user=aether ansible_password=aether ansible_sudo_pass=aether 3 | #node2 ansible_host=10.76.28.115 ansible_user=aether ansible_password=aether ansible_sudo_pass=aether 4 | #node3 ansible_host=10.76.28.117 ansible_user=aether ansible_password=aether ansible_sudo_pass=aether 5 | #node4 ansible_host=10.76.28.119 ansible_user=aether ansible_password=aether ansible_sudo_pass=aether 6 | 7 | [master_nodes] 8 | node1 9 | 10 | [worker_nodes] 11 | #node2 12 | #node3 13 | 14 | [gnbsim_nodes] 15 | node1 16 | #node2 17 | #node4 18 | 19 | [oai_nodes] 20 | #node2 21 | #node4 22 | 23 | [ueransim_nodes] 24 | #node2 25 | #node4 26 | 27 | [srsran_nodes] 28 | #node2 29 | #node4 30 | -------------------------------------------------------------------------------- /pingall.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: ping all hosts 4 | hosts: all 5 | gather_facts: true 6 | 7 | tasks: 8 | - name: ping all 9 | ping: 10 | -------------------------------------------------------------------------------- /vars/README.md: -------------------------------------------------------------------------------- 1 | # OnRamp Variables 2 | 3 | File `main.yml` specifies global variables used to configure how Aether is deployed. 4 | By default, it is configured for the Quick Start deployment. The other files define 5 | common configurations (also called blueprints), any one of which you can copy to 6 | `main.yml`, and then edit to account for your local details. The current set of 7 | blueprints include: 8 | 9 | * `main-quickstart.yml`: Configures the RAN emulator (gNBsim) to run in the same 10 | server as the Core. Equivalent to `main.yml` by default. Details documented 11 | [here](https://docs.aetherproject.org/master/onramp/start.html). 12 | 13 | * `main-gnbsim.yml`: Configures the RAN emulator (gNBsim) to run in one or more 14 | servers, independent of the Core. Details documented 15 | [here](https://docs.aetherproject.org/master/onramp/gnbsim.html). 16 | 17 | * `main-gNB.yml`: Configures the Core to work with an external 5G radio (gNB), with 18 | the Core running independent of AMP. (Change variable `standalone` to false to have 19 | the Core running under AMP's control.) Details documented 20 | [here](https://docs.aetherproject.org/master/onramp/gnb.html). 21 | 22 | * `main-eNB.yml`: Configures the Core to work with an external 4G radio (eNB), with 23 | the Core running independent of AMP. (Change variable `standalone` to false to have 24 | the Core running under AMP's control.) Details documented 25 | [here](https://docs.aetherproject.org/master/onramp/gnb.html#support-for-enbs). 26 | 27 | * `main-upf.yml`: Configures the Core with two UPFs and programs AMP 28 | with two slices, each associated with a distinct UPF. Depends on variable 29 | `standalone` being set to false so the Core runs under AMP's control. 30 | Details documented 31 | [here](https://docs.aetherproject.org/master/onramp/blueprints.html#multiple-upfs). 32 | 33 | * `main-sdran.yml`: Configures the Core and SD-RAN in tandem, with 34 | RANSIM (running in the same Kubernetes namespace as SD-RAN) 35 | emulating various RAN elements. Details documented 36 | [here](https://docs.aetherproject.org/master/onramp/blueprints.html#sd-ran). 37 | 38 | * `main-ueransim.yml`: Configures UERANSIM in place of gNBsim, 39 | providing a second way to direct workload at the Core. Details documented 40 | [here](https://docs.aetherproject.org/master/onramp/blueprints.html#ueransim). 41 | 42 | * `main-sriov.yml`: Configures UPF in DPDK/SRIOV mode. It will help to improve 43 | UPF packet processing performance. Details documented 44 | [here](https://docs.aetherproject.org/master/onramp/blueprints.html#enable-sr-iov-and-dpdk). 45 | 46 | * `main-oai.yml`: Configures the Core with an OAI-based 5G RAN, 47 | supporting another gNB option. Boolean variable `simulation` selects 48 | emulated or physical UE. Details documented 49 | [here](https://docs.aetherproject.org/master/onramp/blueprints.html#oai-5g-ran). 50 | 51 | * `main-srsran.yml`: Configures the SD-Core with a srsRAN-based 5G RAN, 52 | supporting another gNB option. Details documented 53 | TODO:. 54 | -------------------------------------------------------------------------------- /vars/main-eNB.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/4gc/roles/core/templates/radio-4g-values.yaml" 18 | ran_subnet: "" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | chart_ref: aether/sd-core 21 | chart_version: 2.2.7 22 | upf: 23 | access_subnet: "192.168.252.1/24" # access subnet & gateway 24 | core_subnet: "192.168.250.1/24" # core subnet & gateway 25 | mode: af_packet # Options: af_packet or dpdk 26 | mme: 27 | ip: "10.76.28.113" 28 | 29 | amp: 30 | roc_models: "deps/amp/roles/roc-load/templates/roc-4g-radio-models.json" 31 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/4g-monitoring" 32 | 33 | aether_roc: 34 | helm: 35 | local_charts: false 36 | chart_ref: aether/aether-roc-umbrella 37 | chart_version: 2.1.36 38 | 39 | atomix: 40 | helm: 41 | chart_ref: atomix/atomix 42 | chart_version: 1.1.2 43 | 44 | onosproject: 45 | helm: 46 | chart_ref: onosproject/onos-operator 47 | chart_version: 0.5.6 48 | 49 | store: 50 | lpp: 51 | version: v0.0.24 52 | 53 | monitor: 54 | helm: 55 | chart_ref: rancher/rancher-monitoring 56 | chart_version: 101.0.0+up19.0.3 57 | 58 | monitor-crd: 59 | helm: 60 | chart_ref: rancher/rancher-monitoring-crd 61 | chart_version: 101.0.0+up19.0.3 62 | -------------------------------------------------------------------------------- /vars/main-gNB.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/radio-5g-values.yaml" 18 | ran_subnet: "" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | amp: 37 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-radio-models.json" 38 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 39 | 40 | aether_roc: 41 | helm: 42 | local_charts: false 43 | chart_ref: aether/aether-roc-umbrella 44 | chart_version: 2.1.36 45 | 46 | atomix: 47 | helm: 48 | chart_ref: atomix/atomix 49 | chart_version: 1.1.2 50 | 51 | onosproject: 52 | helm: 53 | chart_ref: onosproject/onos-operator 54 | chart_version: 0.5.6 55 | 56 | store: 57 | lpp: 58 | version: v0.0.24 59 | 60 | monitor: 61 | helm: 62 | chart_ref: rancher/rancher-monitoring 63 | chart_version: 101.0.0+up19.0.3 64 | 65 | monitor-crd: 66 | helm: 67 | chart_ref: rancher/rancher-monitoring-crd 68 | chart_version: 101.0.0+up19.0.3 69 | -------------------------------------------------------------------------------- /vars/main-gnbsim.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | gnbsim: 37 | docker: 38 | container: 39 | image: omecproject/5gc-gnbsim:rel-1.6.1 40 | prefix: gnbsim 41 | count: 2 42 | network: 43 | macvlan: 44 | name: gnbnet 45 | 46 | router: 47 | data_iface: ens18 48 | macvlan: 49 | subnet_prefix: "172.20" 50 | 51 | servers: 52 | 0: 53 | - "deps/gnbsim/config/gnbsim-s1-p1.yaml" 54 | - "deps/gnbsim/config/gnbsim-s1-p2.yaml" 55 | # 1: 56 | # - "deps/gnbsim/config/gnbsim-s1-p2.yaml" 57 | # - "deps/gnbsim/config/gnbsim-s1-p1.yaml" 58 | 59 | amp: 60 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 61 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 62 | 63 | aether_roc: 64 | helm: 65 | local_charts: false 66 | chart_ref: aether/aether-roc-umbrella 67 | chart_version: 2.1.36 68 | 69 | atomix: 70 | helm: 71 | chart_ref: atomix/atomix 72 | chart_version: 1.1.2 73 | 74 | onosproject: 75 | helm: 76 | chart_ref: onosproject/onos-operator 77 | chart_version: 0.5.6 78 | 79 | store: 80 | lpp: 81 | version: v0.0.24 82 | 83 | monitor: 84 | helm: 85 | chart_ref: rancher/rancher-monitoring 86 | chart_version: 101.0.0+up19.0.3 87 | 88 | monitor-crd: 89 | helm: 90 | chart_ref: rancher/rancher-monitoring-crd 91 | chart_version: 101.0.0+up19.0.3 92 | -------------------------------------------------------------------------------- /vars/main-oai.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | oai: 37 | docker: 38 | container: 39 | gnb_image: oaisoftwarealliance/oai-gnb:2025.w05 40 | ue_image: oaisoftwarealliance/oai-nr-ue:2025.w05 41 | network: 42 | data_iface: ens18 43 | name: public_net # Set to `host` when connecting RU/USRP (i.e., simulation: false) 44 | subnet: "172.20.0.0/16" # Set to data_iface's subnet when `name: host` 45 | bridge: 46 | name: rfsim5g-public 47 | simulation: true 48 | gnb: 49 | conf_file: deps/oai/roles/gNb/templates/gnb.sa.band78.fr1.106PRB.usrpb210.conf 50 | ip: "172.20.0.2" # Host interface used for the gNB 51 | ue: 52 | conf_file: deps/oai/roles/uEsimulator/templates/ue.conf 53 | 54 | amp: 55 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 56 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 57 | 58 | aether_roc: 59 | helm: 60 | local_charts: false 61 | chart_ref: aether/aether-roc-umbrella 62 | chart_version: 2.1.36 63 | 64 | atomix: 65 | helm: 66 | chart_ref: atomix/atomix 67 | chart_version: 1.1.2 68 | 69 | onosproject: 70 | helm: 71 | chart_ref: onosproject/onos-operator 72 | chart_version: 0.5.6 73 | 74 | store: 75 | lpp: 76 | version: v0.0.24 77 | 78 | monitor: 79 | helm: 80 | chart_ref: rancher/rancher-monitoring 81 | chart_version: 101.0.0+up19.0.3 82 | 83 | monitor-crd: 84 | helm: 85 | chart_ref: rancher/rancher-monitoring-crd 86 | chart_version: 101.0.0+up19.0.3 87 | -------------------------------------------------------------------------------- /vars/main-quickstart.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | gnbsim: 37 | docker: 38 | container: 39 | image: omecproject/5gc-gnbsim:rel-1.6.1 40 | prefix: gnbsim 41 | count: 1 42 | network: 43 | macvlan: 44 | name: gnbnet 45 | 46 | router: 47 | data_iface: ens18 48 | macvlan: 49 | subnet_prefix: "172.20" 50 | 51 | servers: 52 | 0: 53 | - "deps/gnbsim/config/gnbsim-default.yaml" 54 | 55 | amp: 56 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 57 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 58 | 59 | aether_roc: 60 | helm: 61 | local_charts: false 62 | chart_ref: aether/aether-roc-umbrella 63 | chart_version: 2.1.36 64 | 65 | atomix: 66 | helm: 67 | chart_ref: atomix/atomix 68 | chart_version: 1.1.2 69 | 70 | onosproject: 71 | helm: 72 | chart_ref: onosproject/onos-operator 73 | chart_version: 0.5.6 74 | 75 | store: 76 | lpp: 77 | version: v0.0.24 78 | 79 | monitor: 80 | helm: 81 | chart_ref: rancher/rancher-monitoring 82 | chart_version: 101.0.0+up19.0.3 83 | 84 | monitor-crd: 85 | helm: 86 | chart_ref: rancher/rancher-monitoring-crd 87 | chart_version: 101.0.0+up19.0.3 88 | -------------------------------------------------------------------------------- /vars/main-sdran.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | sdran: 37 | platform: 38 | atomix: 39 | helm: 40 | chart_ref: atomix/atomix 41 | chart_version: 1.1.2 42 | 43 | onosproject: 44 | helm: 45 | chart_ref: onosproject/onos-operator 46 | chart_version: 0.5.6 47 | 48 | store: 49 | lpp: 50 | version: v0.0.24 51 | 52 | sdran: 53 | helm: 54 | local_charts: false 55 | chart_ref: sdran/sd-ran 56 | chart_version: 1.5.0 57 | import: 58 | e2t: true 59 | a1t: true 60 | uenib: true 61 | topo: true 62 | config: true 63 | ransim: true 64 | kpimon: true 65 | pci: false # true for PCI and MLB use-case 66 | mho: false # true for MHO use-case 67 | mlb: false # true for MLB use-case 68 | ts: false # true for traffic steering use-case 69 | ransim: 70 | model: model # default: model; mlb: three-cell-n-node-model; mho: two-cell-two-node-model; ts: two-cell-two-node-model 71 | metric: metrics # default: model; mlb: three-cell-n-node-model 72 | -------------------------------------------------------------------------------- /vars/main-sriov.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-sriov-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: dpdk # Options: af_packet or dpdk 27 | # If mode set to 'dpdk': 28 | # - make sure at least two VF devices are created out of 'data_iface' 29 | # and these devices are attached to vfio-pci driver; 30 | # - use 'sdcore-5g-sriov-values.yaml' file for 'values_file' (above). 31 | multihop_gnb: false # set to true to override default N3 subnet 32 | default_upf: 33 | ip: 34 | access: "192.168.252.3" 35 | core: "192.168.250.3" 36 | ue_ip_pool: "192.168.100.0/24" 37 | amf: 38 | ip: "10.76.28.113" 39 | 40 | gnbsim: 41 | docker: 42 | container: 43 | image: omecproject/5gc-gnbsim:rel-1.6.1 44 | prefix: gnbsim 45 | count: 1 46 | network: 47 | macvlan: 48 | name: gnbnet 49 | 50 | router: 51 | data_iface: ens18 52 | macvlan: 53 | subnet_prefix: "172.20" 54 | 55 | servers: 56 | 0: 57 | - "deps/gnbsim/config/gnbsim-default.yaml" 58 | 59 | amp: 60 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 61 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 62 | 63 | aether_roc: 64 | helm: 65 | local_charts: false 66 | chart_ref: aether/aether-roc-umbrella 67 | chart_version: 2.1.36 68 | 69 | atomix: 70 | helm: 71 | chart_ref: atomix/atomix 72 | chart_version: 1.1.2 73 | 74 | onosproject: 75 | helm: 76 | chart_ref: onosproject/onos-operator 77 | chart_version: 0.5.6 78 | 79 | store: 80 | lpp: 81 | version: v0.0.24 82 | 83 | monitor: 84 | helm: 85 | chart_ref: rancher/rancher-monitoring 86 | chart_version: 101.0.0+up19.0.3 87 | 88 | monitor-crd: 89 | helm: 90 | chart_ref: rancher/rancher-monitoring-crd 91 | chart_version: 101.0.0+up19.0.3 92 | -------------------------------------------------------------------------------- /vars/main-srsran.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | srsran: 37 | docker: 38 | container: 39 | gnb_image: aetherproject/srsran-gnb:rel-0.2.0 40 | ue_image: aetherproject/srsran-ue:rel-0.2.0 41 | network: 42 | data_iface: ens18 43 | name: host 44 | subnet: "10.76.28.0/24" # The subnet to which `data_iface` is part of 45 | bridge: 46 | name: rfsim5g-public 47 | simulation: true 48 | gnb: 49 | conf_file: deps/srsran/roles/gNB/templates/gnb_zmq.yaml 50 | ip: "10.76.28.115" # Host interface used for the gNB 51 | ue: 52 | conf_file: deps/srsran/roles/uEsimulator/templates/ue_zmq.conf 53 | 54 | amp: 55 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 56 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 57 | 58 | aether_roc: 59 | helm: 60 | local_charts: false 61 | chart_ref: aether/aether-roc-umbrella 62 | chart_version: 2.1.36 63 | 64 | atomix: 65 | helm: 66 | chart_ref: atomix/atomix 67 | chart_version: 1.1.2 68 | 69 | onosproject: 70 | helm: 71 | chart_ref: onosproject/onos-operator 72 | chart_version: 0.5.6 73 | 74 | store: 75 | lpp: 76 | version: v0.0.24 77 | 78 | monitor: 79 | helm: 80 | chart_ref: rancher/rancher-monitoring 81 | chart_version: 101.0.0+up19.0.3 82 | 83 | monitor-crd: 84 | helm: 85 | chart_ref: rancher/rancher-monitoring-crd 86 | chart_version: 101.0.0+up19.0.3 87 | -------------------------------------------------------------------------------- /vars/main-ueransim.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | ueransim: 37 | gnb: 38 | ip: "10.76.28.111" 39 | servers: 40 | 0: 41 | gnb: "deps/ueransim/config/custom-gnb.yaml" 42 | ue: "deps/ueransim/config/custom-ue.yaml" 43 | # 1: 44 | # gnb: "deps/ueransim/config/custom-gnb-1.yaml" 45 | # ue: "deps/ueransim/config/custom-ue-1.yaml" 46 | 47 | amp: 48 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 49 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 50 | 51 | aether_roc: 52 | helm: 53 | local_charts: false 54 | chart_ref: aether/aether-roc-umbrella 55 | chart_version: 2.1.36 56 | 57 | atomix: 58 | helm: 59 | chart_ref: atomix/atomix 60 | chart_version: 1.1.2 61 | 62 | onosproject: 63 | helm: 64 | chart_ref: onosproject/onos-operator 65 | chart_version: 0.5.6 66 | 67 | store: 68 | lpp: 69 | version: v0.0.24 70 | 71 | monitor: 72 | helm: 73 | chart_ref: rancher/rancher-monitoring 74 | chart_version: 101.0.0+up19.0.3 75 | 76 | monitor-crd: 77 | helm: 78 | chart_ref: rancher/rancher-monitoring-crd 79 | chart_version: 101.0.0+up19.0.3 80 | -------------------------------------------------------------------------------- /vars/main-upf.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: false # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | helm: 29 | local_charts: false 30 | chart_ref: aether/bess-upf 31 | chart_version: 1.3.0 32 | values_file: "deps/5gc/roles/upf/templates/upf-5g-values.yaml" 33 | default_upf: 34 | ip: 35 | access: "192.168.252.3" 36 | core: "192.168.250.3" 37 | ue_ip_pool: "192.168.100.0/24" 38 | additional_upfs: 39 | "1": 40 | ip: 41 | access: "192.168.252.6" 42 | core: "192.168.250.6" 43 | ue_ip_pool: "192.168.101.0/24" 44 | # "2": 45 | # ip: 46 | # access: "192.168.252.7" 47 | # core: "192.168.250.7" 48 | # ue_ip_pool: "192.168.102.0/24" 49 | amf: 50 | ip: "10.76.28.113" 51 | 52 | gnbsim: 53 | docker: 54 | container: 55 | image: omecproject/5gc-gnbsim:rel-1.6.1 56 | prefix: gnbsim 57 | count: 2 58 | network: 59 | macvlan: 60 | name: gnbnet 61 | 62 | router: 63 | data_iface: ens18 64 | macvlan: 65 | subnet_prefix: "172.20" 66 | 67 | servers: 68 | 0: 69 | - "deps/gnbsim/config/gnbsim-upf-1.yaml" 70 | - "deps/gnbsim/config/gnbsim-upf-2.yaml" 71 | 72 | amp: 73 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 74 | # for UPF - comment above line and uncomment following line 75 | # roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models-upf2.json" 76 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 77 | 78 | aether_roc: 79 | helm: 80 | local_charts: false 81 | chart_ref: aether/aether-roc-umbrella 82 | chart_version: 2.1.36 83 | 84 | atomix: 85 | helm: 86 | chart_ref: atomix/atomix 87 | chart_version: 1.1.2 88 | 89 | onosproject: 90 | helm: 91 | chart_ref: onosproject/onos-operator 92 | chart_version: 0.5.6 93 | 94 | store: 95 | lpp: 96 | version: v0.0.24 97 | 98 | monitor: 99 | helm: 100 | chart_ref: rancher/rancher-monitoring 101 | chart_version: 101.0.0+up19.0.3 102 | 103 | monitor-crd: 104 | helm: 105 | chart_ref: rancher/rancher-monitoring-crd 106 | chart_version: 101.0.0+up19.0.3 107 | -------------------------------------------------------------------------------- /vars/main.yml: -------------------------------------------------------------------------------- 1 | k8s: 2 | rke2: 3 | version: v1.24.17+rke2r1 4 | config: 5 | token: purdue-k8s-rke2 6 | port: 9345 7 | params_file: 8 | master: "deps/k8s/roles/rke2/templates/master-config.yaml" 9 | worker: "deps/k8s/roles/rke2/templates/worker-config.yaml" 10 | 11 | helm: 12 | version: v3.17.0 13 | 14 | core: 15 | standalone: true # set to false to place under control of ROC 16 | data_iface: ens18 17 | values_file: "deps/5gc/roles/core/templates/sdcore-5g-values.yaml" 18 | ran_subnet: "172.20.0.0/16" # set to empty string to get subnet from 'data_iface' 19 | helm: 20 | local_charts: false # set chart_ref to local path name if true 21 | chart_ref: aether/sd-core 22 | chart_version: 2.2.7 23 | upf: 24 | access_subnet: "192.168.252.1/24" # access subnet & gateway 25 | core_subnet: "192.168.250.1/24" # core subnet & gateway 26 | mode: af_packet # Options: af_packet or dpdk 27 | multihop_gnb: false # set to true to override default N3 subnet 28 | default_upf: 29 | ip: 30 | access: "192.168.252.3" 31 | core: "192.168.250.3" 32 | ue_ip_pool: "192.168.100.0/24" 33 | amf: 34 | ip: "10.76.28.113" 35 | 36 | gnbsim: 37 | docker: 38 | container: 39 | image: omecproject/5gc-gnbsim:rel-1.6.1 40 | prefix: gnbsim 41 | count: 1 42 | network: 43 | macvlan: 44 | name: gnbnet 45 | 46 | router: 47 | data_iface: ens18 48 | macvlan: 49 | subnet_prefix: "172.20" 50 | 51 | servers: 52 | 0: 53 | - "deps/gnbsim/config/gnbsim-default.yaml" 54 | 55 | amp: 56 | roc_models: "deps/amp/roles/roc-load/templates/roc-5g-models.json" 57 | monitor_dashboard: "deps/amp/roles/monitor-load/templates/5g-monitoring" 58 | 59 | aether_roc: 60 | helm: 61 | local_charts: false 62 | chart_ref: aether/aether-roc-umbrella 63 | chart_version: 2.1.36 64 | 65 | atomix: 66 | helm: 67 | chart_ref: atomix/atomix 68 | chart_version: 1.1.2 69 | 70 | onosproject: 71 | helm: 72 | chart_ref: onosproject/onos-operator 73 | chart_version: 0.5.6 74 | 75 | store: 76 | lpp: 77 | version: v0.0.24 78 | 79 | monitor: 80 | helm: 81 | chart_ref: rancher/rancher-monitoring 82 | chart_version: 101.0.0+up19.0.3 83 | 84 | monitor-crd: 85 | helm: 86 | chart_ref: rancher/rancher-monitoring-crd 87 | chart_version: 101.0.0+up19.0.3 88 | --------------------------------------------------------------------------------