Configuration Guide
This tutorial shows the overall architecture of Amari Callbox. It shows various components of the Callbox Protocol stack and various configuration files for each components of the callbox software. One of the challenges to configure the callbox as per your requirement would be to figure out which configuration file you need to modify and which parameter you have to set in each of the configuration file. I hope this digram would give you a first level hints to figure out which configuration file you need to pick for your test requirement.
On gNB/eNB side, there are many different types of configuration file. It would be a little challenging to get the detailed understanding on all the details of each and every configuration file. If you are new to Amarisoft System, try to understand the configuration files in the following order. This order is the order in which most of the customer would most frequently changes for the testing. The file location in the list below is based on the assumption that you installed Amarisoft software in default location (/root)
- enb.cfg : located in /root/enb/config
- mme.cfg : located in /root/mme/config
- ims.cfg : located in /root/mme/config
- ue_db.cfg : located in /root/mme/config
- drb.cfg : located in /root/enb/config
- ots.cfg : located in /root/ots/config
enb.cfg -> myenb.cfg
To create the symbolic link as shown above. Run the following command within the corresponding directory.
ln -sf myenb.cfg enb.cfg
Table of Contents
- Configuration Guide
- Introduction
- Summary of the Tutorial
- Overview
- Data Path for Internet Access
- Core Component / Interfaces / Protocol / Port
- Structure of Full Stack Configuration
- Structure of RAN(eNB/gNB) Configuration
- Structure of NAS/Core Configuration
- Structure of IMS Configuration
- Structure of drb Configuration
- Structure of ue-db Configuration
- Structure of Single LTE Cell
- Structure of Single NR/SA Cell
- Structure of NR/NSA Cell (1 LTE + 1 NR)
- Structure of NB-IoT Cell
- Structure of LTE Carrier Aggregation
- Structure of LTE Handover
Introduction
Amari Callbox is a comprehensive software suite developed by Amarisoft, designed to emulate and test advanced cellular network components, particularly focusing on 4G LTE (eNB) and 5G NR (gNB) radio access networks. The Callbox architecture encompasses a modular protocol stack that integrates multiple network elements and allows for precise configuration and testing of wireless communication protocols. At the core of the Callbox system are various software modules, each responsible for different layers and functions within the protocol stack, such as radio resource control, mobility management, and session management. Configuration management is a central aspect of the Amari Callbox ecosystem, relying on a structured set of configuration files (e.g., enb.cfg, mme.cfg, ims.cfg) that dictate the behavior, parameters, and operational profiles of each network component. These files are symbolically linked for flexible deployment and customization, enabling users to adapt the system for diverse testing scenarios. Understanding the architectural layout and the interplay between configuration files is critical for effectively leveraging the Callbox for testing, development, and validation of wireless network deployments. This tutorial provides a detailed overview of the Amari Callbox architecture and guides users on identifying and modifying the appropriate configuration files to meet specific test requirements, particularly from the perspective of new users or those transitioning to Amarisoft systems.
-
Context of Amari Callbox Technology
- Amari Callbox simulates and tests 4G and 5G network elements, supporting research, development, and quality assurance for cellular networks.
- The platform integrates radio access network (RAN) emulation, core network functionalities (such as MME and IMS), and user equipment simulation in a single, configurable testbed.
- Each major network component is controlled and parameterized via dedicated configuration files, enabling granular control over test scenarios and network behaviors.
- Symbolic linking of configuration files allows for rapid switching and customization without altering original files, enhancing workflow efficiency and reproducibility.
-
Relevance and Importance of the Tutorial
- This tutorial addresses a common challenge: determining which configuration files to modify and which parameters to set for specific test requirements in Amari Callbox.
- It provides a first-level mapping between protocol stack components and their associated configuration files, streamlining the setup and customization process.
- Understanding this architecture is crucial for users who need to perform targeted network tests, optimize configurations, or troubleshoot issues in a dynamic RAN environment.
-
What Learners Will Gain
- Comprehensive understanding of the Amari Callbox protocol stack and its modular software architecture.
- Ability to identify, locate, and edit key configuration files for different network components such as eNB/gNB, MME, IMS, UE database, and OTS.
- Knowledge of symbolic linking techniques for managing configuration files, supporting rapid and flexible deployment of test scenarios.
- Insights into best practices for configuring Amarisoft systems to align with specific network test requirements.
-
Prerequisite Knowledge and Skills
- Familiarity with basic concepts of 4G/5G mobile networks, including RAN and core network components.
- Comfort with Linux command-line tools, particularly for file system navigation and symbolic link management (e.g., ln -sf commands).
- Basic understanding of network configuration principles and protocol stack operations in cellular systems.
- Access to an Amarisoft Callbox installation with default directory structure (typically /root).
Summary of the Tutorial
This document provides a comprehensive procedural overview for configuring and testing various aspects of Callbox software, focusing on the structure and methodology for each configuration and test scenario. The summary below outlines the steps and methodologies for configuring protocol stack components, RAN and core network elements, APN/QoS, network slicing, IMS, DRB, UE database, and various radio access scenarios, including LTE, NR/SA, NR/NSA, NB-IoT, LTE Carrier Aggregation, and LTE Handover configurations.
-
Configuration File Mapping and Directory Structure
- Configuration files are mapped to protocol stack layers or network components and are distributed into two directories:
- enb: Contains RAN-side configuration files.
- mme: Contains core network configuration files.
- Configuration files are mapped to protocol stack layers or network components and are distributed into two directories:
-
Data Path and Component Setup
- Illustrates the data path for internet access, including GTPU interface assignment and DNS settings.
- Details the default and customizable IP address assignment for TUN interfaces in mme configuration.
-
Protocol, Interface, and Port Summary
- Lists all relevant protocol interfaces, message types, and default port numbers (e.g., S1AP over SCTP/36412, GTP-U over UDP/2152).
-
Configuration Structure and Methodology
-
RAN (eNB/gNB) Configuration (enb.cfg)
- Configures all RAN layers from PHY to RRC/PDCP.
- Defines parameters for logging, remote API, RF settings, core network (MME/AMF), GTP addresses, and lists of physical and logical cells.
- Supports both LTE and NR cells, with separate arrays (cell_list for LTE, nr_cell_list for NR).
- Default parameters can be set globally (cell_default, nr_cell_default).
-
NAS/Core Network Configuration (mme.cfg)
- Configures NAS layer and core network elements including PLMN, MME group and code, IMS VoPS, emergency numbers, network names, PDN/APN details, ciphering/integrity preferences, and includes for user DB.
-
APN/QoS Configuration
- APN and QoS are configured within mme.cfg via the pdn_list array, specifying PDN types, APN names, IP ranges, DNS, and E-RAB/QoS flows.
-
Network Slice Configuration
- Configured both in gNB (enb.cfg) and core (mme.cfg) using plmn_list and nssai arrays, with each slice identified by SST and optional SD, and associated with specific QoS flows.
-
IMS Configuration (ims.cfg)
- Includes logging, SIP server bindings, MMS and SCTP addresses, domain settings, and IPsec configurations.
-
DRB Configuration
- Defined in subsidiary files and included in major configs; specifies per-QCI settings, PDCP, RLC, and logical channel configurations for both LTE and NR.
-
UE Database Configuration
- USIM/ISIM parameters for each UE are set in subsidiary files, including authentication algorithms, IMSI, keys, and identities.
-
RAN (eNB/gNB) Configuration (enb.cfg)
-
Radio Access Configuration Scenarios
-
Single LTE Cell
- Configured via cell_list (single object for one cell) and cell_default for shared parameters.
-
Single NR/SA Cell
- Configured via nr_cell_list and nr_cell_default for NR-specific parameters (e.g., band, ARFCN, subcarrier spacing).
-
NR/NSA Cell (1 LTE + 1 NR)
- Both cell_list (LTE) and nr_cell_list (NR) arrays are populated; each with their respective default sections for shared settings.
-
NB-IoT Cell
- Uses nb_cell_list and nb_cell_default for standalone or non-standalone NB-IoT operation, supporting detailed RACH, SIB, and HARQ parameters.
-
LTE Carrier Aggregation
- Multiple cells are specified in cell_list, each with scell_list entries for secondary cells and carrier aggregation logic.
-
LTE Handover
- Multiple cells in cell_list, each with ncell_list for neighbor/target cells. Handover is triggered by measurement configurations (e.g., A3 event) and can be dynamically managed via meas_config_desc and ho_from_meas parameters.
-
Single LTE Cell
General Methodology:
- Each configuration scenario is built using a hierarchical file structure, with arrays and default objects for scalable, multi-cell deployments.
- Configuration files are modular, allowing includes and references to subsidiary files for DRB, UE DB, or RF driver configurations.
- Parameters can be overridden at the individual cell or global level, with explicit precedence given to cell-specific definitions.
- Specialized scenarios such as carrier aggregation and handover require careful population of secondary/neighbor cell lists and measurement triggers.
This procedural summary provides the foundational steps and considerations necessary for configuring, testing, and managing the Callbox software across multiple network scenarios and protocol layers.
Overview
There are many different types of configuration files are involved in the operation of Callbox software and it would be tricky or confusing to figure out which configuration file is associated with which layers of protocol stack or which network component. Following illustrates each of the configuration files mapped to corresponding protocol stack or network component. This figure gives a high-level view of how a typical Amarisoft-based LTE/NR lab system is organized, showing the main functional blocks—eNB/gNB, MME/EPC, IMS, and external IP/Internet services—and how they are connected through radio and IP interfaces. The main purpose of the diagram is to map each part of the end-to-end system to the configuration files that control it, such as enb.cfg for radio stack and interface settings, drb.cfg for bearer-related behavior, mme.cfg and ue_db.cfg for core network and subscriber definitions, and ims.cfg for IMS service parameters. In other words, it serves as a practical configuration roadmap that helps you understand where the major network identities, addresses, protocol settings, and service-related parameters are defined so that the full lab setup can operate consistently from the RAN side to IMS and external connectivity.

