Introduction
TOP/ORS-Amarisoft software-release is private customization of public ORS-Amarisoft software-release and inherits architecture + general structure from public version. Both software-releases, in particular, provide eNodeB service built on top of Amarisoft LTEENB program. LTEENB provides way to configure itself via enb.cfg configuration file (2, 3) with lots of options that cover many different LTE and NR features. ORS-Amarisoft and TOP/ORS-Amarisoft software releases provide way to configure eNodeB service in more structured and simplified way via smaller set of main parameters and separate Radio-Unit, Cell, Peer and PeerCell instances all integrated into SlapOS REST API and WEB management interfaces. At SlapOS level the parameters are described by JSON schemas and the software release generates enb.cfg for LTEENB program from those parameters via Jinja templating. Templating code is located in config/enb.jinja2.cfg and slaplte.jinja2. In this document we will briefly outline how enb.jinja2.cfg is organized.
Organization of enb.jinja2.cfg
config/enb.jinja2.cfg is based on Amarisoft examples and mostly generalizes them with using Jinja templating instead of C Preprocessor because Jinja templating has loops and provides programming capabilities. We use loops, for example, to map SlapOS Cell instances to cell_list entries.
When being rendered, enb.jinja2.cfg accepts main eNodeB instance parameters via slapparameter_dict variable, and parameter of attached RU, CELL, PEER and PEERCELL instances are loaded into iru_dict, icell_dict, ipeer_dict ad ipeercell_dict by corresponding utility routines in slaplte.jinja2:288-588.
Emitted configuration starts with rf_driver directive yielded by ru_config macro in slaplte.jinja2:593-680. This macro goes through configured RU instances and produces rf_driver directive with parameters to cover them all.
Next global parameters like enb_id, mme_list, gtp_addr and x2_peers are emitted.
When handling cells we loop trough all cells and for each cell emit an entry that maps the cell to corresponding RU + configures primary cell parameters like cell_id and dl_earfcn: config/enb.jinja2.cfg:328-340. For all cell pairs Carrier Aggregation is also set up: config/enb.jinja2.cfg:346-374. We also emit Inter-ENB Handover configuration to PEERCELL instances: config/enb.jinja2.cfg:31-107. That code is also generally able to setup Intra-ENB Handover as well.
The rest of the configuration mostly deals with tuning LTE parameters of each cell: config/enb.jinja2.cfg:377-596.
That completes overview of enb.jinja2.cfg
.