Skip to main content

OAI RAN

danger

This page shows how to modify the configuration file to adapt the parameters to each network. The OAI configuration file is constantly evolving and some parameters can change name, be replaced or deleted.

tip

For all the examples, follow the inline comments for explanations.

Configuration Sources

Usually OAI CI/CD team share the current configuration files in openairinterface5g/ci-scripts/conf_files/ On the other hand the folder openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/ is maintained by a responsible for testing the high throughput, so it is another reliable source of useful configuration files. Given an up-to-date configuration file the following sections explain how to adapt it to your specific case.

Network Parameters

Cell configuration

tracking_area_code  =  1;       # make sure it matches the TAC specified in the CN
plmn_list = (
{
mcc = 505; # make sure it matches the MCC specified in the CN
mnc = 01; # make sure it matches the MNC specified in the CN
mnc_length = 2; # MNC digit length
snssaiList = (
{
# This section allows to specify the available network slices
sst = 1; # Value specific to Quectel in Row Commercial mode
sd = 0x000000; # Value specific to Quectel in Row Commercial mode
}
);
}
);
danger

There is no guarantee that other SST values would work.

Interfaces

AMF parameters:
amf_ip_address = (
{
ipv4 = "127.5.2.2"; # AMF interface IP address used for the NGAP. Syntax: do not specify the network mask (e.g. /24)
ipv6 = "192:168:30::17"; # Not relevant
active = "yes";
preference = "ipv4";
}
);

NETWORK_INTERFACES :
{
# In this section it is required to specify the interface name and IP address use by the gNB to communicate with the AMF.
# In this specific case the AMF is located in the same machine as the gNB this is why the addresses are in local host.
# In case the AMF resides in a different host of your LAN use the appropriate network interface
GNB_INTERFACE_NAME_FOR_NG_AMF = "lo"; # interface name
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24"; # syntax specify the Network mask (e.g. /24)
GNB_INTERFACE_NAME_FOR_NGU = "lo"; # interface name
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24"; # syntax specify the Network mask (e.g. /24)
GNB_PORT_FOR_S1U = 2152; # Spec 2152 do not modify
};
caution

For the case CU-DU the networking parameters are specific. Check the dedicated section

Radio Parameters

OAI does not yet support a different number of antennas in DL/UL. For example, MIMO 2x2 OK MIMO 2x1 not. List of parameters to be modified to vary the MIMO capabilities

# gNBs section
pdsch_AntennaPorts_N1 = 1; #SISO. #2;MIMO
pusch_AntennaPorts = 1; #SISO. #2;MIMO
do_CSIRS = 1; # 1= active if 2x2, otherwise not considered. Suggestion, let it active
# RUs section
nb_tx = 1 #SISO. #2;MIMO
nb_rx = 1 #SISO. #2;MIMO

If TDD lexing mode, you can modify the TDD period using

#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1; # numerology
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6; # periodicity index
nrofDownlinkSlots = 7; # DL slots
nrofDownlinkSymbols = 6; # DL symbols in mixed slots
nrofUplinkSlots = 2; # UL slots
nrofUplinkSymbols = 4; # UL symbols in mixed slots
danger

Modify the operating frequency is a tricky operation that requires a good understanding of the standard.

#gNBs section - servingCellConfigCommon
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 641280; #ARFCN
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 640008; #ARFCN
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1; # Numerology
dl_carrierBandwidth = 106; # Number PRBs
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;

pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12; #make sure it matches initialDLBWPcontrolResourceSetZero
searchSpaceZero = 0; # make sure it matches initialDLBWPsearchSpaceZero
}
);

Specific Parameters per RU/split

For each specific use case there are some parameters that need to present in the configuration file.

B210

