OpenAirInterface System Emulation (Under further updates)
The system emulator allows for simulation and emulation of an OpenAirLTE network. It provides either simulation with full PHY and synthetic radio channels, or with PHY abstraction. In both PHY modes, the full protocol stack is executed as is the case on OpenAirInterface hardware. Several eNB and UE are virtualized in the same process. Support for ethernet-based emulation is also provided so that nodes can be distributed on a PC network.
The instructions for downloading the openairinterface5g repository are located here.
A web-based graphical front-end for configuring the emulator is currently being developed.
Also check out the file oaisim_walkthrough.pdf in targets/DOCS.
OAISIM Usage without S1
Compiling oaisim without S1
Assuming you are already in OAI installation, do the following steps:
source oaienv
cd cmake_targets
./build_oai -I #(this step is needed only once)
./build_oai --oaisim --noS1 -c
The oaisim executable (oaisim_nos1) is now located under: OAI_INSTALL_DIR/cmake_targets/oaisim_noS1_build_oai/build/
Running oaisim without S1
Assuming you are already in OAI installation, do the following steps:
source oaienv
cd cmake_targets/tools
source init_nas_nos1
./run_enb_ue_virt_noS1 #(to run without PHY abstraction mode)
./run_enb_ue_virt_noS1 -a #(to run with PHY abstraction mode)
OAISIM Usage with S1
Compiling oaisim with S1
Assuming you are already in OAI installation, do the following steps:
source oaienv
cd cmake_targets
./build_oai -I #(this step is needed only once)
./build_oai --oaisim -c
The oaisim executable (oaisim) is now located under: OAI_INSTALL_DIR/cmake_targets/oaisim_build_oai/build/
Running oaisim with S1
Assuming you are already in OAI installation, do the following steps:
source oaienv
In order to run oaisim with S1, you need to configure the eNB/EPC with appropriate settings.
Follow the tutorial here for more details.
OAISIM help
In OAI_INSTALL_DIR/cmake_targets/oaisim_noS1_build_oai/build/, run ./oaisim_nos1 -h
Usage: oaisim -h -a -F -C tdd_config -K [log_file] -V [vcd_file] -R N_RB_DL -e -x transmission_mode -m target_dl_mcs -r(ate_adaptation) -n n_frames -s snr_dB -k ricean_factor -t max_delay -f forgetting factor -A channel_model -z cooperation_flag -u nb_local_ue -U UE mobility -b nb_local_enb -B eNB_mobility -M ethernet_flag -p nb_master -g multicast_group -l log_level -c ocg_enable -T traffic model -D multicast network device
-h provides this help message!
-a Activates PHY abstraction mode
-A set the multipath channel simulation, options are: SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr,Rayleigh1_anticorr, Rice8,, Rice1, AWGN
-b Set the number of local eNB
-B Set the mobility model for eNB, options are: STATIC, RWP, RWALK,
-c [1,2,3,4] Activate the config generator (OCG) to process the scenario descriptor, or give the scenario manually: -c template_1.xml
-C [0-6] Sets TDD configuration
-e Activates extended prefix mode
-E Random number generator seed
-f Set the forgetting factor for time-variation
-F Activates FDD transmission (TDD is default)
-g Set multicast group ID (0,1,2,3) - valid if M is set
-G Enable background traffic
-H Enable handover operation (default disabled)
-I Enable CLI interface (to connect use telnet localhost 1352)
-k Set the Ricean factor (linear)
-K [log_file] Enable ITTI logging into log_file
-l Set the global log level (8:trace, 7:debug, 6:info, 4:warn, 3:error)
-L [0-1] 0 to disable new link adaptation, 1 to enable new link adapatation
-m Gives a fixed DL mcs for eNB scheduler
-M Set the machine ID for Ethernet-based emulation
-n Set the number of frames for the simulation
-O [enb_conf_file] eNB configuration file name
-p Set the total number of machine in emulation - valid if M is set
-P [trace type] Enable protocol analyzer. Possible values for OPT:
- wireshark: Enable tracing of layers above PHY using an UDP socket
- pcap: Enable tracing of layers above PHY to a pcap file
- tshark: Not implemented yet
-q Enable Openair performance profiler
-Q Activate and set the MBMS service: 0 : not used (default eMBMS disabled), 1: eMBMS and RRC Connection enabled, 2: eMBMS relaying and RRC Connection enabled, 3: eMBMS enabled, RRC Connection disabled, 4: eMBMS relaying enabled, RRC Connection disabled
-R [6,15,25,50,75,100] Sets N_RB_DL
-r Activates rate adaptation (DL for now)
-s snr_dB set a fixed (average) SNR, this deactivates the openair channel model generator (OCM)
-S snir_dB set a fixed (average) SNIR, this deactivates the openair channel model generator (OCM)
-t Gives a fixed UL mcs for eNB scheduler
-T activate the traffic generator: cbr, scbr, mcbr, bcbr, mscbr
-u Set the number of local UE
-U Set the mobility model for UE, options are: STATIC, RWP, RWALK
-V [vcd_file] Enable VCD dump into vcd_file
-w number of CBA groups, if not specified or zero, CBA is inactive
-W IP address to connect to SMBV and configure SMBV from config file. Requires compilation with SMBV=1, -W0 uses default IP 192.168.12.201
-x Set the transmission mode (1,2,5,6 supported for now)
-Y Set the global log verbosity (none, low, medium, high, full)
-z Set the cooperation flag (0 for no cooperation, 1 for delay diversity and 2 for distributed alamouti
-Z Reserved
Compliation options:
- Rel10=1: enables LTE release 10 features.
- DEBUG=1: enable debuggung and additional messages
- NAS=1: compiles with nasmesh support enabled (requires NAS driver)
- DISABLE_XER_PRINT=1: turns off ASN.1 message tracing, DISPLAY_XER_PRINT=0 is default
- ENABLE_ITTI=1: turns on ITTI which is an intertask communication/tracing mechanism when RRC and S1AP and L2 stack are run in separate threads, default is 0
- USE_MME=R10: enable the MME
- LINK_PDCP_TO_GTPV1U=1: enables link to core network
- SECU=1: enables security
- RRC_MSG_PRINT=1 and PDCP_MSG_PRINT=1: enables low level traces of control and user plane traffic
- PRINT_STATS=1: print eNB and UE stats in a separet file
- XFORMS=1: compile with xforms enabled (to get a signal scope, constellation, etc., XFORMS=0 is default)
Note: alway do a make clean with the same compile options as for make oaisim (especially when changing the options).
You should have an executable called oaisim.
OpenAirInterface Scenario Descriptor (OSD)
OSD is composed of four main parts, which is a basic description of the data structure OAI_Emulation. It is part of OAI emulation methodology for describing scenarios using the xml format. Each reference scenario described by OSD defines a subset of the components described below:
- Environment/system configuration, including fading, antenna, etc.
- Topology configuration, including area, UE/eNB distribution, mobility, etc.
- Application configuration, including predefined traffic, customized traffic, etc.
- Emulation configuration, including emulation time, performance metrics, etc.
The high level tag hierarchy is shown below:
<OAI_EMULATION>
<ENVIRONMENT_SYSTEM_CONFIG>
</ENVIRONMENT_SYSTEM_CONFIG>
<TOPOLOGY_CONFIG>
</TOPOLOGY_CONFIG>
<APPLICATION_CONFIG>
</APPLICATION_CONFIG>
<EMULATION_CONFIG>
</EMULATION_CONFIG>
<PROFILE> <!-- just a profile name -->
</PROFILE>
</OAI_EMULATION>
See an example here. You can also set up an OSD html form using httpd server, and build your xml file and/or run an experiment. To install, see here.
Table of OSD tags with the valid values and units is shown below (under update, see the existing templates):
| Tag | Parent tag | Range / valid value | Unit |
|---|---|---|---|
| ENVIRONMENT_SYSTEM_CONFIG | OAI_EMULATION | NA | NA |
| FADING | ENVIRONMENT_SYSTEM_CONFIG | NA | NA |
| LARGE_SCALE | FADING | urban, rural, indoor (not used) | string |
| FREE_SPACE_MODEL_PARAMETERS | FADING | NA | NA |
| PATHLOSS_EXPONENT | FREE_SPACE_MODEL_PARAMETERS | 2-4 | Double |
| PATHLOSS_0_dB | FREE_SPACE_MODEL_PARAMETERS | Depends on the Experiment | dB |
| SMALL_SCALE | FADING | SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr, Rayleigh1_anticorr, Rice8, Rice1, Rice1_corr, Rice1_anticorr, AWGN |
String |
| WALL_PENETRATION_LOSS_dB | ENVIRONMENT_SYSTEM_CONFIG | Depends on the Experiment | dB |
| SYSTEM_BANDWIDTH_MB | ENVIRONMENT_SYSTEM_CONFIG | Depends on the Experiment | MB |
| UE_FREQUENCY_GHz | ENVIRONMENT_SYSTEM_CONFIG | Depends on the Experiment | GHz |
| ANTENNA | ENVIRONMENT_SYSTEM_CONFIG | NA | NA |
| eNB_ANTENNA | ANTENNA | NA | NA |
| RX_NOISE_LEVEL_dB | eNB_ANTENNA | Depends on the Experiment | dB |
| NUMBER_OF_SECTORS | eNB_ANTENNA | Depends on the Experiment | Int |
| BEAM_WIDTH_dB | eNB_ANTENNA | Depends on the Experiment | dB |
| ANTENNA_GAIN_dBi | eNB_ANTENNA | Depends on the Experiment | dBi |
| TX_POWER_dBm | eNB_ANTENNA | Depends on the Experiment | dBm |
| UE_ANTENNA | ANTENNA | NA | NA |
| RX_NOISE_LEVEL_dB | UE_ANTENNA | Depends on the Experiment | dB |
| ANTENNA_GAIN_dBi | UE_ANTENNA | Depends on the Experiment | dBi |
| TX_POWER_dBm | UE_ANTENNA | Depends on the Experiment | dBm |
| TOPOLOGY_CONFIG | OAI_EMULATION | NA | NA |
| AREA | TOPOLOGY_CONFIG | NA | NA |
| X | AREA | Depends on the Experiment | meter |
| Y | AREA | Depends on the Experiment | meter |
| MOBILITY | TOPOLOGY_CONFIG | NA | NA |
| UE_MOBILITY | MOBILITY | NA | NA |
| UE_INITIAL_DISTRIBUTION | UE_MOBILITY | random | String |
| RANDOM_UE_DISTRIBUTION | UE_MOBILITY | NA | NA |
| NUMBER_OF_NODES | RANDOM_UE_DISTRIBUTION | Depends on the Experiment | Int |
| UE_MOBILITY_TYPE | UE_MOBILITY | STATIC,RWP,RWALK,TRACE,SUMO | String |
| GRID_MAP | UE_MOBILITY | RESTRICTED_RWP, CONNECTED_DOMAIN | string |
| UE_MOVING_DYNAMICS | UE_MOBILITY | NA | NA |
| MIN_SPEED_mps | UE_MOVING_DYNAMICS | Depends on the Experiment | mps |
| MAX_SPEED_mps | UE_MOVING_DYNAMICS | Depends on the Experiment | mps |
| MIN_SLEEP_ms | UE_MOVING_DYNAMICS | Depends on the Experiment | Ms |
| MAX_SLEEP_ms | UE_MOVING_DYNAMICS | Depends on the Experiment | Ms |
| MIN_JOURNEY_TIME_ms | UE_MOVING_DYNAMICS | Depends on the Experiment | Ms |
| MAX_JOURNEY_TIME_ms | UE_MOVING_DYNAMICS | Depends on the Experiment | Ms |
| SUMO_CONFIG | UE_MOBILITY | NA | NA |
| SUMO_CMD | SUMO_CONFIG | NA | NA |
| SUMO_CONFIG_FILE | SUMO_CONFIG | e.g. $OPENAIR2_DIR/UTIL/OMG/SUMO/SCENARIOS/traci.scen.sumo.cfg |
path |
| SUMO_START | SUMO_CONFIG | Depends on the Experiment | double |
| SUMO_END | SUMO_CONFIG | Depends on the Experiment | double |
| SUMO_STEP | SUMO_CONFIG | Depends on the Experiment | IP |
| SUMO_HOST_IP | SUMO_CONFIG | Depends on the Experiment | int |
| SUMO_HOST_PORT | SUMO_CONFIG | Depends on the Experiment | int |
| eNB_MOBILITY | MOBILITY | NA | NA |
| eNB_INITIAL_DISTRIBUTION | eNB_MOBILITY | random | String |
| RANDOM_eNB_DISTRIBUTION | eNB_MOBILITY | int | |
| NUMBER_OF_CELLS | RANDOM_eNB_DISTRIBUTION | Depends on the Experiment | int |
| eNB_MOBILITY_TYPE | eNB_MOBILITY | fixed, mobile | String |
| APPLICATION_CONFIG | OAI_EMULATION | NA | NA |
| PREDEFINED_TRAFFIC | APPLICATION_CONFIG | scbr, mcbr, bcbr, m2m_AP, m2m_BR, gaming_OA, gaming_TF, full_buffer |
String |
| SOURCE_ID | PREDEFINED_TRAFFIC | single node, e.g. 2; several nodes, e.g. 2,3,5,7; from node A to node B, e.g. 1:100 |
String |
| APPLICATION_TYPE | PREDEFINED_TRAFFIC | NA | NA |
| DESTINATION_ID | PREDEFINED_TRAFFIC | Depends on the Experiment | int |
| CUSTOMIZED_TRAFFIC | APPLICATION_CONFIG | NA | NA |
| PU | CUSTOMIZED_TRAFFIC | NA | NA |
| PROB_OFF_PU | PU | Depends on the Experiment | double |
| PROB_PU_ED | PU | Depends on the Experiment | double |
| HOLDING_TIME_OFF_PU | PU | Depends on the Experiment | double |
| ED | CUSTOMIZED_TRAFFIC | NA | NA |
| PROB_OFF_ED | ED | Depends on the Experiment | double |
| PROB_ED_PE | ED | Depends on the Experiment | double |
| HOLDING_TIME_OFF_ED | ED | Depends on the Experiment | double |
| PE | CUSTOMIZED_TRAFFIC | NA | NA |
| HOLDING_TIME_OFF_PE | PE | Depends on the Experiment | double |
| SOURCE_ID | CUSTOMIZED_TRAFFIC | single node, e.g. 2; several nodes, e.g. 2,3,5,7; from node A to node B, e.g. 1:100 |
int |
| TRANSPORT_PROTOCOL | CUSTOMIZED_TRAFFIC | tcp (default), udp | string |
| IP_VERSION | CUSTOMIZED_TRAFFIC | ipv4 (default), ipv6 | string |
| DESTINATION_ID | CUSTOMIZED_TRAFFIC | Depends on the Experiment | int |
| IDT_DIST | CUSTOMIZED_TRAFFIC | no_customized_traffic (default), uniform, poission, gaussian, exponential, fixed, weibull, pareto, gamma, cauchy |
string |
| IDT_MIN_ms | CUSTOMIZED_TRAFFIC | Depends on the Experiment | ms |
| IDT_MAX_ms | CUSTOMIZED_TRAFFIC | Depends on the Experiment | ms |
| IDT_STANDARD_DEVIATION | CUSTOMIZED_TRAFFIC | Depends on the Experiment | double |
| IDT_LAMBDA | CUSTOMIZED_TRAFFIC | Depends on the Experiment | double |
| SIZE_DIST | CUSTOMIZED_TRAFFIC | no_customized_traffic (default), uniform, poission, gaussian, exponential, fixed, weibull, pareto, gamma, cauchy |
string |
| SIZE_MIN_byte | CUSTOMIZED_TRAFFIC | Depends on the Experiment | byte |
| SIZE_MAX_byte | CUSTOMIZED_TRAFFIC | Depends on the Experiment | byte |
| SIZE_STANDARD_DEVIATION | CUSTOMIZED_TRAFFIC | Depends on the Experiment | double |
| SIZE_LAMBDA | CUSTOMIZED_TRAFFIC | Depends on the Experiment | double |
| SIZE_SCALE | CUSTOMIZED_TRAFFIC | Depends on the Experiment | double |
| SIZE_SHAPE | CUSTOMIZED_TRAFFIC | Depends on the Experiment | double |
| DESTINATION_PORT | CUSTOMIZED_TRAFFIC | Depends on the Experiment | int |
| EMULATION_CONFIG | OAI_EMULATION | NA | NA |
| EMULATION_TIME_ms | EMULATION_CONFIG | Depends on the Experiment | ms |
| PERFORMANCE_MATRICS | EMULATION_CONFIG | NA | NA |
| METRICS | PERFORMANCE_MATRICS | NA | NA |
| THROUGHPUT | METRICS | enable, disable | string |
| LATENCY | METRICS | enable, disable | String |
| LOSS_RATE | METRICS | enable, disable | string |
| LEVEL | LOG | crit,alert, error,warn,info,debug,trace | string |
| VERBOSITY | LOG | Low, medium, high | String |
| INTERVAL | LOG | Depends on the Experiment (not used) | String |
| SEED_VALUE | EMULATION_CONFIG | Depends on the Experiment | int |
| PROFILE | EMULATION_CONFIG | Depends on the Experiment | string |