Runtime Control

Aether defines an API (and associated GUI) for managing connectivity at runtime. This stage brings up that API/GUI, as implemented by the Runtime Operational Control (ROC) subsystem, building on the physical gNB we connected to Aether in the previous section.

This stage focuses on the abstractions that the ROC layers on top of the SD-Core. These abstractions are described in Section 6.4 and include Device Groups and Slices. (The full set of model definitions can be found in GitHub.) Initial settings of these ROC-managed parameters are recorded in deps/amp/roles/roc-load/templates/radio-5g-models.json. We use these values to load the ROC database, saving us from a laborious GUI session.

Somewhat confusingly, the Device-Group and Slice information is duplicated between deps/5gc/roles/core/templates/radio-5g-values.yaml and this radio-5g-models.json file. This makes it possible to bring up the SD-Core without the ROC, which simplifies the process of debugging an initial installation, but having two sources for this information leads to problems keeping them in sync, and should be avoided.

To this end, Aether treats the ROC as the "single source of truth" for Slices, Device Groups, and all the other abstract objects it defines, so we recommend using the GUI or API to make changes over time, and avoiding the override values in radio-5gc-values.yaml once you've established basic connectivity. And if you want to save this bootstrap state in a text file for a possible restart, we recommend doing so in radio-5g-models.json (although this is not a substitute for the operational practice of backing up the ROC database).

To make ROC the authoritative source of runtime state, first edit the standalone variable in the core section of vars/main.yml, setting it to false. This variable indicates whether we want SD-Core to run in Stand Alone mode, which has been the default setting up to this point. Disabling standalone causes the SD-Core to ignore the device-groups and network-slices blocks of the omec-sub-provision section in radio-5gc-values.yaml, and to instead retrieve this information from the ROC.

The next step is to edit radio-5g-models.json to record the same IMSI information you added to radio-5gc-values.yaml in the previous section. This includes modifying, adding and removing sim-card entries as necessary. Note that only the IMSIs need to match the earlier data; the sim-id and display-name values are arbitrary and need only be consistent within radio-5g-models.json.

"imsi-definition": {
       "mcc": "315",
       "mnc": "010",
       "enterprise": 1,
       "format": "CCCNNNEESSSSSSS"
},
...

"sim-card": [
       {
           "sim-id": "sim-1",
           "display-name": "SIM 1",
           "imsi": "315010999912301"
       },
...

Once you are done with these edits, uninstall the SD-Core you had running in the previous stage, and then bring up the ROC followed by a new instantiation of the SD-Core. The order is important because the Core depends on configuration parameters provided by the ROC. (You may also need to reboot the gNB, although it typically does so automatically when it detects that the Core has restarted.)

$ make aether-5gc-uninstall
$ make aether-amp-install
$ make aether-5gc-install

As an aside, the above uses the aether-amp-install Make target to install ROC, but that target also installs the monitoring service. The latter is not required in this situation, but you are always free to use subsystem-specific targets (as documented in the Makefile) rather than the Aether-wide targets we've been using. For example, installing just ROC can be done in two steps: the first provisions ROC as a Kubernetes application, and the second loads the json files that define the Models into that service.

$ make roc-install
$ make roc-load

To see these initial configuration values using the GUI, open the dashboard available at http://<server-ip>:31194. If you select Configuration > Site from the drop-down menu at top right, and click the Edit icon associated with the Aether Site you can see (and potentially change) the following values:

  • MCC: 315

  • MNC: 010

Although we have no need to do so now, you can make changes to these values, and then click Update to save them to the "commit basket". Similarly, if you select Sim Cards from the drop-down menu at top right, the Edit icon associated with each SIM card allows you to see (and potentially change) the IMSI values associated with each device. You can also disable individual IMSIs. Again, click Update if you make any changes.

The set of registered IMISs can be aggregated into Device-Groups by selecting Device-Groups from the drop-down menu at the top right, and adding a new device group.

Finally, if you do make a set of updates, select the Basket icon at top right when you are done, and click the Commit button. This causes the set of changes to be committed as a single transaction.

A more complete User's Guide for the ROC is available online, although be aware that our OnRamp-based deployment has not yet enabled the secure login feature.

Further Reading

Aether Operations.