RUs = (
{
local_rf = "yes" # indicates the monolithic connection to the SDR
nb_tx = 1 # SISO #2;MIMO
nb_rx = 1 # SISO #2;MIMO
att_tx = 6; # ranges 6-10 if the UE is close to the B210 antennas. Leave 0 otherwise
att_rx = 6; # ranges 6-10 if the UE is close to the B210 antennas. Leave 0 otherwise
bands = [78];
max_pdschReferenceSignalPower = -27; # recommended value
max_rxgain = 114; # recommended value
eNB_instances = [0];
sdr_addrs = "type=b200"; # if both B210 and N300 connected to the same server allows to pick up the good board
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal"; # recommended value if any sync source attached to the B210
}
);

N300

RUs = (
{
local_rf = "yes" # indicates the monolithic connection to the SDR
nb_tx = 1; # SISO #2;MIMO
nb_rx = 1; # SISO #2;MIMO
att_tx = 10; # ranges 6-10 if the UE is close to the B210 antennas. Leave 0
att_rx = 10; # ranges 6-10 if the UE is close to the B210 antennas. Leave 0
bands = [78];
max_pdschReferenceSignalPower = -27; # recommended value
max_rxgain = 85; # recommended value
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
# N300 specific parameters. use in a terminal uhd_find_devices to discover yours
sdr_addrs = "type=n3xx,mgmt_addr=192.168.20.2,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);

AW2S

RUs = (
{
local_if_name = "ens1f1"; # eth interface name to dialog with the AW2S
remote_address = "192.168.100.50"; # ip address of the AW2S RRH
local_address = "192.168.100.1"; # ip address of your server eth interface
local_portc = 50000;
remote_portc = 55444;
local_portd = 52001;
remote_portd = 52183;
local_rf = "no" # not monolithic. No local rf but we have split to connect to the RRH
tr_preference = "udp_ecpri_if5" # use transport preference eCPRI for the split

num_tp_cores = 4; #see below
rxfh_core_id = 3; #see below
txfh_core_id = 2; #see below
tp_cores = [8,9,10,7]; #see below

nb_tx = 2 # 1 SISO; 2 or 4 MIMO
nb_rx = 2 # 1 SISO; 2 or 4 MIMO
att_tx = 16 # for indoor measurments. Put 0 only in outdoor
att_rx = 0; # for indoor measurments
eNB_instances = [0];
bands = [78];
nr_flag = 1;
sl_ahead = 5; # is the good value for 2.5ms TDD to avoid tx/rx overlapping
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
}
);
  • rxfh_core_id and txfh_core_id should be different and on the same NUMA node as the network card that is being used. In this example the NUMA node has all odd cores. Ideally, they should be isolated from the OS because they are used close to 100%, and we don't want the OS to put anything on them.
  • when running check the allocations of the 2 cores with mpstat -P ALL 1. You should see that cores rxfh_core_id and txfh_core_id have %sys which is high (this is the kthreads associated with the two fronthaul threads). You should also see the %softirq high, and it should be on a different core than the 2 FH cores. irqbalancer service should be on (with O-RAN it is off and IRQs are specified also).
  • There is a thread-pool for the RU entity. num_tp_cores is the number of cores for RU and ru_tp_cores are the indices, if you want to specify them. If you don't specify the indices it lets the OS choose. If you reserve cores for OAI with isolcpus then you should put these on those reserved cores.

RF Simulator

rfsimulator :
{
serveraddr = "server"; # server = gNB side
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs"; # location in which the IQ samples are saved
};

CU-DU split

For the CU:

  1. Maintain the section relate to the AMF GTP connection:
amf_ip_address = (
{
ipv4 = "127.5.2.2"; # AMF interface IP address used for the NGAP. Syntax: do not specify the network mask (e.g. /24)
ipv6 = "192:168:30::17"; # Not relevant
active = "yes";
preference = "ipv4";
}
);

NETWORK_INTERFACES :
{
# In this section it is required to specify the interface name and IP address use by the gNB to communicate with the AMF.
# In this specific case the AMF is located in the same machine as the gNB this is why the addresses are in local host.
# In case the AMF resides in a different host of your LAN use the appropriate network interface
GNB_INTERFACE_NAME_FOR_NG_AMF = "lo"; # interface name
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24"; # syntax specify the Network mask (e.g. /24)
GNB_INTERFACE_NAME_FOR_NGU = "lo"; # interface name
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24"; # syntax specify the Network mask (e.g. /24)
GNB_PORT_FOR_S1U = 2152; # Spec 2152 do not modify
};
  1. add in the gNBs section the following parameters
force_256qam_off = 1; # Important. For now the 256 QAM is not enabled with OAI CU-DU split
tr_s_preference = "f1"; # indicated the split option
local_s_if_name = "lo"; # Indicates the CU interface name to dialog with DU. In this case they are both located in the same machine so the interface is in localhost
local_s_address = "127.0.0.4"; # CU address
remote_s_address = "127.0.0.3"; # DU address
local_s_portc = 501; # used local CU port tc
local_s_portd = 2152; # used local CU port td
remote_s_portc = 500; # used remote DU port tc
remote_s_portd = 2152; # used remote DU port td

For the DU:

  1. The section related to the AMF/GTP connection disappears because it's not anymore necessary since the CU is the one connecting to the CN
  2. In the gNBs section remember that for now force_256qam_off = 1; (256 QAM is not active for CU-DU split)
  3. In MACRLCs section
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1"; # not local_RRC
tr_n_preference = "f1"; # specify the F1 split
local_n_if_name = "lo"; # Indicates the DU interface name to dialog with CU. In this case they are both located in the same machine so the interface is in localhost
local_n_address = "127.0.0.3"; # DU address
remote_n_address = "127.0.0.4"; # CU address
local_n_portc = 500; # used local DU port tc
local_n_portd = 2152; # used local DU port td
remote_n_portc = 501; # used remote CU port tc
remote_n_portd = 2152; # used remote CU port td
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
}
);

