blob: 3990965ccc6e491ead9b7d6c7e8489d260f376ae [file] [log] [blame]
llpb3534642023-08-02 09:23:52 -07001Quick Start
2-----------------------
3
Larry Petersonb0c0da32023-08-23 13:07:10 -07004This section describes a low-overhead way to get started with OnRamp.
5It brings up a one-node Kubernetes cluster, deploys a 5G version of
6SD-Core on that cluster, and runs an emulated 5G workload against the
75G Core. It assumes a low-end server that meets the following
8requirements:
llpb3534642023-08-02 09:23:52 -07009
Larry Petersoncebca8d2023-10-26 07:24:27 -070010* Haswell CPU (or newer), with at least 4 CPU cores and 16GB RAM.
Larry Petersonb0c0da32023-08-23 13:07:10 -070011* Clean install of Ubuntu 20.04 or 22.04, with 5.15 (or later) kernel.
llpb3534642023-08-02 09:23:52 -070012
Larry Petersoncebca8d2023-10-26 07:24:27 -070013For example, something like an Intel NUC is likely more than enough to get
llpb3534642023-08-02 09:23:52 -070014started.
15
Larry Petersonb0c0da32023-08-23 13:07:10 -070016While it's possible to use OnRamp to deploy Aether on a laptop (e.g.,
17in a VirtualBox VM), because the goal is to eventually scale a
18deployment and/or run Aether 24/7, OnRamp has been developed and
19tested on physical servers and server-based VMs. The latter includes
Larry Peterson134bc722023-08-25 13:47:48 -070020Proxmox (see the example configuration shown in :numref:`Figure %s
Larry Petersonb0c0da32023-08-23 13:07:10 -070021<fig-proxmox>`); AWS (specify a ``t2.xlarge`` instance); and CloudLab
Larry Peterson134bc722023-08-25 13:47:48 -070022(specify either a ``small-lan`` or ``single-pc-ubuntu`` instance).
llpb3534642023-08-02 09:23:52 -070023
Larry Petersonb0c0da32023-08-23 13:07:10 -070024.. _fig-proxmox:
25.. figure:: figures/proxmox.png
26 :width: 500px
27 :align: center
llpb3534642023-08-02 09:23:52 -070028
Larry Petersonb0c0da32023-08-23 13:07:10 -070029 Example configuration of Proxmox VM.
llpb3534642023-08-02 09:23:52 -070030
llpb3534642023-08-02 09:23:52 -070031
32Prep Environment
33~~~~~~~~~~~~~~~~~~~~~
34
Larry Petersondef1b672023-08-07 14:06:24 -070035To install Aether OnRamp, you must be able able to run ``sudo`` without
36a password, and there should be no firewall running on the server. You can
37verify this is the case by executing the following, which should
38report ``Status: inactive``:
llpb3534642023-08-02 09:23:52 -070039
40.. code-block::
41
42 $ sudo ufw status
Larry Petersondef1b672023-08-07 14:06:24 -070043 Status: inactive
llpb3534642023-08-02 09:23:52 -070044
Larry Peterson5d6b3b32023-09-05 15:11:55 -070045Your server should use *systemd-networkd* to configure the network,
46which you can verify by typing:
Larry Petersona30a75e2023-09-01 15:44:37 -070047
48.. code-block::
49
50 $ systemctl status systemd-networkd.service
51
Larry Peterson5d6b3b32023-09-05 15:11:55 -070052Note that Aether assumes Ubuntu Server (as opposed to Ubuntu Desktop),
53the main implication being that it uses *systemd-networkd* rather than
54*Network Manager* to manage network settings. It is possible to work
55around this requirement, but be aware that doing so may impact the
56Ansible playbook for installing SD-Core.
57
Larry Petersondef1b672023-08-07 14:06:24 -070058OnRamp depends on Ansible, which you can install on your server as
59follows:
llpb3534642023-08-02 09:23:52 -070060
61.. code-block::
62
63 $ sudo apt install pipx
64 $ sudo apt install python3.8-venv
65 $ pipx install --include-deps ansible
66 $ pipx ensurepath
67 $ sudo apt-get install sshpass
68
Larry Peterson4d344dd2023-08-17 14:46:22 -070069Once installed, displaying the Ansible version number should result in
70output similar to the following:
71
72.. code-block::
73
74 $ ansible --version
75 ansible [core 2.11.12]
76 config file = None
77 configured module search path = ['/home/foo/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
78 ansible python module location = /home/foo/.local/lib/python3.6/site-packages/ansible
79 ansible collection location = /home/foo/.ansible/collections:/usr/share/ansible/collections
80 executable location = /home/foo/.local/bin/ansible
81 python version = 3.6.9 (default, Mar 10 2023, 16:46:00) [GCC 8.4.0]
82 jinja version = 3.0.3
83 libyaml = True
84
Larry Petersonaa89b8e2023-08-17 15:28:59 -070085Note that a fresh install of Ubuntu may be missing other packages that
86you need (e.g., ``git``, ``curl``, ``make``), but you will be prompted
87to install them as you step through the Quick Start sequence.
llpb3534642023-08-02 09:23:52 -070088
89Download Aether OnRamp
90~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
91
92Once ready, clone the Aether OnRamp repo on this target deployment
93server:
94
95.. code-block::
96
97 $ git clone --recursive https://github.com/opennetworkinglab/aether-onramp.git
98 $ cd aether-onramp
99
100Taking a quick look at your ``aether-onramp`` directory, there are
101four things to note:
102
1031. The ``deps`` directory contains the Ansible deployment
104 specifications for all the Aether subsystems. Each of these
105 subdirectories (e.g., ``deps/5gc``) is self-contained, meaning you
106 can execute the Make targets in each individual directory. Doing so
107 causes Ansible to run the corresponding playbook. For example, the
108 installation playbook for the 5G Core can be found in
109 ``deps/5gc/roles/core/tasks/install.yml``.
110
1112. The Makefile in the main OnRamp directory imports (``#include``)
112 the per-subsystem Makefiles, meaning all the individual steps
113 required to install Aether can be managed from this main directory.
114 The Makefile includes comments listing the key Make targets defined
115 by the included Makefiles. *Importantly, the rest of this guide
116 assumes you are working in the main OnRamp directory, and not in
117 the individual subsystems.*
118
1193. File ``vars/main.yml`` defines all the Ansible variables you will
120 potentially need to modify to specify your deployment scenario.
121 This file is the union of all the per-component ``var/main.yml``
122 files you find in the corresponding ``deps`` directory. This
123 top-level variable file overrides the per-component var files, so
124 you will not need to modify the latter. Note that the ``vars``
Larry Peterson782fec32023-10-09 12:30:57 -0700125 directory contains several variants of ``main.yml``, where we think
126 of each as specifying a *blueprint* for a different configuration
127 of Aether. The default ``main.yml`` (which is the same as
128 ``main-quickstart.yml``) gives the blueprint for the Quick Start
129 deployment described in this section; we'll substitute the other
130 blueprints in later sections.
llpb3534642023-08-02 09:23:52 -0700131
1324. File ``hosts.ini`` (host inventory) is Ansible's way of specifying
133 the set of servers (physical or virtual) that Ansible targets with
Larry Peterson4d344dd2023-08-17 14:46:22 -0700134 various installation playbooks. The default version of ``hosts.ini``
llpb3534642023-08-02 09:23:52 -0700135 included with OnRamp is simplified to run everything on a single
136 server (the one you've cloned the repo onto), with additional lines
137 you may eventually need for a multi-node cluster commented out.
138
llpb3534642023-08-02 09:23:52 -0700139Set Target Parameters
140~~~~~~~~~~~~~~~~~~~~~~~~~~~
141
142The Quick Start deployment described in this section requires that you
Larry Peterson0fa9b362023-08-09 15:15:13 -0700143modify two sets of parameters to reflect the specifics of your target
llpb3534642023-08-02 09:23:52 -0700144deployment.
145
Larry Peterson4d344dd2023-08-17 14:46:22 -0700146The first set is in file ``hosts.ini``, where you will need to give the IP
llpb3534642023-08-02 09:23:52 -0700147address and login credentials for the server you are working on. At
148this stage, we assume the server you downloaded OnRamp onto is the
149same server you will be installing Aether on.
150
151.. code-block::
152
Larry Peterson925ac6b2023-08-23 13:38:35 -0700153 node1 ansible_host=10.76.28.113 ansible_user=aether ansible_password=aether ansible_sudo_pass=aether
llpb3534642023-08-02 09:23:52 -0700154
Larry Peterson925ac6b2023-08-23 13:38:35 -0700155In this example, address ``10.76.28.113`` and the three occurrences
llpb3534642023-08-02 09:23:52 -0700156of the string ``aether`` need to be replaced with the appropriate
157values. Note that if you set up your server to use SSH keys instead
158of passwords, then ``ansible_password=aether`` needs to be replaced
159with ``ansible_ssh_private_key_file=~/.ssh/id_rsa`` (or wherever
160your private key can be found).
161
Larry Peterson0fa9b362023-08-09 15:15:13 -0700162The second set of parameters is in ``vars/main.yml``, where the **two** lines
llpb3534642023-08-02 09:23:52 -0700163currently reading
164
165.. code-block::
166
167 data_iface: ens18
168
169need to be edited to replace ``ens18`` with the device interface for
Larry Petersoncebca8d2023-10-26 07:24:27 -0700170your server, and the line specifying the IP address of the Core's AMF
Larry Peterson0fa9b362023-08-09 15:15:13 -0700171needs to be edited to reflect your server's IP address:
172
173.. code-block::
174
175 amf:
Larry Peterson925ac6b2023-08-23 13:38:35 -0700176 ip: "10.76.28.113"
Larry Peterson0fa9b362023-08-09 15:15:13 -0700177
178You can learn your server's IP address and interface using the Linux ``ip``
llpb3534642023-08-02 09:23:52 -0700179command:
180
181.. code-block::
182
183 $ ip a
184 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
185 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
186 inet 127.0.0.1/8 scope host lo
187 valid_lft forever preferred_lft forever
188 inet6 ::1/128 scope host
189 valid_lft forever preferred_lft forever
190 2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
191 link/ether 2c:f0:5d:f2:d8:21 brd ff:ff:ff:ff:ff:ff
192 inet 10.76.28.113/24 metric 100 brd 10.76.28.255 scope global ens3
193 valid_lft forever preferred_lft forever
194 inet6 fe80::2ef0:5dff:fef2:d821/64 scope link
195 valid_lft forever preferred_lft forever
196
197In this example, the reported interface is ``ens18`` and the IP
198address is ``10.76.28.113`` on subnet ``10.76.28.0/24``. We will use
199these three values as a running example throughout the guide, as a
200placeholder for your local details.
201
Larry Peterson505d4b32023-08-21 14:39:45 -0700202.. admonition:: Troubleshooting Hint
203
204 Due to a limitation in gNBsim (the RAN emulator introduced later in
205 this section), it is necessary for your server to be configured with
206 IPv6 enabled (as the ``inet6`` line in the example output indicates
207 is the case for interface ``ens18``). If IPv6 is not enabled, the
208 emulated RAN will not successfully connect to the AMF.
209
llpb3534642023-08-02 09:23:52 -0700210Note that ``vars/main.yml`` and ``hosts.ini`` are the only two files
211you need to modify for now, but there are additional config files that
212you may want to modify as we move beyond the Quick Start deployment.
213We'll identify those files throughout this section, for informational
214purposes, and revisit them in later sections.
215
216Many of the tasks specified in the various Ansible playbooks result in
217calls to Kubernetes, either directly via ``kubectl``, or indirectly
218via ``helm``. This means that after executing the sequence of
219Makefile targets described in the rest of this guide, you'll want to
220run some combination of the following commands to verify that the
221right things happened:
222
223.. code-block::
224
225 $ kubectl get pods --all-namespaces
226 $ helm repo list
227 $ helm list --namespace kube-system
228
229The first reports the set of Kubernetes namespaces currently running;
230the second shows the known set of repos you are pulling charts from;
231and the third shows the version numbers of the charts currently
232deployed in the ``kube-system`` namespace.
233
234If you are not familiar with ``kubectl`` (the CLI for Kubernetes), we
235recommend that you start with `Kubernetes Tutorial
Larry Peterson4453fb82023-10-19 13:26:59 -0700236<https://kubernetes.io/docs/tutorials/kubernetes-basics/>`__.
llpb3534642023-08-02 09:23:52 -0700237
238Note that we have not yet installed Kubernetes or Helm, so these
239commands are not yet available. At this point, the only verification
240step you can take is to type the following:
241
242.. code-block::
243
244 $ make aether-pingall
245
246The output should show that Ansible is able to securely connect to all
247the nodes in your deployment, which is currently just the one that
248Ansible knows as ``node1``.
249
250Install Kubernetes
251~~~~~~~~~~~~~~~~~~~
252
253The next step is to bring up an RKE2.0 Kubernetes cluster on your
254target server. Do this by typing:
255
256.. code-block::
257
258 $ make aether-k8s-install
259
Larry Peterson4d344dd2023-08-17 14:46:22 -0700260Note that the Ansible playbooks triggered by this (and other) make
261targets will output red results from time-to-time (indicating an
262exception or failure), but as long as Ansible keeps progressing
263through the playbook, such output can be safely ignored.
264
llpb3534642023-08-02 09:23:52 -0700265Once the playbook completes, executing ``kubectl`` will show the
266``kube-system`` namespace running, with output looking something like
267the following:
268
269.. code-block::
270
271 $ kubectl get pods --all-namespaces
272 NAMESPACE NAME READY STATUS RESTARTS AGE
273 kube-system cloud-controller-manager-node1 1/1 Running 0 2m4s
274 kube-system etcd-node1 1/1 Running 0 104s
275 kube-system helm-install-rke2-canal-8s67r 0/1 Completed 0 113s
276 kube-system helm-install-rke2-coredns-bk5rh 0/1 Completed 0 113s
277 kube-system helm-install-rke2-ingress-nginx-lsjz2 0/1 Completed 0 113s
278 kube-system helm-install-rke2-metrics-server-t8kxf 0/1 Completed 0 113s
279 kube-system helm-install-rke2-multus-tbbhc 0/1 Completed 0 113s
280 kube-system kube-apiserver-node1 1/1 Running 0 97s
281 kube-system kube-controller-manager-node1 1/1 Running 0 2m7s
282 kube-system kube-multus-ds-96cnl 1/1 Running 0 95s
283 kube-system kube-proxy-node1 1/1 Running 0 2m1s
284 kube-system kube-scheduler-node1 1/1 Running 0 2m7s
285 kube-system rke2-canal-h79qq 2/2 Running 0 95s
286 kube-system rke2-coredns-rke2-coredns-869b5d56d4-tffjh 1/1 Running 0 95s
287 kube-system rke2-coredns-rke2-coredns-autoscaler-5b947fbb77-pj5vk 1/1 Running 0 95s
288 kube-system rke2-ingress-nginx-controller-s68rx 1/1 Running 0 48s
289 kube-system rke2-metrics-server-6564db4569-snnv4 1/1 Running 0 56s
290
291If you are interested in seeing the details about how Kubernetes is
292customized for Aether, look at
293``deps/k8s/roles/rke2/templates/master-config.yaml``. Of particular
294note, we have instructed Kubernetes to allow service for ports ranging
295from ``2000`` to ``36767`` and we are using the ``multus`` and
296``canal`` CNI plugins.
297
298Install SD-Core
299~~~~~~~~~~~~~~~~~~~~~~~~~
300
301We are now ready to bring up the 5G version of the SD-Core. To do
302that, type:
303
304.. code-block::
305
306 $ make aether-5gc-install
307
308``kubectl`` will now show the ``omec`` namespace running (in addition
309to ``kube-system``), with output similar to the following:
310
311.. code-block::
312
313 $ kubectl get pods -n omec
314 NAME READY STATUS RESTARTS AGE
315 amf-5887bbf6c5-pc9g2 1/1 Running 0 6m13s
316 ausf-6dbb7655c7-42z7m 1/1 Running 0 6m13s
317 kafka-0 1/1 Running 0 6m13s
318 metricfunc-b9f8c667b-r2x9g 1/1 Running 0 6m13s
319 mongodb-0 1/1 Running 0 6m13s
320 mongodb-1 1/1 Running 0 4m12s
321 mongodb-arbiter-0 1/1 Running 0 6m13s
322 nrf-54bf88c78c-kcm7t 1/1 Running 0 6m13s
323 nssf-5b85b8978d-d29jm 1/1 Running 0 6m13s
324 pcf-758d7cfb48-dwz9x 1/1 Running 0 6m13s
325 sd-core-zookeeper-0 1/1 Running 0 6m13s
326 simapp-6cccd6f787-jnxc7 1/1 Running 0 6m13s
327 smf-7f89c6d849-wzqvx 1/1 Running 0 6m13s
328 udm-768b9987b4-9qz4p 1/1 Running 0 6m13s
329 udr-8566897d45-kv6zd 1/1 Running 0 6m13s
330 upf-0 5/5 Running 0 6m13s
331 webui-5894ffd49d-gg2jh 1/1 Running 0 6m13s
332
Larry Peterson4d344dd2023-08-17 14:46:22 -0700333If you see problematic pods that are not getting into the ``Running``
Larry Peterson14b9b952023-09-21 10:03:44 -0700334state, a reset usually corrects the problem. Type:
Larry Peterson4d344dd2023-08-17 14:46:22 -0700335
336.. code-block::
337
338 make aether-resetcore
339
340Once running, you will recognize pods that correspond to many of the
Larry Petersondef1b672023-08-07 14:06:24 -0700341microservices discussed is `Chapter 5
342<https://5g.systemsapproach.org/core.html>`__. For example,
llpb3534642023-08-02 09:23:52 -0700343``amf-5887bbf6c5-pc9g2`` implements the AMF. Note that for historical
344reasons, the Aether Core is called ``omec`` instead of ``sd-core``.
345
Larry Peterson5d6b3b32023-09-05 15:11:55 -0700346.. admonition:: Troubleshooting Hint
347
348 If you see failures of the ``find ens18's netplan network
349 directory`` task in the ``router`` role, it indicates that
Larry Peterson9abaff02023-10-19 09:02:50 -0700350 *systemd-networkd* is not configured as expected. Check the OnRamp
351 `Troubleshooting Wiki Page
352 <https://github.com/opennetworkinglab/aether-onramp/wiki/Troubleshooting>`__
Larry Peterson5d6b3b32023-09-05 15:11:55 -0700353 for possible workarounds.
354
llpb3534642023-08-02 09:23:52 -0700355If you are interested in seeing the details about how SD-Core is
356configured, look at
357``deps/5gc/roles/core/templates/radio-5g-values.yaml``. This is an
Larry Peterson505d4b32023-08-21 14:39:45 -0700358example of a *values override* file that Helm passes along to
llpb3534642023-08-02 09:23:52 -0700359Kubernetes when launching the service. Most of the default settings
360will remain unchanged, with the main exception being the
361``subscribers`` block of the ``omec-sub-provision`` section. This
362block will eventually need to be edited to reflect the SIM cards you
363actually deploy. We return to this topic in the section describing how
364to bring up a physical gNB.
365
366
367Run Emulated RAN Test
368~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
369
370We can now test SD-Core with emulated traffic by typing:
371
372.. code-block::
373
374 $ make aether-gnbsim-install
375 $ make aether-gnbsim-run
376
377Note that you can re-execute the ``aether-gnbsim-run`` target multiple
378times, where the results of each run are saved in a file within the
379Docker container running the test. You can access that file by typing:
380
381.. code-block::
382
383 $ docker exec -it gnbsim-1 cat summary.log
384
Larry Peterson0fa9b362023-08-09 15:15:13 -0700385If successful, the output should look like the following:
llpb3534642023-08-02 09:23:52 -0700386
387.. code-block::
388
Larry Peterson0fa9b362023-08-09 15:15:13 -0700389 2023-08-09T19:57:09Z [INFO][GNBSIM][Summary] Profile Name: profile2 , Profile Type: pdusessest
Larry Petersonaf9ea362023-08-11 16:40:19 -0700390 2023-08-09T19:57:09Z [INFO][GNBSIM][Summary] UEs Passed: 5 , UEs Failed: 0
Larry Peterson0fa9b362023-08-09 15:15:13 -0700391 2023-08-09T19:57:09Z [INFO][GNBSIM][Summary] Profile Status: PASS
llpb3534642023-08-02 09:23:52 -0700392
393This particular test, which runs the cryptically named ``pdusessest``
Larry Petersonaf9ea362023-08-11 16:40:19 -0700394profile, emulates five UEs, each of which: (1) registers with the
llpb3534642023-08-02 09:23:52 -0700395Core, (2) initiates a user plane session, and (3) sends a minimal data
Larry Peterson0fa9b362023-08-09 15:15:13 -0700396packet over that session. In addition to displaying the summary
397results, you can also open a shell in the ``gnbsim-1`` container,
398where you can view the full trace of every run of the emulation, each
399of which has been saved in a timestamped file:
400
401.. code-block::
402
403 $ docker exec -it gnbsim-1 bash
404 bash-5.1# ls
405 gnbsim gnbsim1-20230809T125702.config summary.log
406 gnbsim.log gnbsim1-20230809T125702.log
407 bash-5.1# more gnbsim1-20230809T125702.log
408 2023-08-09T19:57:05Z [INFO][GNBSIM][App] App Name: GNBSIM
409 2023-08-09T19:57:05Z [INFO][GNBSIM][App] Setting log level to: info
410 2023-08-09T19:57:05Z [INFO][GNBSIM][GNodeB][gnb1] GNodeB IP: GNodeB Port: 9487
411 2023-08-09T19:57:05Z [INFO][GNBSIM][GNodeB][UserPlaneTransport] User Plane transport listening on: 172.20.0.2:2152
412 2023-08-09T19:57:05Z [INFO][GNBSIM][GNodeB] Current range selector value: 63
413 2023-08-09T19:57:05Z [INFO][GNBSIM][GNodeB] Current ID range start: 1056964608 end: 1073741823
414 2023-08-09T19:57:05Z [INFO][GNBSIM][GNodeB][ControlPlaneTransport] Connected to AMF, AMF IP: 10.76.28.113 AMF Port: 38412
415 ...
416
Larry Peterson505d4b32023-08-21 14:39:45 -0700417.. admonition:: Troubleshooting Hint
418
419 If ``summary.log`` is empty, it means the emulation did not run due
420 to a configuration error. To debug the problem, open a bash shell on
421 the gNBsim container (as shown in the preceding example), and look
422 at ``gnbsim.log``. Output that includes ``failed to connect amf``
423 and ``err: address family not supported by protocol`` indicates that
424 your server does not have IPv6 enabled.
425
Larry Peterson134bc722023-08-25 13:47:48 -0700426.. admonition:: Troubleshooting Hint
427
428 If ``summary.log`` reports ``UEs Passed: 0 , UEs Failed: 5`` then it
Larry Peterson14b9b952023-09-21 10:03:44 -0700429 may be the case that SD-Core did not come up cleanly. Type
Larry Peterson134bc722023-08-25 13:47:48 -0700430 ``make aether-resetcore``, and after verifying all pods are running
431 with ``kubectl``, run gNBsim again.
432
Larry Peterson14b9b952023-09-21 10:03:44 -0700433 Another possibility is that you have multiple SD-Cores running in
434 the same broadcast domain. This causes ARP to behave in unexpected
435 ways, which interferes with OnRamp's ability to establish a route
436 to the UPF pod.
437
Larry Peterson0fa9b362023-08-09 15:15:13 -0700438If you are interested in the config file that controls the test,
439including the option of enabling other profiles, take a look at
llpb3534642023-08-02 09:23:52 -0700440``deps/gnbsim/config/gnbsim-default.yaml``. We return to the issue of
Larry Petersonaf9ea362023-08-11 16:40:19 -0700441customizing gNBsim in a later section, but for now there are some
442simple modifications you can try. For example, the following code
443block defines a set of parameters for ``pdusessest`` (also known as
444``profile2``):
445
446.. code-block::
447
448 - profileType: pdusessest # UE Initiated Session
449 profileName: profile2
450 enable: true
451 gnbName: gnb1
452 execInParallel: false
453 startImsi: 208930100007487
454 ueCount: 5
455 defaultAs: "192.168.250.1"
456 perUserTimeout: 100
457 plmnId:
458 mcc: 208
459 mnc: 93
460 dataPktCount: 5
461 opc: "981d464c7c52eb6e5036234984ad0bcf"
462 key: "5122250214c33e723a5dd523fc145fc0"
463 sequenceNumber: "16f3b3f70fc2"
464
465You can edit ``ueCount`` to change the number of UEs included in the
466emulation (currently limited to 100) and you can set
467``execInParallel`` to ``true`` to emulate those UEs connecting to the
Larry Peterson80235b92023-09-22 11:43:16 -0700468Core in parallel (rather than serially). You can also change variable
469``defaultAs: "192.168.250.1"`` to specify the target of ICMP Echo
470Request packets sent by the emulated UEs. Selecting the IP address of
471a real-world server (e.g., ``8.8.8.8``) is a good test of end-to-end
472connectivity. Finally, you can change the amount of information gNBsim
473outputs by modifying ``logLevel`` in the ``logger`` block at the end
474of the file. For any changes you make, just rerun ``make
475aether-gnbsim-run`` to see the effects; you do not need to reinstall
476gNBsim.
llpb3534642023-08-02 09:23:52 -0700477
llpb3534642023-08-02 09:23:52 -0700478Clean Up
479~~~~~~~~~~~~~~~~~
480
481We recommend continuing on to the next section before wrapping up, but
482when you are ready to tear down your Quick Start deployment of Aether,
483simply execute the following commands:
484
485.. code-block::
486
487 $ make aether-gnbsim-uninstall
488 $ make aether-5gc-uninstall
489 $ make aether-k8s-uninstall
490
491Note that while we stepped through the system one component at a time,
492OnRamp includes compound Make targets. For example, you can uninstall
493everything covered in this section by typing:
494
495.. code-block::
496
497 $ make aether-uninstall
498
499Look at the ``Makefile`` to see the available set of Make targets.