How to use OAI to setup C-RAN(2RRUs)
In this tutorial, we will describe how to connect an OAI UE with the C-RAN version of the OAI eNB with 2 RRUs. You can get more information about the C-RAN architecture and 1 rru case from How to use OAI to setup C-RAN -> NGFI RCC/RRU
1. Prerequisites
- Please ensure that you meet the system requirements for OAI installationsystem requirements for OAI.
- We assume that OAI EPC and HSS are setup and ready to be used with the RCC. Refer to OAI eNB <-> OAI CN tutorial.
- You need a Octoclock-G from Ettus to provide PPS and 10MHz signals.
You can see the architecture of 2 RRUs C-RAN platform from the below picture:
Figure 1: 2 OAI RRUs, OAI RCC and OAI EPC+HSS on different hosts (interface information included)
1.1 Configuration files
At the time of writing this tutorial, OAI architecture supports IF4.5 and IF5 functional splits. we have tested the IF4.5 file.
NGFI IF4p5(10MHz)
- rcc_file:rcc.band7.tm1.if4p5.50PRB.2rru.conf
- rru_file:rru.oaisim.conf
2. Installation and Confuguration of OAI RRU1
2.1 installation
Step 1: Check out the trunk
Download the source code according to Get the sources
Step 2: Run automated script for OAI RRU/RCC
cd ~/openairinterface5g
source oaienv
cd cmake_targets
./build_oai -I --eNB -w USRP #for USRP Device
note:there is also lots of command line instrument of ./build_oai, for example:
- -I:install required packages.
- --eNB:complies for eNB application
- -w:adds the hardware support, which s USRP B210 in our case.
- -t:adds fronthaul transport protocol, for now ETHERNET is supported and used in our case.
- for more information, you can use ./build_oai -h to check.
2.2 Configuration and execution
Step 1: Edit the RRU configuration file
the file is ~/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru_file.conf
. the file is edited appropriately with respect to Figure 2.
- RRU0.conf:
RUs = (
{
local_if_name = "enx000ec6a0a625";
remote_address = "10.10.20.154"
local_address = "10.10.20.112";
local_portc = 50000;
remote_portc = 50000;
local_portd = 50001;
remote_portd = 50001;
local_rf = "yes"
tr_preference = "udp_if4p5";
nb_tx = 1;
nb_rx = 1;
max_pdschReferenceSignalPower = -29;
max_rxgain = 120;
bands = [7,13];
is_slave = "no";
}
);
log_config = {
global_log_level ="info";
global_log_verbosity ="medium";
hw_log_level ="info";
hw_log_verbosity ="medium";
phy_log_level ="info";
phy_log_verbosity ="medium";
mac_log_level ="info";
mac_log_verbosity ="high";
rlc_log_level ="info";
rlc_log_verbosity ="medium";
pdcp_log_level ="info";
pdcp_log_verbosity ="medium";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
};
- RRU1.conf
RUs = (
{
local_if_name = "eth1";
remote_address = "10.10.10.153"
local_address = "10.10.10.111";
local_portc = 50002;
remote_portc = 50002;
local_portd = 50003;
remote_portd = 50003;
local_rf = "yes"
tr_preference = "udp_if4p5";
nb_tx = 1;
nb_rx = 1;
max_pdschReferenceSignalPower = -29;
max_rxgain = 120;
bands = [7];
is_slave = "no";
}
);
log_config = {
global_log_level ="info";
global_log_verbosity ="medium";
hw_log_level ="info";
hw_log_verbosity ="medium";
phy_log_level ="info";
phy_log_verbosity ="medium";
mac_log_level ="info";
mac_log_verbosity ="high";
rlc_log_level ="info";
rlc_log_verbosity ="medium";
pdcp_log_level ="info";
pdcp_log_verbosity ="medium";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
};
Step2: Compile & Run the RRUs
cd ~/openairinterface5g
source oaienv
cmake_targets/build_oai -w USRP -t ETHERNET -x -c --eNB
cd cmake_targets/lte_build_oai/build
sudo sudo ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/**rru_file** --external-clock --external-timesource -q # replace based on choice of functional split
--external-clock --external-timesource means that we use the PSS and 10MHz to synchronized the RRUs.
When RRUs are up waiting for a connection from the OAI RCC, They all look like the following picture:
Figure 2: 2RRU up and waiting for connection from RCC
3. Installation and Configuration of OAI RCC
3.1 installation
Step 1: Check out the trunk
download the source code according to Get the Sources.
Step 2: Run automated script for OAI RRU/RCC
cd ~/openairinterface5g
source oaienv
cd cmake_targets
cmake_targets/build_oai -w None -t ETHERNET -x -c --eNB
note:there is also lots of command line instrument of ./build_oai, for example:
- -I:install required packages.
- --eNB:complies for eNB application
- -w:adds the hardware support, which s USRP B210 in our case.
- -t:adds fronthaul transport protocol, for now ETHERNET is supported and used in our case.
- -x:add a software oscilloscope feature to the produced binaries
- for more information, you can use ./build_oai -h to check.
3.2 Configuration and execution
Step 1: Edit the RRU configuration file
the file is ~/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/**rcc_file**
the file is edited appropriately with respect to Figure 2.
- RCC configuration file
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
eNBs =
(
{
# real_time choice in {hard, rt-preempt, no}
real_time = "no";
////////// Identification parameters:
eNB_ID = 0xe00;
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = "1";
mobile_country_code = "208";
mobile_network_code = "93";
tr_s_preference = "local_mac"
////////// Physical parameters:
component_carriers = (
{
node_function = "NGFI_RCC_IF4p5";
node_timing = "synch_to_ext_device";
node_synch_ref = 0;
frame_type = "FDD";
tdd_config = 3;
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 7;
downlink_frequency = 2685000000L;
uplink_frequency_offset = -120000000;
Nid_cell = 0;
N_RB_DL = 50;
Nid_cell_mbsfn = 0;
nb_antenna_ports = 1;
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
rx_gain = 125;
pbch_repetition = "FALSE";
prach_root = 0;
prach_config_index = 0;
prach_high_speed = "DISABLE";
prach_zero_correlation = 1;
prach_freq_offset = 2;
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 32;
pdsch_referenceSignalPower = -27;
pdsch_p_b = 0;
pusch_n_SB = 1;
pusch_enable64QAM = "DISABLE";
pusch_hoppingMode = "interSubFrame";
pusch_hoppingOffset = 0;
pusch_groupHoppingEnabled = "ENABLE";
pusch_groupAssignment = 0;
pusch_sequenceHoppingEnabled = "DISABLE";
pusch_nDMRS1 = 1;
phich_duration = "NORMAL";
phich_resource = "ONESIXTH";
srs_enable = "DISABLE";
/* srs_BandwidthConfig =;
srs_SubframeConfig =;
srs_ackNackST =;
srs_MaxUpPts =;*/
pusch_p0_Nominal = -96;
pusch_alpha = "AL1";
pucch_p0_Nominal = -104;
msg3_delta_Preamble = 6;
pucch_deltaF_Format1 = "deltaF2";
pucch_deltaF_Format1b = "deltaF3";
pucch_deltaF_Format2 = "deltaF0";
pucch_deltaF_Format2a = "deltaF0";
pucch_deltaF_Format2b = "deltaF0";
rach_numberOfRA_Preambles = 64;
rach_preamblesGroupAConfig = "DISABLE";
/*
rach_sizeOfRA_PreamblesGroupA = ;
rach_messageSizeGroupA = ;
rach_messagePowerOffsetGroupB = ;
*/
rach_powerRampingStep = 4;
rach_preambleInitialReceivedTargetPower = -108;
rach_preambleTransMax = 10;
rach_raResponseWindowSize = 10;
rach_macContentionResolutionTimer = 48;
rach_maxHARQ_Msg3Tx = 4;
pcch_default_PagingCycle = 128;
pcch_nB = "oneT";
bcch_modificationPeriodCoeff = 2;
ue_TimersAndConstants_t300 = 1000;
ue_TimersAndConstants_t301 = 1000;
ue_TimersAndConstants_t310 = 1000;
ue_TimersAndConstants_t311 = 10000;
ue_TimersAndConstants_n310 = 20;
ue_TimersAndConstants_n311 = 1;
ue_TransmissionMode = 1;
}
);
srb1_parameters :
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
timer_poll_retransmit = 80;
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
timer_reordering = 35;
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
timer_status_prohibit = 0;
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
poll_pdu = 4;
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
poll_byte = 99999;
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
max_retx_threshold = 4;
}
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.12.26";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
}
);
RUs = (
{
local_if_name = "eth6";
remote_address = "10.10.10.111";
local_address = "10.10.10.153";
local_portc = 50002;
remote_portc = 50002;
local_portd = 50003;
remote_portd = 50003;
local_rf = "no"
tr_preference = "udp_if4p5"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
eNB_instances = [0];
is_slave = "no"
},
{
local_if_name = "eth1";
remote_address = "10.10.20.112";
local_address = "10.10.20.154";
local_portc = 50000;
remote_portc = 50000;
local_portd = 50001;
remote_portd = 50001;
local_rf = "no"
tr_preference = "udp_if4p5"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
eNB_instances = [0];
is_slave = "no"
}
);
log_config = {
global_log_level ="info";
global_log_verbosity ="medium";
hw_log_level ="info";
hw_log_verbosity ="medium";
phy_log_level ="info";
phy_log_verbosity ="medium";
mac_log_level ="info";
mac_log_verbosity ="high";
rlc_log_level ="info";
rlc_log_verbosity ="medium";
pdcp_log_level ="info";
pdcp_log_verbosity ="medium";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
};
- Compile & Run the RRUs
cd ~/openairinterface5g
source oaienv
cmake_targets/build_oai -w None -t ETHERNET -x -c --eNB
cd cmake_targets/lte_build_oai/build
sudo -E ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/**rcc_file** -V
- -V is very useful for debugging purpose, it enables VCD and generate a log file (/tmp/openair_dump_eNB.vcd) with lots of details.
- -d enable software oscilloscope with interactive graphic interfaces
- you should alse know that both -V and -d will consume lots of computing resources, it is recommand for debugging, not normal use.
you can see the -V result by the commandgtkwave /tmp/openair_dump_eNB.vcd -a targets/RT/USER/rcc_if4.gtkw
, the result is shown below:
When RCC is successfully connected, you can see the result looks like followings:
- RCC:
- RRUs