tip

The RU section and the radio parameters of the DU configuration file can be tuned depending on the RU that will be used. (B210, N300 or Aw2S) with the tips seen above

Amarisoft SDR

RUs = (
{
local_rf = "yes"
nb_tx = 1 # SISO or MIMO
nb_rx = 1 # SISO or MIMO
att_tx = 81; # taken as tx gain [0-90]
att_rx = 0; # taken as rx attenuation
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 70; # taken as RX gain [3-70]
eNB_instances = [0];
# a couple of examples of correct syntax
# available types type=sdr50, type=sdr100
# available rfports=1 (for now no different gNBs in one card with OAI)
# if multiple devices to be opend should be comma separated
sdr_addrs = "type=sdr50;rfports=1;device=dev0=/dev/sdr0"; # this is the correct syntax
#sdr_addrs = "type=sdr50;rfports=1;device=dev0=/dev/sdr0,dev1=/dev/sdr1"; # this is the correct syntax
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);

Other Important Parameters

min_rxtxtime  = 2; # use 2 if Quectel. # use 6 if RF simulator
log_config :
{
global_log_level ="info"; #levels: error,warn,info,debug
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};
# allows to specify which radio head target library to use
device :
{
name = "oai_usrpdevif"; # oai_amarisdrdevif
};

Example Proved Configurations

gNB + B210

The provided configuration file was tested successfully with commit

  • 4154e9e9d5dbca93d8d2182799223d91b70ba243 (2022.31b)
  • 3ef063194ab6e580c1767a5af9210975bde76af4 (branch if5_ECPRI_rework)

B210 Configuration Sample

Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";

device :
{
name = "oai_usrpdevif";
};


gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";

// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 505;
mnc = 01;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x000000; // 0 false, else true
}
);

});

nr_cellid = 12345678L;

////////// Physical parameters:

#ssb_SubcarrierOffset = 6;
pdsch_AntennaPorts_N1 = 1;
pusch_AntennaPorts = 1;
force_256qam_off = 0;