Followings are the bulleted summary of the illustration show above
-
Purpose of the diagram
- Shows a high-level configuration map of an Amarisoft-based LTE/NR lab setup.
-
Explains how major network blocks are connected:
- eNB/gNB (RAN)
- MME/EPC (core)
- IMS
- IP Server / Internet
- Highlights which configuration file controls which part of the system.
-
eNB/gNB side (RAN)
-
Represents the radio protocol stack:
- RRC
- PDCP
- RLC
- MAC
- PHY
-
Also shows lower radio hardware path:
- RF
- RRH
- CPRI connection
-
Main config file:
-
enb.cfg- Radio/channel parameters (frequency, power, MIMO)
- PHY-related settings (PDCCH/PUCCH/PUSCH, etc.)
- Scheduling/resource settings (RB, TDD, etc.)
- gNB/eNB-side IP/GTP interface address (
gtp_addr) - Core-side control-plane target address (
mme_addr)
-
-
Represents the radio protocol stack:
-
Bearer-specific configuration
drb.cfgis shown as a separate config for DRB behavior.-
Covers data bearer / PDCP-RLC related settings such as:
- QCI
- ROHC
- SN size
- Discard timer
- UM/AM mode
- Logical channel configuration
-
MME/EPC (core) side
-
Main core configuration files:
mme.cfgue_db.cfg
-
Core block includes definitions such as:
- PLMN
- Network name
- PDN / APN
- Authentication / SIM-related parameters
-
ue_db.cfgrole (high level)- Subscriber/UE database and SIM credentials
-
mme.cfgrole (high level)- Core network behavior
- Addressing / connectivity parameters
- PDN/APN-related service routing info
-
Main core configuration files:
-
RAN ↔ Core connectivity mapping
- Diagram emphasizes address matching between configs.
-
Examples shown:
-
mme_addrinenb.cfg- eNB/gNB points to MME/AMF/S1AP endpoint
-
gtp_addrreferences on both sides- GTP-facing interface addresses must be consistent across RAN/core setup
-
-
IMS side
-
IMS block is configured mainly by:
ims.cfg
-
IMS-related parameters shown include:
- Domain name
- SIP address
- Precondition
- IPSec
-
Cross-reference from core config:
-
p_cscf_addrinmme.cfg- Core provides/uses CSCF address information for IMS service access
-
-
IMS block is configured mainly by:
-
IP Server / Internet connectivity
-
Core connects onward to:
- Local IP Server
- Internet
-
Diagram indicates:
- IP Server address is derived from
pdn_listinmme.cfg -
Internet access typically does not require a fixed server IP in config
- DNS-related settings (e.g.,
dns_addrinmme.cfg) are the key part
- DNS-related settings (e.g.,
- IP Server address is derived from
-
Core connects onward to:
-
Additional included configuration files
- Main config files often include other files for modularization.
-
Examples shown in the diagram:
- RF driver-related
*.cfgincluded byenb.cfg - ASN-related files included by
enb.cfg ue_db-*.cfgincluded bymme.cfg*.sdpincluded byims.cfg
- RF driver-related
-
Practical meaning:
enb.cfg,mme.cfg, andims.cfgare often top-level entry files, not the only files
-
Overall takeaway
- The diagram is a practical “who-configures-what” map.
-
It helps you understand where to set:
- Radio parameters
- Bearer behavior
- Core/subscriber settings
- IMS service parameters
- IP connectivity-related addresses
- The key idea is consistency across files so the full end-to-end lab system works correctly.
The configurations files shown in the diagram above are distributed into two directories as shown below. As shown below, enb directory carries configuration files for RAN side operation and mme directory carries configuration files for core network.
This figure complements the previous configuration map by showing where those configuration files are physically located in the filesystem and how Amarisoft separates them by function. At a high level, it explains that the configuration files used for the RAN side (such as enb.cfg and drb.cfg) are stored under the enb directory, while the configuration files used for the core network and IMS side (such as mme.cfg and ims.cfg) are stored under the
mme directory. The screenshots also illustrate a typical /root layout with symbolic links pointing to installed Amarisoft package directories, making it easier to understand how the lab environment is organized in practice and where to look when editing RAN versus core/IMS settings.

Followings are the bulleted summary of the illustration show above
-
Purpose of the figure
- Shows the filesystem location of the configuration files introduced in the previous diagram.
-
Explains how Amarisoft separates configuration files by subsystem:
- RAN-side configs in the
enbdirectory - Core/IMS-side configs in the
mmedirectory
- RAN-side configs in the
- Helps users understand where to go in the Linux filesystem when editing settings.
-
Top-level
/rootdirectory view-
The left screenshot shows commands such as:
cd /rootpwdls -al
- It illustrates a typical Amarisoft lab installation under
/root. - It shows multiple Amarisoft-related directories and symbolic links.
- Red arrows highlight example links/paths associated with installed package directories.
-
Practical meaning:
- The system may use versioned installation folders
- Short names (like
enb,mme) may point to those versioned folders via symbolic links
-
The left screenshot shows commands such as:
-
RAN configuration directory (
/root/enb/config)-
The upper-right screenshot shows:
pwdoutput as/root/enb/configlsoutput listing many RAN-side configuration files
-
The caption emphasizes that this directory contains files such as:
enb.cfgdrb.cfg
-
It also shows many related files in the same folder, including:
- Variant eNB/gNB configuration files
- RF-driver-related files/directories
- ASN-related files (e.g.,
sib*.asn) - Measurement configuration files
-
Practical meaning:
enb.cfganddrb.cfgare part of a larger RAN config set- RAN configuration is modular and often includes multiple supporting files
-
The upper-right screenshot shows:
-
Core / IMS configuration directory (
/root/mme/config)-
The lower-right screenshot shows:
pwdoutput as/root/mme/configlsoutput listing core-network and IMS-related configuration files
-
The caption emphasizes that this directory contains files such as:
mme.cfgims.cfg
-
It also shows related files, including:
- default config variants (e.g.,
mme.default.cfg,ims.default.cfg) - IMS / MME combined or variant configs
- UE database file(s)
- SDP files for media/call scenarios
- default config variants (e.g.,
-
Practical meaning:
- Core and IMS settings are grouped together under the MME-side config directory
- This is the main place to edit EPC/IMS behavior and service-related parameters
-
The lower-right screenshot shows:
-
Relationship to the previous diagram
- The previous diagram explained which file controls which network function.
- This figure explains where those files are located in the filesystem.
-
Together, they provide:
- logical mapping (function → config file)
- physical mapping (config file → directory path)
-
Overall takeaway
- Amarisoft configuration is organized in a clear subsystem-based structure.
- Use
/root/enb/configfor RAN-side settings (enb.cfg,drb.cfg, and related files). - Use
/root/mme/configfor core/IMS-side settings (mme.cfg,ims.cfg, UE DB, SDP, and related files). - Understanding this separation makes troubleshooting and configuration changes much easier.
Data Path for Internet Access
Overall data path and components during internet access is illustrated as below. This figure illustrates the overall data path and key components involved when a UE accesses the internet through an Amarisoft-based LTE/NR lab setup, and it compares the system behavior before and after the UE completes the initial attach process. In the upper part, the UE has not yet been assigned an IP address, so the RAN (eNB/gNB) and the core network are present but no user-data path is active toward external services. In the lower part, after the initial attach with PDN/PDU session establishment, the UE receives an IP address and the core network activates tunnel interfaces (such as tun0, tun1, etc.) with corresponding subnet addresses, enabling traffic to flow through the default gateway toward external networks such as Google DNS (8.8.8.8) and the internet. The diagram therefore provides a high-level operational view of how control-plane setup leads to user-plane connectivity, linking the UE, RAN stack, core network tunnels, and external IP services into one end-to-end path.

Followings are the bulleted summary of the illustration show above
-
Purpose of the figure
- Shows the end-to-end data path for internet access in an Amarisoft LTE/NR lab setup.
-
Compares two system states:
- Before attach / before IP assignment
- After attach / after PDN(PDU) session establishment
- Highlights how user-plane connectivity is created through the core network tunnel interfaces.
-
Main components shown
-
UE (phone)
- Initially has no IP address
- Later receives an IP address (example shown:
192.168.2.2)
-
eNB/gNB (RAN)
-
Protocol stack shown as:
- RRC
- PDCP
- RLC
- MAC
- PHY
-
Lower radio/hardware path shown as:
- RF
- RRH
- SDR / CPRI-related connection paths
- Connected to the core through GTP-U (user-plane interface)
-
Protocol stack shown as:
-
Core Network
-
Contains multiple tunnel interfaces:
tun0tun1tun2tun3
- Connected to external network through a Default Gateway
-
Contains multiple tunnel interfaces:
-
External services / Internet
-
Example external destination shown:
- Google DNS
8.8.8.8
- Google DNS
- General internet/cloud connectivity also shown
-
Example external destination shown:
-
UE (phone)
-
Upper section (before attach / UE IP not assigned)
-
The UE is shown with the note:
- UE IP not assigned
- The eNB/gNB and core network are running, but the user-plane path is not yet established for the UE.
- Core tunnel interfaces are shown, but they are not yet carrying traffic for a UE session.
-
Practical meaning:
- The network infrastructure exists
- The UE has not completed the procedure needed to receive IP connectivity
- Internet traffic from the UE cannot flow yet
-
The UE is shown with the note:
-
Transition event (middle annotation)
-
The purple downward arrow indicates the key step:
- Initial Attach with PDN/PDU Establishment
-
This is the process in which:
- UE registration/attach completes
- A data session is established
- IP address allocation and user-plane setup are performed
-
The purple downward arrow indicates the key step:
-
Lower section (after attach / UE IP assigned)
-
The UE is shown with:
- UE IP assigned (example:
192.168.2.2)
- UE IP assigned (example:
-
The core network tunnel interfaces now show example subnet/gateway-side addresses:
tun0(e.g.,192.168.2.1)tun1(e.g.,192.168.3.1)tun2(e.g.,192.168.4.1)tun3(e.g.,192.168.5.1)
-
Red arrows indicate active traffic flow:
- UE ↔ eNB/gNB
- eNB/gNB ↔ Core Network (via GTP-U)
- Core Network ↔ Default Gateway
- Default Gateway ↔ Internet / Google DNS
-
Practical meaning:
- The UE now has a routable path (within the lab’s configured network)
- The core maps UE traffic to the appropriate tunnel/interface
- External IP communication becomes possible
-
The UE is shown with:
-
Role of tunnel interfaces (
tun0,tun1, etc.)- Represent logical interfaces created/used by the core network for UE data sessions.
- Each tunnel can correspond to a subnet or PDN/PDU context depending on configuration.
-
They act as the bridge between:
- mobile user-plane traffic from the RAN
- Linux IP routing/NAT/default gateway toward external networks
-
Role of the default gateway and DNS
-
Default Gateway
- Provides the route from the core network host toward external networks
- Enables internet-bound packets to leave the lab system
-
Google DNS (
8.8.8.8)- Shown as a common test destination
- Useful for verifying internet connectivity (e.g., ping/DNS queries)
-
Practical testing implication:
- If attach succeeds but internet fails, check:
- tunnel interface IP/subnet setup
- routing table/default gateway
- NAT/forwarding rules
- DNS settings
- If attach succeeds but internet fails, check:
-
Default Gateway
-
Control-plane vs user-plane insight (high level)
- The diagram emphasizes that internet access is not just about radio link establishment.
-
First, control-plane procedures must complete:
- attach/registration
- PDN/PDU session setup
-
Then, user-plane resources are activated:
- GTP-U path
- tunnel interface mapping
- IP routing to gateway/internet
- This is why a UE may be “connected” at radio level but still have no internet until session/IP setup is complete.
-
Overall takeaway
- The figure provides a simple operational picture of how a UE moves from “radio connected but no IP” to “full internet access.”
-
It links together:
- UE IP assignment
- eNB/gNB user-plane transport (GTP-U)
- core tunnel interfaces (
tunX) - Linux default routing
- external IP services (e.g.,
8.8.8.8)
- It is a useful troubleshooting view for identifying where internet access fails in the end-to-end path.
Core Component / Interfaces / Protocol / Port
- S1AP messages over SCTP port 36412
- NGAP messages over SCTP port 38412
- X2AP messages over SCTP port 36422
- XnAP messages over SCTP port 38422
- GTP-U packets over UDP port 2152
- M2AP messages over SCTP port 36443
- S6, S13, Rx, Cx Diameter messages over SCTP port 3868
- SGsAP messages over SCTP port 29118
- SBcAP messages over SCTP port 29168
- LCsAP messages over SCTP port 9082
- N8 messages over TCP/HTTP2 port 5556
- N5 messages over TCP/HTTP2 port 5570
- N12 messages over TCP/HTTP2 port 5555
- N13 messages over TCP/HPPT2 port 5592
- N17 messages over TCP/HTTP2 port 5557
- N20 messages over TCP/HTTP2 port 5571
- N50 messages over TCP/HTTP2 port 6667
- NL1 messages over TCP/HTTP2 port 5559
- IKEv2 messages over UDP port 500 and 4500
- SIP messages over UDP/TCP port 5060
Structure of Full Stack Configuration
This shows the overall configuration file structure for the full stack configuration from RAN through Core Network/Application Layer, The purpose is not to show each and every detailed parameters for the full stack. This is just to show the overall structure of each configuration file for each component (i.e, RAN, Core network, Application layer etc)
Structure of RAN(eNB/gNB) Configuration
This configuration is the one pointed by (symbolically linked to) enb.cfg. This is to configure the full stack of RAN (eNB or gNB or Both) from PHY through RRC/PDCP. At the top level, it defines node-wide runtime settings that apply to the whole eNB/gNB process, such as logging options, log file location, remote API address (com_addr), RF driver selection, and global TX/RX gain. The next level defines external interfaces and identities, including RF port definitions (rf_ports), core-network peer connections (mme_list for LTE and amf_list for NR), the GTP bind address (gtp_addr), and node identity (enb_id). Below that, the file branches into deployment-specific cell instances through cell_list (LTE) and nr_cell_list (NR), which represent the actual cells to run. In parallel, it also provides RAT-specific default templates (cell_default and nr_cell_default) that organize common protocol settings in a layered way, typically from PHY-related parameters down to mac_config, srb_config, and drb_config (with drb_config often linked to a separate file like drb.cfg). In short, the hierarchy is: global node settings → interfaces/core connectivity → LTE/NR cell instances → LTE/NR default protocol templates.
|
{
},
{ /* RF port for the first cell */ }, { /* RF port for the second cell */ }, ],
{ mme_addr: /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ }, ],
{ amf_addr: /* address of AMF for NGAP connection. Must be modified if the AMF runs on a different host. */ }, ],
],
],
/* PHY Configurations */
mac_config: { /* MAC configuration (same for all UEs) */ },
srb_config: [ /* SRB configuration */ ],
drb_config: /* DRB configuration. Links to a separate file for drb configuration */ },
/* PHY Configurations */
mac_config: { /* MAC configuration (same for all UEs) */ },
srb_config: [ /* SRB configuration */ ],
drb_config: /* DRB configuration. Links to a separate file for drb configuration */ } |
Among the parameters in the RAN configuration file, there are a set of parameters that applies in common regardless of RAN type and there are a set of parameters that are specific to a specify type of RAN.
- logging related parameters
- log_options
- log_filename
- Remote API related parameter
- com_addr
- rf related parameters
- rf_driver
- tx_gain
- rx_gain
- rf_ports
- core network related parameters
- mme_list
- amf_list
- gtp_addr
The set of parameters that are specific to a specific types of RAN is summarized as follows. In this overall structure, I will put only a small portions of parameters that are most frequently changed by users. You may refer to lteenb documents for those parameters that are not mentioned here.
Structure of NAS/Core Configuration
This configuration is the one pointed by (symbolically linked to) mme.cfg. This is to configure NAS layer and Core network. At the top level, it defines node-wide runtime settings such as logging (log_options, log_filename), remote API access (com_addr), and the GTP-U bind address (gtp_addr). The next level defines core identity and operator information, including PLMN, MME identity fields (mme_group_id, mme_code), IMS voice support capability flags (ims_vops_*), emergency number list, and broadcasted operator names (network_name, network_short_name). Below that, it defines service and feature configuration, such as RX-related settings, CIoT options (cp_ciot_opt), IMS server list (ims_list), slice configuration (nssai), and PDN/APN definitions (pdn_list) that control data-session behavior and default APN selection. At the lower operational layer, it includes system integration and security preferences, such as the tunnel interface setup script (tun_setup_script) and NAS ciphering/integrity algorithm preferences (nas_cipher_algo_pref, nas_integ_algo_pref). Finally, it can include an external subscriber database configuration through include, which links user/UE authentication and subscription data into the core configuration. In short, the hierarchy is: global runtime settings → core identity/operator capabilities → services/slices/PDN definitions → integration/security preferences → included subscriber database.
|
{
],
},
],
]
} |
Structure of APN/QoS Configuration
APN/QoS configuration is done as a part of mme.cfg (NAS and Core configuration) and basic structure is as follows. You can configure as many as APN you want in pdn_list:[ ] Array. At the top of this subtree, pdn_list is an array of PDN/PDU session profiles, and each entry represents one APN/service definition (with the first entry typically acting as the default APN). Inside each PDN entry, the next level defines the session and IP allocation properties such as pdn_type (IPv4/IPv6/IPv4v6/unstructured), access_point_name, UE IP address pool range (first_ip_addr, last_ip_addr), address stepping behavior (ip_addr_shift), and DNS server addresses (dns_addr). Within each PDN entry, the hierarchy then goes one level deeper into erabs, which is an array of bearer/QoS-flow definitions associated with that APN or PDU session. Each erabs item defines the radio bearer or QoS flow characteristics, including qci (or 5QI), priority_level, pre_emption_capability, and pre_emption_vulnerability, with the first entry being the mandatory default bearer/flow and additional entries representing dedicated bearers/flows. In short, the hierarchy is: mme.cfg → pdn_list (APN profiles) → per-PDN IP/session settings → erabs (bearer/QoS flow list) → per-bearer QoS priority/pre-emption parameters.
|
{
{ pdn_type: ipv4, ipv6, ipv4v6, unstructured (default = ipv4). Select the PDN or PDU session type. access_point_name: the Access Point Name. Use dots (.) to separate the APN elements. first_ip_addr: first ip address of the ip address sets which are reserved for UE last_ip_addr: last ip address of the ip address sets which are reserved for UE ip_addr_shift: The gap in the last segment of IP address from the previous IP. The gap is applied with 2^ip_addr_shift, dns_addr: IPv4 or IPv6 addresses of the DNS servers.
{ qci: QoS Class Identifier of the E-RAB or 5G QoS Identifier of the QOS flow. priority_level: Priority level. pre_emption_capability: the ability of a particular type of traffic to displace other ongoing lower priority traffic when network resources are limited. pre_emption_vulnerability: the susceptibility of a particular type of traffic to being displaced by other traffic with higher priority and pre-emption capability. }, ], }, ]
} |
Structure of Network Slice Configuration
Network slices are configured in both gNB and Core network configuration file.
Network Slice Configuration on gNB Configuration file (enb.cfg) is as in the following structure. You can configure it in plmn_list[] object and put it in nr_cell_list[] or nr_cell_default: { } as shown below. You can describe network slice configuration as a two-sided hierarchy that must be aligned between enb.cfg (gNB) and mme.cfg (core/AMF). On the gNB side, the hierarchy starts from the overall NR node configuration and goes down into nr_cell_default (or nr_cell_list[] for per-cell overrides), then into plmn_list[], and finally into nssai[], where each PLMN advertises one or more supported S-NSSAIs (sst, optional sd). This means the gNB side mainly defines which slices are broadcast/served for a given PLMN and cell context. On the core side (mme.cfg), the hierarchy starts with AMF-level nssai[] (the list of S-NSSAIs the core supports), then goes into pdn_list[] (APN/PDU session profiles), and under each PDN entry into either the default erabs[]/QoS-flow definitions or the slice-specific slices[] array. Inside slices[], each element maps one snssai (sst, optional sd) to its own qos_flows[], where per-flow QoS is defined using 5qi, priority, and pre-emption parameters. In short, the hierarchy is: gNB side = NR cell → PLMN → nssai[] (advertised slices), and core side = AMF nssai[] (supported slices) → pdn_list[] (APN/session) → slices[] (per-S-NSSAI policy) → qos_flows[] (per-slice QoS), with both sides needing consistent S-NSSAI definitions.
|
{ /* Enable remote API and Web interface */ com_addr: "0.0.0.0:9001",
rf_driver: {Define and Configure rf_driver. this is the part in which you can configure what kind of RF hardware you use (e.g, Amarisoft SDR Card or Remote Radio Header etc) ... },
amf_list: [This is the ip address of your 5Gcore network { ... }, ],
gtp_addr: "ip",This is the ip address of NIC that is connected to core network
en_dc_support: true,
rf_ports: [This is the configuration for the RF port of your hardware like frequency, sampling rate, number of antenna etc {
}, ],
/* list of cells */ cell_list: [],This is configuration for NR cell, but is set to be empty when RAT is NR SA single cell
nr_cell_list: [Configuration for NR Cells { rf_port: value, cell_id: value,
/* band, arfcn, SCS, SSB bitmap */ }, ], /* nr_cell_list */
{ tac: 100, plmn: "00101", reserved: false, { sst: Slice Service Type., sd: (Optional) Slice Differentiator. } ], }, ],
}, } |
Network Slice Configuration on Core Network Configuration (mme.cfg) is as in the following structure.
|
{ { sst: Slice Service Type., sd: Slice Differentiator. }, ],
{ ....
... },
{ snssai: { S-NSSAI value. sst: Slice Service Type., sd: (Optional) Slice Differentiator. }, qos_flows: [ Array of QoS flows. Each element of the array has the same structure as an element in erabs except that "5qi" shall be used instead of "qci". { "5qi": 5QI value priority_level: Priority level. pre_emption_capability: the ability of a particular type of traffic to displace other ongoing lower priority traffic when network resources are limited. pre_emption_vulnerability: the susceptibility of a particular type of traffic to being displaced by other traffic with higher priority and pre-emption capability. }, ], },
], ]
} |
Structure of IMS Configuration
This configuration is the one pointed by (symbolically linked to) ims.cfg. This is to configure IMS . At the top level, it defines runtime and operational settings such as logging (log_options, log_filename) and remote API access (com_addr). The next level defines IMS network interface endpoints and peer connections, including SIP server socket addresses (sip_addr), MMS server bind interface (mms_server_bind_addr), optional MME-facing SCTP endpoint for SMS over SG (sctp_addr), Cx interface connection/bind addresses to the HSS (cx_server_addr, cx_bind_addr), and the Rx interface address (rx_server_addr). Another layer defines service identity and subscriber/service behavior, including the global IMS domain (domain), included user database, echo/loopback numbers (echo), and call/media behavior such as mt_call_sdp_file. At the security and persistence layer, it configures IPsec capabilities (ipsec_aalg_list, ipsec_ealg_list) and runtime state storage via ue_db_filename, which persists IMS registration and pending SMS state. In short, the hierarchy is: runtime settings → IMS interfaces/peer connections → service identity and user/service definitions → security/media options → persistent state storage.
|
{
... ],
... ],
} |
Structure of drb Configuration
This file is to configure drb (data radio bearer). This is not a major configuration file. It is a kind of subsidiary configuration file that are included in other major configuration file like enb.cfg. You can describe drb.cfg as a repeated bearer-profile hierarchy that is usually included from a higher-level file such as enb.cfg, rather than used as a standalone top-level system configuration. The file itself is structured as an array of DRB policy entries, where each entry typically corresponds to a qci (and therefore a bearer type/profile). Inside each entry, the hierarchy begins with bearer identification and usage flags such as qci and ims_dedicated_bearer (used to mark IMS/VoLTE-type dedicated bearers), then branches into protocol-layer configuration blocks including LTE PDCP settings (pdcp_config), NR PDCP settings (nr_pdcp_config, optionally restricted with restrict_to_ng_enb), RLC settings (rlc_config), and MAC logical channel settings (logical_channel_config). In short, the hierarchy is: drb.cfg array → per-bearer/QCI entry → bearer role flags → PDCP (LTE/NR) settings → RLC settings → logical channel (MAC) settings, making it a modular bearer-policy library that higher-level RAN configurations reference.
|
[
{
}, */ },
}, restrict_to_ng_enb: If set to true, the nr_pdcp_config settings are only used for UEs connected to the ng-eNB },
},
}, ] |
Structure of ue-db Configuration
This file is to configure USIM / ISIM information. This is not a major configuration file. It is a kind of subsidiary configuration file that are included in other major configuration file like mme.cfg and ims.cfg. You can describe ue_db configuration as a subscriber-database hierarchy that is usually included from major core/IMS files such as mme.cfg and ims.cfg. At the top level, the file contains ue_db, which is an array of subscriber entries. Each entry represents one UE/subscriber profile and is organized into two main parts: USIM authentication parameters and IMS/ISIM identity parameters. The USIM side includes fields such as sim_algo, imsi, amf, sqn, and K, which define how the subscriber is authenticated at the mobile core level. The IMS/ISIM side includes fields such as impi, impu, domain, and authent_type, which define the subscriber’s IMS private/public identities and IMS authentication behavior. In short, the hierarchy is: ue_db array → per-subscriber entry → USIM authentication fields + IMS/ISIM identity/authentication fields, making it a reusable subscriber identity and credential database shared by NAS/core and IMS configuration.
|
{ { sim_algo: USIM authentication algorithm: xor, milenage or tuak imsi: IMSI value amf: Authentication Management Field sqn: Sequence Number K: K value
impi: IMS priviate user identity impu: IMS public user identity domain: Home Network Domain name authent_type: Athentication Algorithm }, |
Structure of Single LTE Cell
This shows the overall configuration file structure for Single LTE Cell. This is based on enb.default.cfg and you can refer to enb.default.cfg file for the example of detailed parameters.
You can describe a Single LTE Cell enb.cfg structure as a two-branch hierarchy under one LTE RAN node, built around cell_list[] and cell_default{}. At the top level, the file first defines node-wide and connectivity settings such as com_addr, RF driver include, mme_list (S1AP/MME address), gtp_addr, and enb_id, which apply to the overall eNB instance. Below that, the LTE cell configuration is split into two complementary parts: cell_list[], which contains the per-cell instance definitions, and cell_default{}, which contains the common default template used by all LTE cells. In the single-cell case, cell_list[] contains only one object, and that object usually holds cell-specific items such as broadcast PLMN (plmn_list), dl_earfcn, cell ID, and any per-cell overrides (for example, cell-specific RACH settings). The cell_default{} branch provides the shared LTE protocol and radio defaults, including antenna and bandwidth settings (n_antenna_dl, n_antenna_ul, n_rb_dl), PHY/MAC-related configurations (PHICH, PRACH, PUCCH, PUSCH, CQI/RI/SRS, scheduling, power control), and higher-layer defaults such as SRB/DRB and ciphering/integrity preferences. The key hierarchy rule is that cell_default{} defines the baseline, while cell_list[] overrides it per cell when the same parameter appears in both. In short, the structure is: global eNB settings → cell_list[] (single LTE cell instance) + cell_default{} (shared LTE template).
The key points to note here are
- There are two main components - cell_list:[ ] array and cell_default:{ } object.
- cell_list:[] is an array that configures LTE cell (Ref : cell_list[] is for LTE cell configuration, nr_cell_list[] is for NR cell configuration)
- cell_list[] contains only one object { } in it indicating that only one cell is configured.
- cell_default:{ } is an object that applies the same configuration for all the cells configured in cell_list:[]
- If there is same parameter configured both in cell_list[] and cell_default:{ }, the parameter defined in cell_list[] is used
|
{ /* Enable remote API and Web interface */ com_addr: "ip", /* RF driver configuration. sdr card mapping is configured in the file : rf_driver/config.cfg */ include "rf_driver/config.cfg",
{ /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ mme_addr: "ip", }, ], /* GTP bind address (=address of the ethernet interface connected to the MME). Must be modified if the MME runs on a different host. */
/* high 20 bits of SIB1.cellIdentifier */ enb_id: 0x1A2D0,
/* list of cells */ { /* Broadcasted PLMN identities */ plmn_list: [ "mccmnc", ],
dl_earfcn: value,
/* cell ID */ /* RACH Config applicable only to this cell */ }, ], /* cell_list */
/* default cell parameters */
/* Number of Antenna for DL/UL and Bandwidth*/ n_antenna_dl: value, n_antenna_ul: value, n_rb_dl:
/* phich configuration */ /* SIB Configuration */ /* PDSCH dedicated config (currently same for all UEs) */ /* PRACH Config */ /* PUCCH dedicated config (currently same for all UEs) */ /* PUSCH dedicated config (currently same for all UEs) */ /* Scheduling request period (ms). Must be >= 40 for HD-FDD */ /* CQI report config */ /* RI reporting config */ /* transmission mode */ /* SRS dedicated config. */ /* MAC configuration (same for all UEs) */ /* CPU load limitation */ /* dynamic power control */ /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ /* RRC integrity algorithm preference. EIA0 is always the last. */ /* (in ms) send RRC connection release after this time of network inactivity */ /* SRB configuration */ /* DRB configuration */ }, |
Structure of Single NR/SA Cell
This shows the overall configuration file structure for Single NR/SA Cell. This is based on gnb-sa.cfg and you can refer to gnb-sa.cfg file for the example of detailed parameters.
You can describe a Single NR SA Cell enb.cfg/gnb-sa.cfg structure as a two-branch hierarchy under one NR gNB node, centered on nr_cell_list[] and nr_cell_default{}. At the top level, the file defines node-wide runtime and connectivity settings such as com_addr, rf_driver, amf_list (NGAP/AMF peer), gtp_addr, en_dc_support, and rf_ports, which apply to the gNB instance as a whole. Below that, the NR cell configuration is split into two complementary branches: nr_cell_list[], which holds the actual NR cell instance definitions, and nr_cell_default{}, which provides the shared default template for all NR cells. In the single-cell SA case, cell_list[] is typically empty and nr_cell_list[] contains only one object, where you define cell-specific items such as rf_port, cell_id, band, dl_nr_arfcn, subcarrier_spacing, and ssb_pos_bitmap. The nr_cell_default{} branch then defines the common NR radio and protocol defaults, including channel bandwidth, DL/UL antenna counts, TDD UL/DL pattern, PLMN list, MIB/SIB scheduling and basic system information, PRACH/PDCCH/PDSCH/CSI-RS/PUCCH/SRS/PUSCH parameters, MAC behavior, ciphering/integrity options, and DRB configuration. The key hierarchy rule is the same as LTE: nr_cell_default{} provides the baseline, and nr_cell_list[] overrides it when the same parameter is explicitly set per cell. In short, the structure is: global gNB settings → nr_cell_list[] (single NR SA cell instance) + nr_cell_default{} (shared NR template).
The key points to note here are
- There are two main components - nr_cell_list:[ ] array and nr_cell_default:{ } object.
- nr_cell_list:[] is an array that configures NR cell (Ref : cell_list[] is for LTE cell configuration, nr_cell_list[] is for NR cell configuration)
- nr_cell_list[] contains only one object { } in it indicating that only one cell is configured.
- nr_cell_default:{ } is an object that applies the same configuration for all the cells configured in nr_cell_list:[]
- If there is same parameter configured both in nr_cell_list[] and nr_cell_default:{ }, the parameter defined in nr_cell_list[] is used
|
{ /* Enable remote API and Web interface */ com_addr: "0.0.0.0:9001",
name: "sdr", /* list of devices. 'dev0' is always the master. */ /* TDD: force the RX antenna on the RX connector */ /* synchronisation source: none, internal, gps, external (default = none) */ // sync: "gps", },
{ /* address of AMF for NGAP connection. Must be modified if the AMF runs on a different host. */ amf_addr: "ip", }, ],
/* GTP bind address (=address of the ethernet interface connected to the AMF). Must be modified if the AMF runs on a different host. */
en_dc_support: true,
{
}, ],
/* list of cells */
{ rf_port: value, cell_id: value,
/* band, arfcn, SCS, SSB bitmap */ band: dl_nr_arfcn: subcarrier_spacing: ssb_pos_bitmap: }, ], /* nr_cell_list */
/* number of antenna for DL, UL, CBW */ bandwidth: n_antenna_dl: value, n_antenna_ul: value, /* UL/DL Pattern (Applicable to TDD only) */ /* PLMN List */ /* SIB scheduling */ /* Basic MIB/SIB1 Parameters */ /* PRACH Params */ /* PDCCH Params */ /* PDSCH Params */ /* CSI-RS Params */ /* PUCCH Params */ /* SRS Params */ /* PUSCH Params */ /* MAC configuration */ /* Ciphering, Integrity Option */ /* DRB Config */ }, } |
Structure of NR/NSA Cell (1 LTE + 1 NR)
This shows the overall configuration file structure for NR/NSA Cell(1 LTE + 1NR). This is based on gnb-nsa.cfg and you can refer to gnb-nsa.cfg file for the example of detailed parameters.
You can describe an NR/NSA (1 LTE + 1 NR) configuration as a dual-RAT hierarchical tree under one combined eNB/gNB node, where LTE and NR are configured in parallel and linked for EN-DC operation. At the top level, the file defines shared node-wide settings such as com_addr, rf_driver, rf_ports (typically one RF port for LTE and one for NR), mme_list (LTE EPC/MME address, since NSA uses LTE core), gtp_addr, and en_dc_support: true to enable NSA behavior. Below that, the configuration splits into two parallel per-cell instance branches: cell_list[] for the LTE anchor cell and nr_cell_list[] for the NR secondary cell, with each list containing one object in the 1 LTE + 1 NR case. The LTE cell entry in cell_list[] defines LTE-specific identity and frequency settings (PLMN, EARFCN, PCI/TAC, etc.) and, importantly, includes en_dc_scg_cell_list[], which links the LTE anchor to the NR cell that will be added during NSA setup. The NR cell entry in nr_cell_list[] defines NR-specific cell settings such as rf_port, NR band, dl_nr_arfcn, subcarrier_spacing, and ssb_pos_bitmap. In parallel with these instance lists, the file also contains two default-template branches: cell_default{} for shared LTE parameters (antenna count, LTE bandwidth in RBs, SIB/RACH/PUCCH/PUSCH/CQI/SRS/MAC/measurement/DRB, etc.) and nr_cell_default{} for shared NR parameters (bandwidth, antenna count, TDD pattern, SSB timing, NR RACH/PDCCH/PDSCH/CSI-RS/PUCCH/SRS/PUSCH/MAC/SRB/DRB, etc.). The hierarchy rule is the same on both sides: the default blocks define the baseline, and the per-cell entries in cell_list[] / nr_cell_list[] override them when the same parameter is explicitly set. In short, the structure is: global NSA node settings → LTE cell instance branch + NR cell instance branch (linked by EN-DC) → LTE default template + NR default template.
The key points to note here are
- There are two main components - nr_cell_list:[ ] array and nr_cell_default:{ } object.
- cell_list[] is an array that configures LTE cell and nr_cell_list:[] is an array that configures NR cell (Ref : cell_list[] is for LTE cell configuration, nr_cell_list[] is for NR cell configuration)
- cell_list[] contains only one object { } in it indicating that only one LTE cell is configured.
- nr_cell_list[] contains only one object { } in it indicating that only one NR cell is configured.
- cell_default:{ } is an object that applies the same configuration for all the cells configured in cell_list:[]
- nr_cell_default:{ } is an object that applies the same configuration for all the cells configured in nr_cell_list:[]
- If there is same parameter configured both in cell_list[] and cell_default:{ }, the parameter defined in cell_list[] is used
- If there is same parameter configured both in nr_cell_list[] and nr_cell_default:{ }, the parameter defined in nr_cell_list[] is used
|
/* Enable remote API and Web interface */ com_addr: "0.0.0.0:9001",
name: "sdr",
/* list of devices. 'dev0' is always the master. */ /* TDD: force the RX antenna on the RX connector */ /* synchronisation source: none, internal, gps, external (default = none) */
},
{ /* RF port for the LTE cell */ }, { /* RF port for the NR cell */ }, ],
{ /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ }, ],
/* GTP bind address (=address of the ethernet interface connected to the MME). Must be modified if the MME runs on a different host. */
/* list of cells */ { rf_port: 0, /* Broadcasted PLMN identities */ plmn_list: [ "00101", ], /* Cell Frequency */ dl_earfcn: value, /* Cell ID - PCI, TAC */ /* PRACH Root Sequence */
{ cell_id: id_value } ], }, ], /* cell_list */
{ rf_port: 1, /* Cell ID */ /* Cell Frequency - ARFCN, SCS, SSB Position */ band: dl_nr_arfcn: subcarrier_spacing: ssb_pos_bitmap: }, ], /* nr_cell_list */
/* default cell parameters for LTE */ /* Number of DL / UL Antenna */ n_antenna_dl: , n_antenna_ul: ,
/* Number of DL RB */ n_rb_dl:
/* SIB1 */ /* SIB schedule for Other SIBs */#if N_RB_DL == 6 /* PDSCH dedicated config (currently same for all UEs) */ /* RACH Config */ /* PUCCH dedicated config (currently same for all UEs) */ /* PUSCH dedicated config (currently same for all UEs) */ /* MCS for Msg3 (=CCCH RRC Connection Request) */ /* this CQI value is assumed when none is received from the UE */ /* Scheduling request period (ms). Must be >= 40 for HD-FDD */ /* CQI report config */ /* RI reporting is done with a period of m_ri * cqi_period. m_ri = 0 (default) disables RI reporting. */ /* transmission mode */ /* SRS dedicated config. All UEs share these parameters. srs_config_index and freq_domain_position are allocated for each UE) */ /* MAC configuration (same for all UEs) */ /* CPU load limitation */ /* dynamic power control */ /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ /* RRC integrity algorithm preference. EIA0 is always the last. */ /* (in ms) send RRC connection release after this time of network inactivity */ /* SRB configuration */ /* measurement configuration */ /* DRB configuration */ },
/* default cell parameters for NR */ /* NR Bandwidth, Number of DL / UL Antenna */ bandwidth: n_antenna_dl: value, n_antenna_ul: value, /* force the timing TA offset (optional) */ /* TDD Pattern (Applicable only to TDD) */ /* SSB Period */ /* Cell ID (PCI) */ /* Scheduling request period (slots). */ /* DMRS A Pos */ /* RACH Config */ /* PDCCH Config - Both Common and Dedicated */ /* PDSCH Config */ /* CSI-RS Config */ /* PUCCH Config */ /* SRS Config */ /* PUSCH Config */ /* MAC configuration */ /* Ciphering / Integrity Config */ /* SRB Support - Enable/Disable */ /* DRB Config */ }, } |
Structure of NB-IoT Cell
This shows the overall configuration file structure for NB-IoT Cell. This is based on enb-nbiot.cfg and you can refer to enb-nbiot.cfg file for the example of detailed parameters. Basically the overall structure of NB-IoT cell configuration is same as LTE cell configuration because NB-IoT is also a type of LTE protocol. There are differences only in terms of detailed configurations
You can describe an NB-IoT cell configuration as an LTE-family hierarchical tree with an NB-IoT-specific cell branch, because NB-IoT follows the LTE-style structure even though many detailed parameters are different. At the top level, the file defines shared eNB/core connectivity settings such as com_addr, RF driver include, mme_list, gtp_addr, and enb_id, which apply to the overall node. Below that, the configuration branches depending on deployment mode: in standalone NB-IoT, the main NB-specific branch is nb_cell_list[] plus nb_cell_default{}; in non-standalone/in-band/guard-band style operation, you may also need cell_list[] to define the associated LTE base cell. The nb_cell_list[] branch contains the actual NB-IoT cell instance(s) (one object in the single-cell case), including PLMN, antenna counts, NB-IoT operation_mode, EARFCN, linkage to a base LTE cell (base_cell_id), and PRB placement (dl_prb, ul_prb), with optional non_anchor_list[] for additional non-anchor NB-IoT carriers. In parallel, nb_cell_default{} provides the shared NB-IoT protocol defaults, including SIB repetition behavior (r_sib1), coverage_levels[] (each level carrying its own NPRACH/msg3/paging/NPDCCH/NPDSCH/NPUSCH-related settings), two_harq_support, and common SIB/SRB settings. The same override rule applies here as in LTE/NR: nb_cell_default{} defines the baseline, and nb_cell_list[] overrides it per NB-IoT cell when the same parameter is explicitly set. In short, the structure is: global eNB settings → optional LTE base-cell branch (cell_list[]) + NB-IoT cell instance branch (nb_cell_list[]) → NB-IoT default template (nb_cell_default{}).
The key points to note here are
- There are two main components - nb_cell_list:[ ] array and nb_cell_default:{ } object in case of Standalone mode. If the operation mode is NOT standalone, you need to configure cell_list:[] as well.
- nb_cell_list:[] is an array that configures LTE cell (Ref : cell_list[] is for LTE cell configuration, nr_cell_list[] is for NR cell configuration)
- nb_cell_list[] contains only one object { } in it indicating that only one cell is configured.
- nb_cell_default:{ } is an object that applies the same configuration for all the cells configured in nb_cell_list:[]
- If there is same parameter configured both in nb_cell_list[] and nb_cell_default:{ }, the parameter defined in nb_cell_list[] is used
|
{ /* Enable remote API and Web interface */ com_addr: "ip", /* RF driver configuration. sdr card mapping is configured in the file : rf_driver/config.cfg */ include "rf_driver/config.cfg",
{ /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ mme_addr: "ip", }, ], /* GTP bind address (=address of the ethernet interface connected to the MME). Must be modified if the MME runs on a different host. */
/* high 20 bits of SIB1.cellIdentifier */ enb_id: 0x1A2D0,
/* list of cells */ { /* Broadcasted PLMN identities */ plmn_list: [ "mccmnc", ],
dl_earfcn: ,
/* cell ID */ /* RACH Config applicable only to this cell */ }, ], /* cell_list */
{ plmn_list: [ ], n_antenna_dl: , n_antenna_ul: , operation_mode: dl_prb: ul_prb: base_cell_id:, operation_mode: dl_earfcn: ,
non_anchor_list : [ { dl_prb: , ul_prb: , operation_mode: }, ],
}, ], /* nbcell_list */
/* default cell parameters */
{ /* RACH Configuration */ /* msg3 configuration */ /* Paging */ /* NPDCCH User Search Space */ /* NPDSCH config */ /* NPUSCH config */ }, ];
/* SIB Configuration */ /* SRB configuration */ },
|
Structure of LTE Carrier Aggregation
This shows the overall configuration file structure for Single LTE Cell. This is based on enb-3cc.cfg and you can refer to enb-3cc.cfg file for the example of detailed parameters.
You can describe LTE Carrier Aggregation (CA) configuration as an LTE multi-cell hierarchical tree built around one shared cell_default{} template and a cell_list[] containing multiple LTE cell instances (for PCC and SCCs). At the top level, the file defines common eNB and core connectivity settings such as com_addr, RF driver include, mme_list, gtp_addr, and enb_id, which apply to the whole eNB node. Below that, the main LTE branch is cell_list[], but unlike single-cell LTE, this array contains multiple cell objects (for example, 3 cells in a 3CC CA setup). Each cell object defines the per-cell identity and frequency settings (such as rf_port, n_id_cell, dl_earfcn) and also contains an important nested branch, scell_list[], which describes how that cell relates to other cells as CA secondary carriers (SCells), including cell_id, cross_carrier_scheduling, scheduling_cell_id, ul_allowed, and rrc_configuration (e.g., initial, measurement, api_only). In parallel, cell_default{} provides the shared LTE protocol and radio defaults for all component carriers, including antenna counts, bandwidth (n_rb_dl), PHY/MAC settings, scheduling/CQI/RI/SRS, power control, security preferences, and SRB/DRB configuration. The key hierarchy rule remains the same: cell_default{} defines the baseline for all LTE cells, while each entry in cell_list[] can override those defaults per component carrier. In short, the structure is: global eNB settings → multi-cell cell_list[] (PCC/SCC cell instances with nested scell_list[] CA relationships) → shared LTE default template cell_default{}.
The key points to note here are
- There are two main components - cell_list:[ ] array and cell_default:{ } object.
- cell_list:[] is an array that configures LTE cell (Ref : cell_list[] is for LTE cell configuration, nr_cell_list[] is for NR cell configuration)
- cell_list[] contains multiple object { } (usually two or more objects indicating PCC and SCC cells).
Keypoint is that each cell configuration has scell_list:[ ] to specify the list of SCC(Secondary Component Carrier). - cell_default:{ } is an object that applies the same configuration for all the cells configured in cell_list:[]
- If there is same parameter configured both in cell_list[] and cell_default:{ }, the parameter defined in cell_list[] is used
|
{ /* Enable remote API and Web interface */ com_addr: "ip", /* RF driver configuration. sdr card mapping is configured in the file : rf_driver/config.cfg */ include "rf_driver/config.cfg",
{ /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ mme_addr: "ip", }, ], /* GTP bind address (=address of the ethernet interface connected to the MME). Must be modified if the MME runs on a different host. */
/* high 20 bits of SIB1.cellIdentifier */ enb_id: 0x1A2D0,
/* list of cells */ { rf_port: , n_id_cell: ,
dl_earfcn: ,
{ cell_id: , cross_carrier_scheduling: , scheduling_cell_id: , ul_allowed, rrc_configuration ,
}, { cell_id: , cross_carrier_scheduling: , scheduling_cell_id: , ul_allowed, rrc_configuration ,
}, ], }, { rf_port: , n_id_cell: ,
dl_earfcn: ,
{ cell_id: , cross_carrier_scheduling: , scheduling_cell_id: , ul_allowed, rrc_configuration ,
}, { cell_id: , cross_carrier_scheduling: , scheduling_cell_id: , ul_allowed, rrc_configuration ,
}, ], }, { rf_port: , n_id_cell: ,
dl_earfcn: ,
{ cell_id: , cross_carrier_scheduling: , scheduling_cell_id: , ul_allowed, rrc_configuration ,
}, { cell_id: , cross_carrier_scheduling: , scheduling_cell_id: , ul_allowed, rrc_configuration ,
}, ], }, ], /* cell_list */
/* default cell parameters */
/* Number of Antenna for DL/UL and Bandwidth*/ n_antenna_dl: value, n_antenna_ul: value, n_rb_dl:
/* phich configuration */ /* SIB Configuration */ /* PDSCH dedicated config (currently same for all UEs) */ /* PRACH Config */ /* PUCCH dedicated config (currently same for all UEs) */ /* PUSCH dedicated config (currently same for all UEs) */ /* Scheduling request period (ms). Must be >= 40 for HD-FDD */ /* CQI report config */ /* RI reporting config */ /* transmission mode */ /* SRS dedicated config. */ /* MAC configuration (same for all UEs) */ /* CPU load limitation */ /* dynamic power control */ /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ /* RRC integrity algorithm preference. EIA0 is always the last. */ /* (in ms) send RRC connection release after this time of network inactivity */ /* SRB configuration */ /* DRB configuration */ }, |
Structure of LTE Handover
This shows the overall configuration file structure for Handover between LTE Cells. This is based on enb-2cell-ho.cfg and you can refer to enb-2cell-ho.cfg file for the example of detailed parameters.
You can describe LTE handover configuration as an LTE multi-cell hierarchy focused on neighbor relationships and measurement-based mobility, built around cell_list[] and cell_default{}. At the top level, the file defines common eNB/core settings such as com_addr, RF driver include, mme_list, gtp_addr, and enb_id, which apply to the whole node. Below that, cell_list[] contains multiple LTE cell instances (typically source and target cells), and each cell entry defines its own identity/frequency settings (rf_port, n_id_cell, dl_earfcn) plus a nested ncell_list[] that declares neighbor cells and therefore possible handover targets (using neighbor PCI/cell ID and EARFCN). In parallel, cell_default{} provides the shared LTE radio/protocol defaults (PHY/MAC/SRB/DRB, bandwidth, antenna, scheduling, power control, security, etc.) and also contains the mobility-specific default layer, especially meas_config_desc, meas_gap_config, and ho_from_meas, which control how measurement configuration is generated and whether reported measurements automatically trigger handover. The key hierarchy rule remains the same: cell_default{} defines the baseline behavior, while each cell object in cell_list[] can override it, and the actual handover topology is expressed through each cell’s ncell_list[]. In short, the structure is: global eNB settings → multi-cell cell_list[] (source/target cells with nested neighbor lists) → shared LTE default template cell_default{} including measurement/handover policy.
The key points to note here are
- There are two main components - cell_list:[ ] array and cell_default:{ } object.
- cell_list:[] is an array that configures LTE cell (Ref : cell_list[] is for LTE cell configuration, nr_cell_list[] is for NR cell configuration)
- cell_list[] contains multiple object { } (usually two objects source and target cell).
Keypoint is that each cell configuration has ncell_list:[ ] to specify the destination for the handover. - cell_default:{ } is an object that applies the same configuration for all the cells configured in cell_list:[]
- If there is same parameter configured both in cell_list[] and cell_default:{ }, the parameter defined in cell_list[] is used
|
{ /* Enable remote API and Web interface */ com_addr: "ip", /* RF driver configuration. sdr card mapping is configured in the file : rf_driver/config.cfg */ include "rf_driver/config.cfg",
{ /* address of MME for S1AP connection. Must be modified if the MME runs on a different host. */ mme_addr: "ip", }, ], /* GTP bind address (=address of the ethernet interface connected to the MME). Must be modified if the MME runs on a different host. */
/* high 20 bits of SIB1.cellIdentifier */ enb_id: 0x1A2D0,
/* list of cells */ { rf_port: , n_id_cell: ,
dl_earfcn: ,
{ n_id_cell: , dl_earfcn: , }, ], }, { rf_port: , n_id_cell: ,
dl_earfcn: ,
ncell_list: [ { n_id_cell: , dl_earfcn: , }, ], }, ], /* cell_list */
/* default cell parameters */
/* Number of Antenna for DL/UL and Bandwidth*/ n_antenna_dl: value, n_antenna_ul: value, n_rb_dl:
/* phich configuration */ /* SIB Configuration */ /* PDSCH dedicated config (currently same for all UEs) */ /* PRACH Config */ /* PUCCH dedicated config (currently same for all UEs) */ /* PUSCH dedicated config (currently same for all UEs) */ /* Scheduling request period (ms). Must be >= 40 for HD-FDD */ /* CQI report config */ /* RI reporting config */ /* transmission mode */ /* SRS dedicated config. */ /* MAC configuration (same for all UEs) */ /* CPU load limitation */ /* dynamic power control */ /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ /* RRC integrity algorithm preference. EIA0 is always the last. */ /* (in ms) send RRC connection release after this time of network inactivity */ /* SRB configuration */ /* DRB configuration */
a1_report_type: , a1_rsrp: , a1_hysteresis: , a1_time_to_trigger: , a2_report_type: , a2_rsrp: , a2_hysteresis: , a2_time_to_trigger: , eutra_handover: { a3_report_type: , a3_offset: , hysteresis: , time_to_trigger: } },
}, |