min_rxtxtime = 2;
do_CSIRS = 1;
do_SRS = 1;

pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);

servingCellConfigCommon = (
{
#spCellConfigCommon

physCellId = 0;

# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 641280;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 640008;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,

msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;

# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;

# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;

# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;

# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;


#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;

ssPBCH_BlockPower = -25;
}

);

## Dedicated Serving Cell Configuration
#servingCellConfigDedicated = ({
# # BWP-Downlink
# # BWP 1 Configuration
# dl_bwp-Id_1 = 1;
# dl_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp1_subcarrierSpacing = 1;
#
# # BWP 2 Configuration
# dl_bwp-Id_2 = 2;
# dl_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp2_subcarrierSpacing = 1;
#
# # BWP 3 Configuration
# dl_bwp-Id_3 = 3;
# dl_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp3_subcarrierSpacing = 1;
#
# firstActiveDownlinkBWP-Id = 1; #BWP-Id
# defaultDownlinkBWP-Id = 1; #BWP-Id
#
# # bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
# # ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
# # ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
# # spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
#
# # UplinkConfig
# # BWP-Uplink
# # BWP 1 Configuration
# ul_bwp-Id_1 = 1;
# ul_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp1_subcarrierSpacing = 1;
#
# # BWP 2 Configuration
# ul_bwp-Id_2 = 2;
# ul_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp2_subcarrierSpacing = 1;
#
# # BWP 3 Configuration
# ul_bwp-Id_3 = 3;
# ul_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp3_subcarrierSpacing = 1;
#
# firstActiveUplinkBWP-Id = 1; #BWP-Id
# }
#);

# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};


////////// AMF parameters:
amf_ip_address = ( { ipv4 = "127.5.2.2";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);


NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "lo";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24";
GNB_INTERFACE_NAME_FOR_NGU = "lo";
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

}
);

MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
}
);

L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
#min_grant_prb = 5; #
#min_grant_mcs = 16; #

}
);

RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 6;
att_rx = 6;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114; //SP change
eNB_instances = [0];
sdr_addrs = "type=b200";
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);

THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);

rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};

security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );

# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );

# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};

log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

gNB + N300

The provided configuration file was tested successfully with commit

  • 4154e9e9d5dbca93d8d2182799223d91b70ba243 (2022.31b)
  • 3ef063194ab6e580c1767a5af9210975bde76af4 (branch if5_ECPRI_rework)

N300 Configuration Sample

Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";

device :
{
name = "oai_usrpdevif";
};


gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";

// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 505;
mnc = 01;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x000000; // 0 false, else true
}
);
});

nr_cellid = 12345678L;

////////// Physical parameters:

pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 1;
do_CSIRS = 1;
ul_prbblacklist = "135,136,137,138"

pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 10;
}
);

servingCellConfigCommon = (
{
#spCellConfigCommon

physCellId = 0;

# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
absoluteFrequencySSB = 623232;
dl_frequencyBand = 78;
# this is 3300.24 MHz
dl_absoluteFrequencyPointA = 620016;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
initialDLBWPlocationAndBandwidth = 31624;
#
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 10;

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 31624;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 12;
preambleReceivedTargetPower = -90;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,

msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;

# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;

# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;

# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;

# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;


#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;

ssPBCH_BlockPower = -25;
}

);


# Dedicated Serving Cell Configuration
#servingCellConfigDedicated = ({
# # BWP-Downlink
# # BWP 1 Configuration
# dl_bwp-Id_1 = 1;
# dl_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp1_subcarrierSpacing = 1;
#
# firstActiveDownlinkBWP-Id = 1; #BWP-Id
# defaultDownlinkBWP-Id = 1; #BWP-Id
#
# # bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
# # ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
# # ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
# # spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
#
# # UplinkConfig
# # BWP-Uplink
# # BWP 1 Configuration
# ul_bwp-Id_1 = 1;
# ul_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp1_subcarrierSpacing = 1;
#
# firstActiveUplinkBWP-Id = 1; #BWP-Id
# }
#);



# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};


////////// AMF parameters:
amf_ip_address = ( { ipv4 = "127.5.2.2";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);


NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "lo";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24";
GNB_INTERFACE_NAME_FOR_NGU = "lo";
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

}
);

MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
pusch_FailureThres = 1000;
ulsch_max_frame_inactivity = 0;
}
);

L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 80;
}
);

RUs = (
{
local_rf = "yes"
nb_tx = 1;
nb_rx = 1;
att_tx = 10;
att_rx = 10;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 85;
eNB_instances = [0];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
sdr_addrs = "type=n3xx,mgmt_addr=192.168.20.2,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
}
);

THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);

rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};

security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );

# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );

# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};

log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};

gNB + AW2S

The provided configuration file was tested successfully with commit

  • 3ef063194ab6e580c1767a5af9210975bde76af4 (branch if5_ECPRI_rework)

AW2S Configuration Sample

Active_gNBs = ( "gNB-Eurecom-n78_20");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";

gNBs =
(
{
////////// Identification parameters:
gNB_CU_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";

gNB_name = "gNB-Eurecom-n78_20";

// Tracking area code, 0x0000 and 0xfffe are reserved values
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 505;
mnc = 01;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x000000; // was 0x1 for oai, 0 false, else true
}
);
});


nr_cellid = 12345678L

# tr_s_preference = "local_mac"

////////// Physical parameters:

ssb_SubcarrierOffset = 6;
pdsch_AntennaPorts_N1 = 2;
pusch_AntennaPorts = 2;
do_CSIRS = 1;
force_256qam_off = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 10;
}
);

servingCellConfigCommon = (
{
#spCellConfigCommon

physCellId = 0;

# downlinkConfigCommon
#frequencyInfoDL
#scs-SpecificCarrierList
# this is 3574.2 MHz => 1362 REs from PointA 66 PRBs + 6 REs
#absoluteFrequencySSB = 638280;
# this is 3426.24 MHz => 1362 REs from PointA 66 PRBs + 6 REs
absoluteFrequencySSB = 628416;
dl_frequencyBand = 78;
# this is 3574.2 - (133*12*30e-3/2) = 3550.26 MHz
#dl_absoluteFrequencyPointA = 636684;
# this is 3426.24 - (133*12*30e-3/2) = 3402.3 MHz
dl_absoluteFrequencyPointA = 626820;

dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 133;
#initialDownlinkBWP
#genericParameters
# this is RBstart=0,L=133 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 36300;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11; # this means shift of 14, so Coreset is in PRBs 1..48, SSB starts at PRB 15
initialDLBWPsearchSpaceZero = 0;
#pdsch-ConfigCommon

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 133;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 36300;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 15;
preambleReceivedTargetPower = -104;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,

msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-96;

# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -96;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;

# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;

# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;

# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;


#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 5;
nrofDownlinkSlots = 2;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;

ssPBCH_BlockPower = -10;
}

);


# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};


////////// AMF parameters:
amf_ip_address = ( { ipv4 = "127.5.2.2";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);

NETWORK_INTERFACES :
{

GNB_INTERFACE_NAME_FOR_NG_AMF = "lo";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24";
GNB_INTERFACE_NAME_FOR_NGU = "lo";
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);

MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 215;
pucch_TargetSNRx10 = 215;
ulsch_max_frame_inactivity=0;
min_grant_prb = 5;
min_grant_mcs = 16;
}
);

L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
pusch_proc_threads = 8;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 50;
pusch_dtx_threshold = 10;
}
);

RUs = (
{
local_if_name = "ens1f1";
remote_address = "192.168.100.50";
local_address = "192.168.100.1";
local_portc = 50000;
remote_portc = 55444;
local_portd = 52001;
remote_portd = 52183;
local_rf = "no"
tr_preference = "udp_ecpri_if5"

num_tp_cores = 4;
rxfh_core_id = 3;
txfh_core_id = 2;
tp_cores = [8,9,10,7];

nb_tx = 2
nb_rx = 2
att_tx = 16
att_rx = 0;
eNB_instances = [0];
bands = [78];
nr_flag = 1;
sl_ahead = 5; # is the good value for 2.5ms TDD to avoid tx/rx overlapping
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
}
);

THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);

log_config :
{
global_log_level ="info";
global_log_verbosity ="medium";
hw_log_level ="info";
hw_log_verbosity ="medium";
phy_log_level ="warning";
phy_log_verbosity ="medium";
mac_log_level ="info";
mac_log_verbosity ="medium";
rlc_log_level ="info";
rlc_log_verbosity ="medium";
pdcp_log_level ="info";
pdcp_log_verbosity ="medium";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
f1ap_log_verbosity ="medium";
ngap_log_level ="debug";
ngap_log_verbosity ="medium";
};


OAI CU and OAI-DU

The provided configuration file was tested successfully with commit

  • 4154e9e9d5dbca93d8d2182799223d91b70ba243 (2022.31b)
  • 3ef063194ab6e580c1767a5af9210975bde76af4 (branch if5_ECPRI_rework) on both of the cases applying the patch of MR 1660 for COTS UE connection with F1 split

gNB CU Configuration Sample

Active_gNBs = ( "gNB-Eurecom-CU");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;

gNBs =
(
{
////////// Identification parameters:
gNB_CU_ID = 0xe00;

# cell_type = "CELL_MACRO_GNB";

gNB_name = "gNB-Eurecom-CU";

// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 505;
mnc = 01;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x000000; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);

});


nr_cellid = 12345678L;
force_256qam_off = 1;

tr_s_preference = "f1";

local_s_if_name = "lo";
local_s_address = "127.0.0.4";
remote_s_address = "127.0.0.3";
local_s_portc = 501;
local_s_portd = 2152;
remote_s_portc = 500;
remote_s_portd = 2152;
min_rxtxtime = 6;

pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);

servingCellConfigCommon = (
{
#spCellConfigCommon

physCellId = 0;

# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 641280;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 640008;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11;
initialDLBWPsearchSpaceZero = 0;

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,

msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;

# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;

# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;

# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;

# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;


#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;

ssPBCH_BlockPower = -25;
}

);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};


////////// AMF parameters:
amf_ip_address = ( { ipv4 = "127.5.2.2";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);

NETWORK_INTERFACES :
{

GNB_INTERFACE_NAME_FOR_NG_AMF = "lo";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24";
GNB_INTERFACE_NAME_FOR_NGU = "lo";
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);

security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );

# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );

# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="debug";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
ngap_log_level ="debug";
};

gNB DU Configuration Sample

Active_gNBs = ( "gNB-Eurecom-DU");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";

device :
{
name = "oai_usrpdevif";
};

gNBs =
(
{
////////// Identification parameters:
gNB_CU_ID = 0xe00;

# cell_type = "CELL_MACRO_GNB";

gNB_name = "gNB-Eurecom-DU";

// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 505;
mnc = 01;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x000000; // 0 false, else true
},
{
sst = 1;
sd = 0x112233; // 0 false, else true
}
);

});


nr_cellid = 12345678L;

////////// Physical parameters:

min_rxtxtime = 2;
force_256qam_off = 1;

pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);

servingCellConfigCommon = (
{
#spCellConfigCommon

physCellId = 0;

# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 641280;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 640008;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,

msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;

# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;

# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;

# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;

# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;


#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;

ssPBCH_BlockPower = -25;
}

);


# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
}
);

MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_if_name = "lo";
local_n_address = "127.0.0.3";
remote_n_address = "127.0.0.4";
local_n_portc = 500;
local_n_portd = 2152;
remote_n_portc = 501;
remote_n_portd = 2152;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
}
);

L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);

RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 10
att_rx = 10;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
sdr_addrs ="type=b200";
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);

THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator: {
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs"
}

log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
f1ap_log_level ="debug";
ngap_log_level ="debug";
};

Amarisoft SDR

Tested on top of 2022.w32 (+private patch applying the AMARISDR driver)

AMR SDR Configuration Sample

Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";

device :
{
name = "oai_amarisdrdevif";
};


gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";

// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({
mcc = 505;
mnc = 01;
mnc_length = 2;
snssaiList = (
{
sst = 1;
sd = 0x000000; // 0 false, else true
}
);

});

nr_cellid = 12345678L;

////////// Physical parameters:

#ssb_SubcarrierOffset = 6;
pdsch_AntennaPorts_N1 = 1;
pusch_AntennaPorts = 1;
force_256qam_off = 0;

min_rxtxtime = 2;
do_CSIRS = 0;
do_SRS = 0;

pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 11;
searchSpaceZero = 10;
}
);

servingCellConfigCommon = (
{
#spCellConfigCommon

physCellId = 0;

# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 628416;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 626820;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 133;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 36300;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11;
initialDLBWPsearchSpaceZero = 0;

#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 133;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 36300;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 15;
preambleReceivedTargetPower = -104;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,

msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;

# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -96;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1;

# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;

# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;

# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;


#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;

ssPBCH_BlockPower = -10;
}

);

## Dedicated Serving Cell Configuration
#servingCellConfigDedicated = ({
# # BWP-Downlink
# # BWP 1 Configuration
# dl_bwp-Id_1 = 1;
# dl_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp1_subcarrierSpacing = 1;
#
# # BWP 2 Configuration
# dl_bwp-Id_2 = 2;
# dl_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp2_subcarrierSpacing = 1;
#
# # BWP 3 Configuration
# dl_bwp-Id_3 = 3;
# dl_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# dl_bwp3_subcarrierSpacing = 1;
#
# firstActiveDownlinkBWP-Id = 1; #BWP-Id
# defaultDownlinkBWP-Id = 1; #BWP-Id
#
# # bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
# # ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
# # ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
# # spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
#
# # UplinkConfig
# # BWP-Uplink
# # BWP 1 Configuration
# ul_bwp-Id_1 = 1;
# ul_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp1_subcarrierSpacing = 1;
#
# # BWP 2 Configuration
# ul_bwp-Id_2 = 2;
# ul_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp2_subcarrierSpacing = 1;
#
# # BWP 3 Configuration
# ul_bwp-Id_3 = 3;
# ul_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
# # subcarrierSpacing
# # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
# ul_bwp3_subcarrierSpacing = 1;
#
# firstActiveUplinkBWP-Id = 1; #BWP-Id
# }
#);

# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};


////////// AMF parameters:
amf_ip_address = ( { ipv4 = "127.5.2.2";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);


NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "lo";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "127.5.2.130/24";
GNB_INTERFACE_NAME_FOR_NGU = "lo";
GNB_IPV4_ADDRESS_FOR_NGU = "127.5.2.130/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};

}
);

MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
}
);

L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
min_grant_prb = 5;
min_grant_mcs = 16;

}
);

RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 81; # taken as tx gain
att_rx = 0; # taken as rx attenuation
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 70; # taken as RX gain
eNB_instances = [0];
sdr_addrs = "type=sdr50;rfports=1;device=dev0=/dev/sdr0"; # this is the correct syntax
#sdr_addrs = "type=sdr50;rfports=1;device=dev0=/dev/sdr0,dev1=/dev/sdr1"; # this is the correct syntax
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal";
}
);

THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);

rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};

security = {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms = ( "nea0" );

# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );

# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};

log_config :
{
global_log_level ="info";
hw_log_level ="debug";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};