Integration 2021 wk22
MR !1171 : \[RHEL8\]\[CONTAINER\] Runtime check when creating pThreads MR !1172 : \[Docker\] adding OAI LTE RU target build in a container image MR !1174 : flexran-rtc repository is now public MR !1167 : fixing bugs in pucch ue functions
This commit is contained in:
@@ -30,8 +30,6 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def doFlexranCtrlTest = false
|
|
||||||
|
|
||||||
// Location of the executor node
|
// Location of the executor node
|
||||||
def nodeExecutor = params.nodeExecutor
|
def nodeExecutor = params.nodeExecutor
|
||||||
|
|
||||||
@@ -66,9 +64,6 @@ pipeline {
|
|||||||
echo "Platform is ${env.TESTPLATFORM_OWNER}"
|
echo "Platform is ${env.TESTPLATFORM_OWNER}"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.FlexRanRtcGitLabRepository_Credentials != null) {
|
|
||||||
doFlexranCtrlTest = true
|
|
||||||
}
|
|
||||||
if (fileExists("flexran")) {
|
if (fileExists("flexran")) {
|
||||||
sh "rm -Rf flexran > /dev/null 2>&1"
|
sh "rm -Rf flexran > /dev/null 2>&1"
|
||||||
}
|
}
|
||||||
@@ -141,15 +136,13 @@ pipeline {
|
|||||||
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
|
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
|
||||||
sh "./ci-scripts/checkCodingFormattingRules.sh"
|
sh "./ci-scripts/checkCodingFormattingRules.sh"
|
||||||
}
|
}
|
||||||
if (doFlexranCtrlTest && doMandatoryTests) {
|
// With Mosaic 5G being part of OSA and making all it's repositories public
|
||||||
|
// No need to pass credentials to clone flexran-rtc
|
||||||
|
if (doMandatoryTests) {
|
||||||
sh "mkdir flexran"
|
sh "mkdir flexran"
|
||||||
dir ('flexran') {
|
dir ('flexran') {
|
||||||
withCredentials([
|
sh "git clone https://gitlab.eurecom.fr/flexran/flexran-rtc.git . > ../git_clone.log 2>&1"
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.FlexRanRtcGitLabRepository_Credentials}", usernameVariable: 'git_username', passwordVariable: 'git_password']
|
sh "git checkout develop >> ../git_clone.log 2>&1"
|
||||||
]) {
|
|
||||||
sh "git clone https://${git_username}:${git_password}@gitlab.eurecom.fr/flexran/flexran-rtc.git . > ../git_clone.log 2>&1"
|
|
||||||
sh "git checkout develop >> ../git_clone.log 2>&1"
|
|
||||||
}
|
|
||||||
sh "zip -r -qq flexran.zip ."
|
sh "zip -r -qq flexran.zip ."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -315,7 +308,7 @@ pipeline {
|
|||||||
stages {
|
stages {
|
||||||
stage ("Build Flexran Controller") {
|
stage ("Build Flexran Controller") {
|
||||||
when {
|
when {
|
||||||
expression {doFlexranCtrlTest && doMandatoryTests}
|
expression {doMandatoryTests}
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
lock (vmResource) {
|
lock (vmResource) {
|
||||||
|
|||||||
@@ -150,6 +150,8 @@ class Containerize():
|
|||||||
imageNames.append(('oai-nr-ue', 'nrUE'))
|
imageNames.append(('oai-nr-ue', 'nrUE'))
|
||||||
if self.host == 'Red Hat':
|
if self.host == 'Red Hat':
|
||||||
imageNames.append(('oai-physim', 'phySim'))
|
imageNames.append(('oai-physim', 'phySim'))
|
||||||
|
if self.host == 'Ubuntu':
|
||||||
|
imageNames.append(('oai-lte-ru', 'lteRU'))
|
||||||
if len(imageNames) == 0:
|
if len(imageNames) == 0:
|
||||||
imageNames.append(('oai-enb', 'eNB'))
|
imageNames.append(('oai-enb', 'eNB'))
|
||||||
|
|
||||||
|
|||||||
@@ -19,54 +19,54 @@ eNBs =
|
|||||||
tracking_area_code = 1;
|
tracking_area_code = 1;
|
||||||
plmn_list = ( { mcc = 208; mnc = 92; mnc_length = 2; } );
|
plmn_list = ( { mcc = 208; mnc = 92; mnc_length = 2; } );
|
||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
component_carriers = (
|
component_carriers = (
|
||||||
{
|
{
|
||||||
node_function = "NGFI_RCC_IF4p5";
|
node_function = "NGFI_RCC_IF4p5";
|
||||||
node_timing = "synch_to_ext_device";
|
node_timing = "synch_to_ext_device";
|
||||||
node_synch_ref = 0;
|
node_synch_ref = 0;
|
||||||
frame_type = "TDD";
|
frame_type = "TDD";
|
||||||
tdd_config = 1;
|
tdd_config = 1;
|
||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 40;
|
eutra_band = 40;
|
||||||
downlink_frequency = 2350000000L;
|
downlink_frequency = 2350000000L;
|
||||||
uplink_frequency_offset = 0;
|
uplink_frequency_offset = 0;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 25;
|
N_RB_DL = 25;
|
||||||
Nid_cell_mbsfn = 0;
|
Nid_cell_mbsfn = 0;
|
||||||
nb_antenna_ports = 1;
|
nb_antenna_ports = 1;
|
||||||
nb_antennas_tx = 1;
|
nb_antennas_tx = 1;
|
||||||
nb_antennas_rx = 1;
|
nb_antennas_rx = 1;
|
||||||
tx_gain = 90;
|
tx_gain = 90;
|
||||||
rx_gain = 125;
|
rx_gain = 125;
|
||||||
prach_root = 0;
|
prach_root = 0;
|
||||||
prach_config_index = 0;
|
prach_config_index = 0;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 1;
|
prach_zero_correlation = 1;
|
||||||
prach_freq_offset = 2;
|
prach_freq_offset = 2;
|
||||||
pucch_delta_shift = 1;
|
pucch_delta_shift = 1;
|
||||||
pucch_nRB_CQI = 1;
|
pucch_nRB_CQI = 1;
|
||||||
pucch_nCS_AN = 0;
|
pucch_nCS_AN = 0;
|
||||||
pucch_n1_AN = 0;
|
pucch_n1_AN = 0;
|
||||||
pdsch_referenceSignalPower =-27;
|
pdsch_referenceSignalPower =-27;
|
||||||
pdsch_p_b = 0;
|
pdsch_p_b = 0;
|
||||||
pusch_n_SB = 1;
|
pusch_n_SB = 1;
|
||||||
pusch_enable64QAM = "DISABLE";
|
pusch_enable64QAM = "DISABLE";
|
||||||
pusch_hoppingMode = "interSubFrame";
|
pusch_hoppingMode = "interSubFrame";
|
||||||
pusch_hoppingOffset = 0;
|
pusch_hoppingOffset = 0;
|
||||||
pusch_groupHoppingEnabled = "ENABLE";
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
pusch_groupAssignment = 0;
|
pusch_groupAssignment = 0;
|
||||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
pusch_nDMRS1 = 1;
|
pusch_nDMRS1 = 1;
|
||||||
phich_duration = "NORMAL";
|
phich_duration = "NORMAL";
|
||||||
phich_resource = "ONESIXTH";
|
phich_resource = "ONESIXTH";
|
||||||
srs_enable = "DISABLE";
|
srs_enable = "DISABLE";
|
||||||
/* srs_BandwidthConfig =;
|
/* srs_BandwidthConfig =;
|
||||||
srs_SubframeConfig =;
|
srs_SubframeConfig =;
|
||||||
srs_ackNackST =;
|
srs_ackNackST =;
|
||||||
srs_MaxUpPts =;*/
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
pusch_p0_Nominal = -96;
|
pusch_p0_Nominal = -96;
|
||||||
pusch_alpha = "AL1";
|
pusch_alpha = "AL1";
|
||||||
@@ -76,7 +76,7 @@ eNBs =
|
|||||||
pucch_deltaF_Format1b = "deltaF3";
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
pucch_deltaF_Format2 = "deltaF0";
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
pucch_deltaF_Format2a = "deltaF0";
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
pucch_deltaF_Format2b = "deltaF0";
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
rach_numberOfRA_Preambles = 64;
|
rach_numberOfRA_Preambles = 64;
|
||||||
rach_preamblesGroupAConfig = "DISABLE";
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
@@ -92,17 +92,17 @@ eNBs =
|
|||||||
rach_macContentionResolutionTimer = 48;
|
rach_macContentionResolutionTimer = 48;
|
||||||
rach_maxHARQ_Msg3Tx = 4;
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
pcch_default_PagingCycle = 128;
|
pcch_default_PagingCycle = 128;
|
||||||
pcch_nB = "oneT";
|
pcch_nB = "oneT";
|
||||||
bcch_modificationPeriodCoeff = 2;
|
bcch_modificationPeriodCoeff = 2;
|
||||||
ue_TimersAndConstants_t300 = 1000;
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
ue_TimersAndConstants_t301 = 1000;
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
ue_TimersAndConstants_t310 = 1000;
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
ue_TimersAndConstants_t311 = 10000;
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ eNBs =
|
|||||||
enable_measurement_reports = "no";
|
enable_measurement_reports = "no";
|
||||||
|
|
||||||
///X2
|
///X2
|
||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
t_dc_prep = 1000; /* unit: millisecond */
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
@@ -186,41 +186,41 @@ eNBs =
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
MACRLCs = (
|
MACRLCs = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_s_preference = "local_L1";
|
tr_s_preference = "local_L1";
|
||||||
tr_n_preference = "local_RRC";
|
tr_n_preference = "local_RRC";
|
||||||
scheduler_mode = "fairRR";
|
scheduler_mode = "fairRR";
|
||||||
puSch10xSnr = 200;
|
puSch10xSnr = 200;
|
||||||
puCch10xSnr = 200;
|
puCch10xSnr = 200;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
{
|
{
|
||||||
local_if_name = "lo";
|
local_if_name = "lo";
|
||||||
remote_address = "127.0.0.2";
|
remote_address = "127.0.0.2";
|
||||||
local_address = "127.0.0.1";
|
local_address = "127.0.0.1";
|
||||||
local_portc = 50000;
|
local_portc = 50000;
|
||||||
remote_portc = 50000;
|
remote_portc = 50000;
|
||||||
local_portd = 50001;
|
local_portd = 50001;
|
||||||
remote_portd = 50001;
|
remote_portd = 50001;
|
||||||
local_rf = "no"
|
local_rf = "no"
|
||||||
tr_preference = "udp_if4p5"
|
tr_preference = "udp_if4p5"
|
||||||
nb_tx = 1
|
nb_tx = 1
|
||||||
nb_rx = 1
|
nb_rx = 1
|
||||||
att_tx = 0
|
att_tx = 0
|
||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
THREAD_STRUCT = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,51 +25,51 @@ eNBs =
|
|||||||
|
|
||||||
component_carriers = (
|
component_carriers = (
|
||||||
{
|
{
|
||||||
node_function = "NGFI_RCC_IF4p5";
|
node_function = "NGFI_RCC_IF4p5";
|
||||||
node_timing = "synch_to_ext_device";
|
node_timing = "synch_to_ext_device";
|
||||||
node_synch_ref = 0;
|
node_synch_ref = 0;
|
||||||
frame_type = "FDD";
|
frame_type = "FDD";
|
||||||
tdd_config = 3;
|
tdd_config = 3;
|
||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2680000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 25;
|
N_RB_DL = 25;
|
||||||
Nid_cell_mbsfn = 0;
|
Nid_cell_mbsfn = 0;
|
||||||
nb_antenna_ports = 1;
|
nb_antenna_ports = 1;
|
||||||
nb_antennas_tx = 1;
|
nb_antennas_tx = 1;
|
||||||
nb_antennas_rx = 1;
|
nb_antennas_rx = 1;
|
||||||
tx_gain = 90;
|
tx_gain = 90;
|
||||||
rx_gain = 125;
|
rx_gain = 125;
|
||||||
pbch_repetition = "FALSE";
|
pbch_repetition = "FALSE";
|
||||||
prach_root = 0;
|
prach_root = 0;
|
||||||
prach_config_index = 0;
|
prach_config_index = 0;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 1;
|
prach_zero_correlation = 1;
|
||||||
prach_freq_offset = 2;
|
prach_freq_offset = 2;
|
||||||
pucch_delta_shift = 1;
|
pucch_delta_shift = 1;
|
||||||
pucch_nRB_CQI = 0;
|
pucch_nRB_CQI = 0;
|
||||||
pucch_nCS_AN = 0;
|
pucch_nCS_AN = 0;
|
||||||
pucch_n1_AN = 0;
|
pucch_n1_AN = 0;
|
||||||
pdsch_referenceSignalPower = -25;
|
pdsch_referenceSignalPower = -25;
|
||||||
pdsch_p_b = 0;
|
pdsch_p_b = 0;
|
||||||
pusch_n_SB = 1;
|
pusch_n_SB = 1;
|
||||||
pusch_enable64QAM = "DISABLE";
|
pusch_enable64QAM = "DISABLE";
|
||||||
pusch_hoppingMode = "interSubFrame";
|
pusch_hoppingMode = "interSubFrame";
|
||||||
pusch_hoppingOffset = 0;
|
pusch_hoppingOffset = 0;
|
||||||
pusch_groupHoppingEnabled = "ENABLE";
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
pusch_groupAssignment = 0;
|
pusch_groupAssignment = 0;
|
||||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
pusch_nDMRS1 = 1;
|
pusch_nDMRS1 = 1;
|
||||||
phich_duration = "NORMAL";
|
phich_duration = "NORMAL";
|
||||||
phich_resource = "ONESIXTH";
|
phich_resource = "ONESIXTH";
|
||||||
srs_enable = "DISABLE";
|
srs_enable = "DISABLE";
|
||||||
/* srs_BandwidthConfig =;
|
/* srs_BandwidthConfig =;
|
||||||
srs_SubframeConfig =;
|
srs_SubframeConfig =;
|
||||||
srs_ackNackST =;
|
srs_ackNackST =;
|
||||||
srs_MaxUpPts =;*/
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
pusch_p0_Nominal = -96;
|
pusch_p0_Nominal = -96;
|
||||||
pusch_alpha = "AL1";
|
pusch_alpha = "AL1";
|
||||||
@@ -79,7 +79,7 @@ eNBs =
|
|||||||
pucch_deltaF_Format1b = "deltaF3";
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
pucch_deltaF_Format2 = "deltaF0";
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
pucch_deltaF_Format2a = "deltaF0";
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
pucch_deltaF_Format2b = "deltaF0";
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
rach_numberOfRA_Preambles = 64;
|
rach_numberOfRA_Preambles = 64;
|
||||||
rach_preamblesGroupAConfig = "DISABLE";
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
@@ -97,25 +97,25 @@ eNBs =
|
|||||||
|
|
||||||
pcch_default_PagingCycle = 128;
|
pcch_default_PagingCycle = 128;
|
||||||
pcch_nB = "oneT";
|
pcch_nB = "oneT";
|
||||||
bcch_modificationPeriodCoeff = 2;
|
bcch_modificationPeriodCoeff = 2;
|
||||||
ue_TimersAndConstants_t300 = 1000;
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
ue_TimersAndConstants_t301 = 1000;
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
ue_TimersAndConstants_t310 = 1000;
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
ue_TimersAndConstants_t311 = 10000;
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
rxPool_sc_Period = "sf40";
|
rxPool_sc_Period = "sf40";
|
||||||
rxPool_data_CP_Len = "normal";
|
rxPool_data_CP_Len = "normal";
|
||||||
rxPool_ResourceConfig_prb_Num = 20;
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
rxPool_ResourceConfig_prb_Start = 5;
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
rxPool_ResourceConfig_prb_End = 44;
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
@@ -185,7 +185,7 @@ eNBs =
|
|||||||
enable_measurement_reports = "no";
|
enable_measurement_reports = "no";
|
||||||
|
|
||||||
///X2
|
///X2
|
||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
t_dc_prep = 1000; /* unit: millisecond */
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
@@ -205,21 +205,21 @@ eNBs =
|
|||||||
);
|
);
|
||||||
|
|
||||||
MACRLCs = (
|
MACRLCs = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_s_preference = "local_L1";
|
tr_s_preference = "local_L1";
|
||||||
tr_n_preference = "local_RRC";
|
tr_n_preference = "local_RRC";
|
||||||
phy_test_mode = 0;
|
phy_test_mode = 0;
|
||||||
puSch10xSnr = 160;
|
puSch10xSnr = 160;
|
||||||
puCch10xSnr = 160;
|
puCch10xSnr = 160;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
@@ -260,20 +260,20 @@ NETWORK_CONTROLLER :
|
|||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
{
|
{
|
||||||
global_log_level ="info";
|
global_log_level ="info";
|
||||||
global_log_verbosity ="medium";
|
global_log_verbosity ="medium";
|
||||||
hw_log_level ="info";
|
hw_log_level ="info";
|
||||||
hw_log_verbosity ="medium";
|
hw_log_verbosity ="medium";
|
||||||
phy_log_level ="info";
|
phy_log_level ="info";
|
||||||
phy_log_verbosity ="medium";
|
phy_log_verbosity ="medium";
|
||||||
mac_log_level ="info";
|
mac_log_level ="info";
|
||||||
mac_log_verbosity ="high";
|
mac_log_verbosity ="high";
|
||||||
rlc_log_level ="info";
|
rlc_log_level ="info";
|
||||||
rlc_log_verbosity ="medium";
|
rlc_log_verbosity ="medium";
|
||||||
pdcp_log_level ="info";
|
pdcp_log_level ="info";
|
||||||
pdcp_log_verbosity ="medium";
|
pdcp_log_verbosity ="medium";
|
||||||
rrc_log_level ="info";
|
rrc_log_level ="info";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|||||||
+70
-16
@@ -96,6 +96,51 @@ static void read_pipe(int p, char *b, int size) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int baseRunTimeCommand(char* cmd) {
|
||||||
|
FILE *fp;
|
||||||
|
size_t retSize = 0;
|
||||||
|
|
||||||
|
fp = popen(cmd, "r");
|
||||||
|
|
||||||
|
memset(cmd, 1, sizeof(*cmd));
|
||||||
|
retSize = fread(cmd, 1, sizeof(*cmd), fp);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (retSize == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return atoi(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
int checkIfFedoraDistribution(void) {
|
||||||
|
char cmd[200];
|
||||||
|
|
||||||
|
memset(cmd, 1, 200);
|
||||||
|
sprintf(cmd, "cat /etc/os-release | grep ID_LIKE | grep -ic fedora || true");
|
||||||
|
return baseRunTimeCommand(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
int checkIfGenericKernelOnFedora(void) {
|
||||||
|
char cmd[200];
|
||||||
|
|
||||||
|
memset(cmd, 1, 200);
|
||||||
|
sprintf(cmd, "uname -a | grep -c rt || true");
|
||||||
|
return (1 - baseRunTimeCommand(cmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
int checkIfInsideContainer(void) {
|
||||||
|
char cmd[200];
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
memset(cmd, 1, 200);
|
||||||
|
sprintf(cmd, "cat /proc/self/cgroup | egrep -c 'libpod|podman|kubepods' || true");
|
||||||
|
res = baseRunTimeCommand(cmd);
|
||||||
|
if (res > 0)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************/
|
/********************************************************************/
|
||||||
/* background process */
|
/* background process */
|
||||||
/********************************************************************/
|
/********************************************************************/
|
||||||
@@ -200,29 +245,38 @@ void start_background_system(void) {
|
|||||||
void threadCreate(pthread_t* t, void * (*func)(void*), void * param, char* name, int affinity, int priority){
|
void threadCreate(pthread_t* t, void * (*func)(void*), void * param, char* name, int affinity, int priority){
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
int ret;
|
int ret;
|
||||||
|
int settingPriority = 1;
|
||||||
ret=pthread_attr_init(&attr);
|
ret=pthread_attr_init(&attr);
|
||||||
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
||||||
ret=pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
ret=pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||||
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
||||||
ret=pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
|
ret=pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
|
||||||
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
||||||
ret=pthread_attr_setschedpolicy(&attr, SCHED_OAI);
|
if (checkIfFedoraDistribution())
|
||||||
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
if (checkIfGenericKernelOnFedora())
|
||||||
if(priority<sched_get_priority_min(SCHED_OAI) || priority>sched_get_priority_max(SCHED_FIFO)) {
|
if (checkIfInsideContainer())
|
||||||
LOG_E(TMR,"Prio not possible: %d, min is %d, max: %d, forced in the range\n",
|
settingPriority = 0;
|
||||||
priority,
|
|
||||||
sched_get_priority_min(SCHED_OAI),
|
if (settingPriority) {
|
||||||
sched_get_priority_max(SCHED_OAI));
|
ret=pthread_attr_setschedpolicy(&attr, SCHED_OAI);
|
||||||
if(priority<sched_get_priority_min(SCHED_OAI))
|
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
||||||
priority=sched_get_priority_min(SCHED_OAI);
|
if(priority<sched_get_priority_min(SCHED_OAI) || priority>sched_get_priority_max(SCHED_FIFO)) {
|
||||||
if(priority>sched_get_priority_max(SCHED_OAI))
|
LOG_E(TMR,"Prio not possible: %d, min is %d, max: %d, forced in the range\n",
|
||||||
priority=sched_get_priority_max(SCHED_OAI);
|
priority,
|
||||||
|
sched_get_priority_min(SCHED_OAI),
|
||||||
|
sched_get_priority_max(SCHED_OAI));
|
||||||
|
if(priority<sched_get_priority_min(SCHED_OAI))
|
||||||
|
priority=sched_get_priority_min(SCHED_OAI);
|
||||||
|
if(priority>sched_get_priority_max(SCHED_OAI))
|
||||||
|
priority=sched_get_priority_max(SCHED_OAI);
|
||||||
|
}
|
||||||
|
AssertFatal(priority<=sched_get_priority_max(SCHED_OAI),"");
|
||||||
|
struct sched_param sparam={0};
|
||||||
|
sparam.sched_priority = priority;
|
||||||
|
ret=pthread_attr_setschedparam(&attr, &sparam);
|
||||||
|
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
||||||
}
|
}
|
||||||
AssertFatal(priority<=sched_get_priority_max(SCHED_OAI),"");
|
|
||||||
struct sched_param sparam={0};
|
|
||||||
sparam.sched_priority = priority;
|
|
||||||
ret=pthread_attr_setschedparam(&attr, &sparam);
|
|
||||||
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
|
||||||
ret=pthread_create(t, &attr, func, param);
|
ret=pthread_create(t, &attr, func, param);
|
||||||
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
AssertFatal(ret==0,"ret: %d, errno: %d\n",ret, errno);
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,14 @@ void thread_top_init(char *thread_name,
|
|||||||
uint64_t deadline,
|
uint64_t deadline,
|
||||||
uint64_t period);
|
uint64_t period);
|
||||||
|
|
||||||
|
/****************************************************
|
||||||
|
* Functions to check system at runtime.
|
||||||
|
****************************************************/
|
||||||
|
|
||||||
|
int checkIfFedoraDistribution(void);
|
||||||
|
int checkIfGenericKernelOnFedora(void);
|
||||||
|
int checkIfInsideContainer(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
#/*
|
||||||
|
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
# * contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# * this work for additional information regarding copyright ownership.
|
||||||
|
# * The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
# * except in compliance with the License.
|
||||||
|
# * You may obtain a copy of the License at
|
||||||
|
# *
|
||||||
|
# * http://www.openairinterface.org/?page_id=698
|
||||||
|
# *
|
||||||
|
# * Unless required by applicable law or agreed to in writing, software
|
||||||
|
# * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# * See the License for the specific language governing permissions and
|
||||||
|
# * limitations under the License.
|
||||||
|
# *-------------------------------------------------------------------------------
|
||||||
|
# * For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
# * contact@openairinterface.org
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Dockerfile for the Open-Air-Interface BUILD service
|
||||||
|
# Valid for RHEL8
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
FROM ran-build:latest AS ru-build
|
||||||
|
|
||||||
|
RUN rm -Rf /oai-ran
|
||||||
|
WORKDIR /oai-ran
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
#run build_oai to build the target image
|
||||||
|
RUN /bin/sh oaienv && \
|
||||||
|
cd cmake_targets && \
|
||||||
|
mkdir -p log && \
|
||||||
|
./build_oai --RU --ninja -w USRP --verbose-ci
|
||||||
|
|
||||||
|
RUN yum install -y python3-pip && \
|
||||||
|
pip3 install --ignore-installed pyyaml && \
|
||||||
|
python3 ./docker/scripts/generateTemplate.py ./docker/scripts/enb_parameters.yaml
|
||||||
|
|
||||||
|
#start from scratch for target executable
|
||||||
|
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-lte-ru
|
||||||
|
ENV TZ=Europe/Paris
|
||||||
|
|
||||||
|
RUN yum update -y && \
|
||||||
|
yum install -y --enablerepo="ubi-8-codeready-builder" \
|
||||||
|
tzdata \
|
||||||
|
atlas \
|
||||||
|
net-tools \
|
||||||
|
iputils \
|
||||||
|
iproute && \
|
||||||
|
echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
|
||||||
|
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
|
||||||
|
|
||||||
|
WORKDIR /opt/oai-lte-ru/bin
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/oairu.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/docker/scripts/lte_ru_entrypoint.sh entrypoint.sh
|
||||||
|
|
||||||
|
WORKDIR /usr/local/lib/
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/libtcp_bridge_oai.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/librfsimulator.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/liboai_usrpdevif.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/libparams_libconfig.so .
|
||||||
|
COPY --from=ru-build /oai-ran/cmake_targets/ran_build/build/libdfts.so .
|
||||||
|
|
||||||
|
# Copying from the ran-build image the USRP needed packages
|
||||||
|
COPY --from=ru-build /lib64/libconfig.so.9 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libblas.so.3 /lib64
|
||||||
|
COPY --from=ru-build /lib64/liblapack.so.3 /lib64
|
||||||
|
COPY --from=ru-build /lib64/liblapacke.so.3 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_chrono.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_date_time.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_filesystem.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_program_options.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_serialization.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_thread.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_system.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_unit_test_framework.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_atomic.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /lib64/libboost_timer.so.1.66.0 /lib64
|
||||||
|
COPY --from=ru-build /usr/local/lib64/libuhd.so.4.0.0 /usr/local/lib64
|
||||||
|
|
||||||
|
RUN /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so.Rel15 /usr/local/lib/liboai_transpro.so" && \
|
||||||
|
/bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so.Rel15 /usr/local/lib/liboai_device.so" && \
|
||||||
|
/bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/librfsimulator.so" && \
|
||||||
|
ldconfig
|
||||||
|
|
||||||
|
# Copy the relevant configuration files for RRU
|
||||||
|
WORKDIR /opt/oai-lte-ru/etc
|
||||||
|
COPY --from=ru-build /oai-ran/docker/etc/rru* ./
|
||||||
|
|
||||||
|
WORKDIR /opt/oai-lte-ru
|
||||||
|
|
||||||
|
ENTRYPOINT ["/opt/oai-lte-ru/bin/entrypoint.sh"]
|
||||||
|
CMD ["/opt/oai-lte-ru/bin/oairu.Rel15", "-O", "/opt/oai-lte-ru/etc/rru.conf"]
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
#/*
|
||||||
|
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
# * contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# * this work for additional information regarding copyright ownership.
|
||||||
|
# * The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
# * except in compliance with the License.
|
||||||
|
# * You may obtain a copy of the License at
|
||||||
|
# *
|
||||||
|
# * http://www.openairinterface.org/?page_id=698
|
||||||
|
# *
|
||||||
|
# * Unless required by applicable law or agreed to in writing, software
|
||||||
|
# * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# * See the License for the specific language governing permissions and
|
||||||
|
# * limitations under the License.
|
||||||
|
# *-------------------------------------------------------------------------------
|
||||||
|
# * For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
# * contact@openairinterface.org
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Dockerfile for the Open-Air-Interface BUILD service
|
||||||
|
# Valid for Ubuntu 18.04
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
FROM ran-build:latest AS ru-build
|
||||||
|
|
||||||
|
RUN rm -Rf /oai-ran
|
||||||
|
WORKDIR /oai-ran
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
#run build_oai to build the target image
|
||||||
|
RUN /bin/sh oaienv && \
|
||||||
|
cd cmake_targets && \
|
||||||
|
mkdir -p log && \
|
||||||
|
./build_oai --RU --ninja -w USRP --verbose-ci
|
||||||
|
|
||||||
|
RUN apt-get install -y python3-pip && \
|
||||||
|
pip3 install --ignore-installed pyyaml && \
|
||||||
|
python3 ./docker/scripts/generateTemplate.py ./docker/scripts/enb_parameters.yaml
|
||||||
|
|
||||||
|
#start from scratch for target executable
|
||||||
|
FROM ubuntu:bionic as oai-lte-ru
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV TZ=Europe/Paris
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||||
|
tzdata \
|
||||||
|
software-properties-common \
|
||||||
|
libblas3 \
|
||||||
|
libatlas3-base \
|
||||||
|
libconfig9 \
|
||||||
|
net-tools \
|
||||||
|
iputils-ping \
|
||||||
|
iproute2 && \
|
||||||
|
# Install UHD driver from ettus ppa
|
||||||
|
# At time of writing, it is 3.14
|
||||||
|
add-apt-repository ppa:ettusresearch/uhd --yes && \
|
||||||
|
apt-get update && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||||
|
python \
|
||||||
|
libusb-1.0-0 \
|
||||||
|
libuhd003 \
|
||||||
|
uhd-host && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /opt/oai-lte-ru/bin
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/oairu.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/docker/scripts/lte_ru_entrypoint.sh entrypoint.sh
|
||||||
|
|
||||||
|
WORKDIR /usr/local/lib/
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/libtcp_bridge_oai.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/librfsimulator.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/liboai_usrpdevif.so.Rel15 .
|
||||||
|
COPY --from=ru-build /oai-ran/targets/bin/libparams_libconfig.so .
|
||||||
|
COPY --from=ru-build /oai-ran/cmake_targets/ran_build/build/libdfts.so .
|
||||||
|
RUN /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so.Rel15 /usr/local/lib/liboai_transpro.so" && \
|
||||||
|
/bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so.Rel15 /usr/local/lib/liboai_device.so" && \
|
||||||
|
/bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/librfsimulator.so" && \
|
||||||
|
ldconfig
|
||||||
|
|
||||||
|
# Copy the relevant configuration files for RRU
|
||||||
|
WORKDIR /opt/oai-lte-ru/etc
|
||||||
|
COPY --from=ru-build /oai-ran/docker/etc/rru* ./
|
||||||
|
|
||||||
|
WORKDIR /opt/oai-lte-ru
|
||||||
|
|
||||||
|
ENTRYPOINT ["/opt/oai-lte-ru/bin/entrypoint.sh"]
|
||||||
|
CMD ["/opt/oai-lte-ru/bin/oairu.Rel15", "-O", "/opt/oai-lte-ru/etc/rru.conf"]
|
||||||
@@ -11,6 +11,8 @@ if [[ -v USE_FDD_DU ]]; then ln -s $PREFIX/etc/du.fdd.conf $PREFIX/etc/enb.conf;
|
|||||||
if [[ -v USE_FDD_MONO ]]; then ln -s $PREFIX/etc/enb.fdd.conf $PREFIX/etc/enb.conf; fi
|
if [[ -v USE_FDD_MONO ]]; then ln -s $PREFIX/etc/enb.fdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
if [[ -v USE_TDD_MONO ]]; then ln -s $PREFIX/etc/enb.tdd.conf $PREFIX/etc/enb.conf; fi
|
if [[ -v USE_TDD_MONO ]]; then ln -s $PREFIX/etc/enb.tdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
if [[ -v USE_FDD_FAPI_RCC ]]; then ln -s $PREFIX/etc/rcc.nfapi.fdd.conf $PREFIX/etc/enb.conf; fi
|
if [[ -v USE_FDD_FAPI_RCC ]]; then ln -s $PREFIX/etc/rcc.nfapi.fdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
|
if [[ -v USE_FDD_IF4P5_RCC ]]; then ln -s $PREFIX/etc/rcc.if4p5.fdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
|
if [[ -v USE_TDD_IF4P5_RCC ]]; then ln -s $PREFIX/etc/rcc.if4p5.tdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
if [[ -v USE_FDD_RRU ]]; then ln -s $PREFIX/etc/rru.fdd.conf $PREFIX/etc/enb.conf; fi
|
if [[ -v USE_FDD_RRU ]]; then ln -s $PREFIX/etc/rru.fdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
if [[ -v USE_TDD_RRU ]]; then ln -s $PREFIX/etc/rru.tdd.conf $PREFIX/etc/enb.conf; fi
|
if [[ -v USE_TDD_RRU ]]; then ln -s $PREFIX/etc/rru.tdd.conf $PREFIX/etc/enb.conf; fi
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
dest_dir: docker/etc
|
dest_dir: docker/etc
|
||||||
|
|
||||||
- configurations:
|
- configurations:
|
||||||
- filePrefix: cu
|
- filePrefix: cu.band7.tm1.25PRB
|
||||||
outputfilename: "cu.fdd.conf"
|
outputfilename: "cu.fdd.conf"
|
||||||
config:
|
config:
|
||||||
- key: Active_eNBs
|
- key: Active_eNBs
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
- key: ENB_IPV4_ADDRESS_FOR_X2C
|
- key: ENB_IPV4_ADDRESS_FOR_X2C
|
||||||
env: "@F1_CU_IP_ADDRESS@"
|
env: "@F1_CU_IP_ADDRESS@"
|
||||||
|
|
||||||
- filePrefix: du
|
- filePrefix: du.band7.tm1.25PRB
|
||||||
outputfilename: "du.fdd.conf"
|
outputfilename: "du.fdd.conf"
|
||||||
config:
|
config:
|
||||||
- key: Active_eNBs
|
- key: Active_eNBs
|
||||||
@@ -248,3 +248,89 @@
|
|||||||
- key: ENB_IPV4_ADDRESS_FOR_X2C
|
- key: ENB_IPV4_ADDRESS_FOR_X2C
|
||||||
env: "@F1_CU_IP_ADDRESS@"
|
env: "@F1_CU_IP_ADDRESS@"
|
||||||
|
|
||||||
|
- filePrefix: "rcc.band7.tm1.if4p5.lo.25PRB"
|
||||||
|
outputfilename: "rcc.if4p5.fdd.conf"
|
||||||
|
config:
|
||||||
|
- key: Active_eNBs
|
||||||
|
env: "@ENB_NAME@"
|
||||||
|
- key: eNB_name
|
||||||
|
env: "@ENB_NAME@"
|
||||||
|
- key: plmn_list
|
||||||
|
env:
|
||||||
|
mcc: "@MCC@"
|
||||||
|
mnc: "@MNC@"
|
||||||
|
mnc_length: "@MNC_LENGTH@"
|
||||||
|
- key: tracking_area_code
|
||||||
|
env: "@TAC@"
|
||||||
|
- key: eutra_band
|
||||||
|
env: "@UTRA_BAND_ID@"
|
||||||
|
- key: downlink_frequency
|
||||||
|
env: "@DL_FREQUENCY_IN_MHZ@000000"
|
||||||
|
- key: uplink_frequency_offset
|
||||||
|
env: "@UL_FREQUENCY_OFFSET_IN_MHZ@000000"
|
||||||
|
- key: Nid_cell
|
||||||
|
env: "@NID_CELL@"
|
||||||
|
- key: N_RB_DL
|
||||||
|
env: "@NB_PRB@"
|
||||||
|
- key: ipv4
|
||||||
|
env: "@MME_S1C_IP_ADDRESS@"
|
||||||
|
- key: ENB_INTERFACE_NAME_FOR_S1_MME
|
||||||
|
env: "@RCC_IF_NAME@"
|
||||||
|
- key: ENB_IPV4_ADDRESS_FOR_S1_MME
|
||||||
|
env: "@RCC_S1C_IP_ADDRESS@"
|
||||||
|
- key: ENB_INTERFACE_NAME_FOR_S1U
|
||||||
|
env: "@RCC_IF_NAME@"
|
||||||
|
- key: ENB_IPV4_ADDRESS_FOR_S1U
|
||||||
|
env: "@RCC_IP_ADDRESS@"
|
||||||
|
- key: ENB_IPV4_ADDRESS_FOR_X2C
|
||||||
|
env: "@RCC_IP_ADDRESS@"
|
||||||
|
- key: local_if_name
|
||||||
|
env: "@IF4P5_IF_NAME@"
|
||||||
|
- key: remote_address
|
||||||
|
env: "@IF4P5_RRU_IP_ADDRESS@"
|
||||||
|
- key: local_address
|
||||||
|
env: "@IF4P5_RCC_IP_ADDRESS@"
|
||||||
|
|
||||||
|
- filePrefix: "rcc.band40.tm1.25PRB"
|
||||||
|
outputfilename: "rcc.if4p5.tdd.conf"
|
||||||
|
config:
|
||||||
|
- key: Active_eNBs
|
||||||
|
env: "@ENB_NAME@"
|
||||||
|
- key: eNB_name
|
||||||
|
env: "@ENB_NAME@"
|
||||||
|
- key: plmn_list
|
||||||
|
env:
|
||||||
|
mcc: "@MCC@"
|
||||||
|
mnc: "@MNC@"
|
||||||
|
mnc_length: "@MNC_LENGTH@"
|
||||||
|
- key: tracking_area_code
|
||||||
|
env: "@TAC@"
|
||||||
|
- key: eutra_band
|
||||||
|
env: "@UTRA_BAND_ID@"
|
||||||
|
- key: downlink_frequency
|
||||||
|
env: "@DL_FREQUENCY_IN_MHZ@000000"
|
||||||
|
- key: uplink_frequency_offset
|
||||||
|
env: "@UL_FREQUENCY_OFFSET_IN_MHZ@000000"
|
||||||
|
- key: Nid_cell
|
||||||
|
env: "@NID_CELL@"
|
||||||
|
- key: N_RB_DL
|
||||||
|
env: "@NB_PRB@"
|
||||||
|
- key: ipv4
|
||||||
|
env: "@MME_S1C_IP_ADDRESS@"
|
||||||
|
- key: ENB_INTERFACE_NAME_FOR_S1_MME
|
||||||
|
env: "@RCC_IF_NAME@"
|
||||||
|
- key: ENB_IPV4_ADDRESS_FOR_S1_MME
|
||||||
|
env: "@RCC_S1C_IP_ADDRESS@"
|
||||||
|
- key: ENB_INTERFACE_NAME_FOR_S1U
|
||||||
|
env: "@RCC_IF_NAME@"
|
||||||
|
- key: ENB_IPV4_ADDRESS_FOR_S1U
|
||||||
|
env: "@RCC_IP_ADDRESS@"
|
||||||
|
- key: ENB_IPV4_ADDRESS_FOR_X2C
|
||||||
|
env: "@RCC_IP_ADDRESS@"
|
||||||
|
- key: local_if_name
|
||||||
|
env: "@IF4P5_IF_NAME@"
|
||||||
|
- key: remote_address
|
||||||
|
env: "@IF4P5_RRU_IP_ADDRESS@"
|
||||||
|
- key: local_address
|
||||||
|
env: "@IF4P5_RCC_IP_ADDRESS@"
|
||||||
|
|
||||||
|
|||||||
@@ -39,20 +39,24 @@ def main():
|
|||||||
for config in data[1]["configurations"]:
|
for config in data[1]["configurations"]:
|
||||||
filePrefix = config["filePrefix"]
|
filePrefix = config["filePrefix"]
|
||||||
outputfilename = config["outputfilename"]
|
outputfilename = config["outputfilename"]
|
||||||
|
print('================================================')
|
||||||
print('filePrefix = ' + filePrefix)
|
print('filePrefix = ' + filePrefix)
|
||||||
print('outputfilename = ' + outputfilename)
|
print('outputfilename = ' + outputfilename)
|
||||||
for inputfile in dir:
|
for inputfile in dir:
|
||||||
if inputfile.find(filePrefix) >=0:
|
if inputfile.find(filePrefix) >=0:
|
||||||
prefix_outputfile = {"cu": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
prefix_outputfile = {"cu.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"du": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"du.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"rru.fdd": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"rru.fdd": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"rru.tdd": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"rru.tdd": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"enb.band7.tm1.25PRB.usrpb210": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"enb.band7.tm1.25PRB.usrpb210": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"enb.band40.tm1.25PRB.FairScheduler.usrpb210": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"enb.band40.tm1.25PRB.FairScheduler.usrpb210": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"rcc.band7.tm1.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"rcc.band7.tm1.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
|
"rcc.band7.tm1.if4p5.lo.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
|
"rcc.band40.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"ue.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
"ue.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||||
"ue_sim_ci": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}'
|
"ue_sim_ci": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}'
|
||||||
}
|
}
|
||||||
|
print('inputfile = ' + inputfile)
|
||||||
if filePrefix in prefix_outputfile:
|
if filePrefix in prefix_outputfile:
|
||||||
outputfile1 = prefix_outputfile[filePrefix]
|
outputfile1 = prefix_outputfile[filePrefix]
|
||||||
|
|
||||||
|
|||||||
Executable
+62
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PREFIX=/opt/oai-lte-ru
|
||||||
|
|
||||||
|
# Based another env var, pick one template to use
|
||||||
|
if [[ -v USE_FDD_RRU ]]; then ln -s $PREFIX/etc/rru.fdd.conf $PREFIX/etc/rru.conf; fi
|
||||||
|
if [[ -v USE_TDD_RRU ]]; then ln -s $PREFIX/etc/rru.tdd.conf $PREFIX/etc/rru.conf; fi
|
||||||
|
|
||||||
|
# Only this template will be manipulated
|
||||||
|
CONFIG_FILES=`ls $PREFIX/etc/rru.conf || true`
|
||||||
|
|
||||||
|
for c in ${CONFIG_FILES}; do
|
||||||
|
# grep variable names (format: ${VAR}) from template to be rendered
|
||||||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs)
|
||||||
|
|
||||||
|
# create sed expressions for substituting each occurrence of ${VAR}
|
||||||
|
# with the value of the environment variable "VAR"
|
||||||
|
EXPRESSIONS=""
|
||||||
|
for v in ${VARS}; do
|
||||||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||||||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||||||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||||||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||||||
|
done
|
||||||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||||||
|
|
||||||
|
# render template and inline replace config file
|
||||||
|
sed -i "${EXPRESSIONS}" ${c}
|
||||||
|
done
|
||||||
|
|
||||||
|
# Load the USRP binaries
|
||||||
|
if [[ -v USE_B2XX ]]; then
|
||||||
|
/usr/lib/uhd/utils/uhd_images_downloader.py -t b2xx
|
||||||
|
elif [[ -v USE_X3XX ]]; then
|
||||||
|
/usr/lib/uhd/utils/uhd_images_downloader.py -t x3xx
|
||||||
|
elif [[ -v USE_N3XX ]]; then
|
||||||
|
/usr/lib/uhd/utils/uhd_images_downloader.py -t n3xx
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Starting eNB soft modem"
|
||||||
|
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
||||||
|
echo "Additional option(s): ${USE_ADDITIONAL_OPTIONS}"
|
||||||
|
new_args=()
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
new_args+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
for word in ${USE_ADDITIONAL_OPTIONS}; do
|
||||||
|
new_args+=("$word")
|
||||||
|
done
|
||||||
|
echo "${new_args[@]}"
|
||||||
|
exec "${new_args[@]}"
|
||||||
|
else
|
||||||
|
echo "$@"
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
@@ -417,7 +417,7 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
int dmrs_scrambling_id=0,data_scrambling_id=0;
|
int dmrs_scrambling_id=0,data_scrambling_id=0;
|
||||||
|
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
||||||
NR_PUCCH_Resource_t *pucch_resource;
|
NR_PUCCH_Resource_t *pucch_resource = NULL;
|
||||||
uint16_t crnti = mac->crnti;
|
uint16_t crnti = mac->crnti;
|
||||||
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
|
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
|
||||||
|
|
||||||
@@ -497,7 +497,8 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
pucch_resource_set = find_pucch_resource_set( mac, gNB_id, N_UCI);
|
pucch_resource_set = find_pucch_resource_set( mac, gNB_id, N_UCI);
|
||||||
if (pucch_resource_set != MAX_NB_OF_PUCCH_RESOURCE_SETS) {
|
if (pucch_resource_set != MAX_NB_OF_PUCCH_RESOURCE_SETS) {
|
||||||
pucch_resource_indicator = 0;
|
pucch_resource_indicator = 0;
|
||||||
pucch_resource_id = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set]->resourceList.list.array[pucch_resource_indicator][0]; /* get the first resource of the set */
|
/* get the first resource of the set */
|
||||||
|
pucch_resource_id = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set]->resourceList.list.array[pucch_resource_indicator][0];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_W(PHY,"PUCCH no resource set found for CSI at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
LOG_W(PHY,"PUCCH no resource set found for CSI at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME);
|
||||||
@@ -639,7 +640,6 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
int O_CRC = 0;
|
int O_CRC = 0;
|
||||||
|
|
||||||
nb_symbols = nb_symbols_total; /* by default, it can be reduced due to symbols reserved for dmrs */
|
nb_symbols = nb_symbols_total; /* by default, it can be reduced due to symbols reserved for dmrs */
|
||||||
pucch_resource = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[pucch_resource_id];
|
|
||||||
|
|
||||||
switch(format) {
|
switch(format) {
|
||||||
case pucch_format0_nr:
|
case pucch_format0_nr:
|
||||||
@@ -1122,7 +1122,7 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
int current_resource_id = MAX_NB_OF_PUCCH_RESOURCES;
|
int current_resource_id = MAX_NB_OF_PUCCH_RESOURCES;
|
||||||
pucch_format_nr_t format_pucch;
|
pucch_format_nr_t format_pucch;
|
||||||
int ready_pucch_resource_id = FALSE; /* in the case that it is already given */
|
int ready_pucch_resource_id = FALSE; /* in the case that it is already given */
|
||||||
NR_PUCCH_Resource_t *pucch_resource;
|
NR_PUCCH_Resource_t *pucch_resource = NULL;
|
||||||
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
|
NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
|
||||||
|
|
||||||
/* ini values to unset */
|
/* ini values to unset */
|
||||||
@@ -1193,6 +1193,7 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (resource_set_found == TRUE) {
|
if (resource_set_found == TRUE) {
|
||||||
|
|
||||||
if (pucch_resource_indicator < MAX_PUCCH_RESOURCE_INDICATOR) {
|
if (pucch_resource_indicator < MAX_PUCCH_RESOURCE_INDICATOR) {
|
||||||
// Verify that the value of pucch_resource_indicator is valid
|
// Verify that the value of pucch_resource_indicator is valid
|
||||||
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id]->resourceList.list.count <= pucch_resource_indicator)
|
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id]->resourceList.list.count <= pucch_resource_indicator)
|
||||||
@@ -1202,7 +1203,6 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
}
|
}
|
||||||
/* check if resource indexing by pucch_resource_indicator of this set is compatible */
|
/* check if resource indexing by pucch_resource_indicator of this set is compatible */
|
||||||
if ((ready_pucch_resource_id == TRUE) || (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id]->resourceList.list.array[pucch_resource_indicator][0] != MAX_NB_OF_PUCCH_RESOURCES)) {
|
if ((ready_pucch_resource_id == TRUE) || (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id]->resourceList.list.array[pucch_resource_indicator][0] != MAX_NB_OF_PUCCH_RESOURCES)) {
|
||||||
|
|
||||||
if (ready_pucch_resource_id == TRUE) {
|
if (ready_pucch_resource_id == TRUE) {
|
||||||
current_resource_id = *resource_id;
|
current_resource_id = *resource_id;
|
||||||
}
|
}
|
||||||
@@ -1236,17 +1236,14 @@ boolean_t select_pucch_resource(PHY_VARS_NR_UE *ue, NR_UE_MAC_INST_t *mac, uint8
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*uint8_t pucch_resource_count = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList.list.count;
|
uint8_t pucch_resource_count = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.count;
|
||||||
for (uint8_t i=0; i<pucch_resource_count; i++) {
|
for (uint8_t i=0; i<pucch_resource_count; i++) {
|
||||||
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList.list.array[i]->pucch_ResourceId == current_resource_id)
|
if (mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[i]->pucch_ResourceId == current_resource_id)
|
||||||
pucch_resource = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList.list.array[i];
|
pucch_resource = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[i];
|
||||||
}*/
|
}
|
||||||
|
|
||||||
pucch_resource = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[current_resource_id];
|
|
||||||
if (pucch_resource != NULL) {
|
if (pucch_resource != NULL) {
|
||||||
format_pucch = mac->ULbwp[bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup->resourceToAddModList->list.array[current_resource_id]->format.present;
|
format_pucch = pucch_resource->format.present;
|
||||||
nb_symbols_for_tx = get_nb_symbols_pucch(pucch_resource, format_pucch);
|
nb_symbols_for_tx = get_nb_symbols_pucch(pucch_resource, format_pucch);
|
||||||
|
|
||||||
if (check_pucch_format(mac, gNB_id, format_pucch, nb_symbols_for_tx, uci_size) == TRUE) {
|
if (check_pucch_format(mac, gNB_id, format_pucch, nb_symbols_for_tx, uci_size) == TRUE) {
|
||||||
*resource_set_id = pucch_resource_set_id;
|
*resource_set_id = pucch_resource_set_id;
|
||||||
*resource_id = current_resource_id;
|
*resource_id = current_resource_id;
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
#include "lte-softmodem.h"
|
#include "lte-softmodem.h"
|
||||||
|
|
||||||
#include "rt_wrapper.h"
|
#include "rt_wrapper.h"
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
#include "LAYER2/MAC/mac.h"
|
#include "LAYER2/MAC/mac.h"
|
||||||
#include "RRC/LTE/rrc_extern.h"
|
#include "RRC/LTE/rrc_extern.h"
|
||||||
@@ -230,14 +231,23 @@ void init_thread(int sched_runtime,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
int settingPriority = 1;
|
||||||
|
|
||||||
if (CPU_COUNT(cpuset) > 0)
|
if (checkIfFedoraDistribution())
|
||||||
AssertFatal( 0 == pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), cpuset), "");
|
if (checkIfGenericKernelOnFedora())
|
||||||
|
if (checkIfInsideContainer())
|
||||||
|
settingPriority = 0;
|
||||||
|
|
||||||
|
if (settingPriority) {
|
||||||
|
if (CPU_COUNT(cpuset) > 0)
|
||||||
|
AssertFatal( 0 == pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), cpuset), "");
|
||||||
|
|
||||||
|
struct sched_param sp;
|
||||||
|
sp.sched_priority = sched_fifo;
|
||||||
|
AssertFatal(pthread_setschedparam(pthread_self(),SCHED_FIFO,&sp)==0,
|
||||||
|
"Can't set thread priority, Are you root?\n");
|
||||||
|
}
|
||||||
|
|
||||||
struct sched_param sp;
|
|
||||||
sp.sched_priority = sched_fifo;
|
|
||||||
AssertFatal(pthread_setschedparam(pthread_self(),SCHED_FIFO,&sp)==0,
|
|
||||||
"Can't set thread priority, Are you root?\n");
|
|
||||||
/* Check the actual affinity mask assigned to the thread */
|
/* Check the actual affinity mask assigned to the thread */
|
||||||
cpu_set_t *cset=CPU_ALLOC(CPU_SETSIZE);
|
cpu_set_t *cset=CPU_ALLOC(CPU_SETSIZE);
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
#include "rt_wrapper.h"
|
#include "rt_wrapper.h"
|
||||||
|
#include "system.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <common/utils/msc/msc.h>
|
#include <common/utils/msc/msc.h>
|
||||||
|
|
||||||
@@ -294,6 +295,7 @@ void thread_top_init(char *thread_name,
|
|||||||
struct sched_param sparam;
|
struct sched_param sparam;
|
||||||
char cpu_affinity[1024];
|
char cpu_affinity[1024];
|
||||||
cpu_set_t cpuset;
|
cpu_set_t cpuset;
|
||||||
|
int settingPriority = 1;
|
||||||
|
|
||||||
/* Set affinity mask to include CPUs 2 to MAX_CPUS */
|
/* Set affinity mask to include CPUs 2 to MAX_CPUS */
|
||||||
/* CPU 0 is reserved for UHD threads */
|
/* CPU 0 is reserved for UHD threads */
|
||||||
@@ -340,30 +342,37 @@ void thread_top_init(char *thread_name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&sparam, 0, sizeof(sparam));
|
if (checkIfFedoraDistribution())
|
||||||
sparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
|
if (checkIfGenericKernelOnFedora())
|
||||||
policy = SCHED_FIFO ;
|
if (checkIfInsideContainer())
|
||||||
|
settingPriority = 0;
|
||||||
s = pthread_setschedparam(pthread_self(), policy, &sparam);
|
|
||||||
if (s != 0) {
|
|
||||||
perror("pthread_setschedparam : ");
|
|
||||||
exit_fun("Error setting thread priority");
|
|
||||||
}
|
|
||||||
|
|
||||||
s = pthread_getschedparam(pthread_self(), &policy, &sparam);
|
|
||||||
if (s != 0) {
|
|
||||||
perror("pthread_getschedparam : ");
|
|
||||||
exit_fun("Error getting thread priority");
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_setname_np(pthread_self(), thread_name);
|
if (settingPriority) {
|
||||||
|
memset(&sparam, 0, sizeof(sparam));
|
||||||
|
sparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
|
||||||
|
policy = SCHED_FIFO;
|
||||||
|
|
||||||
|
s = pthread_setschedparam(pthread_self(), policy, &sparam);
|
||||||
|
if (s != 0) {
|
||||||
|
perror("pthread_setschedparam : ");
|
||||||
|
exit_fun("Error setting thread priority");
|
||||||
|
}
|
||||||
|
|
||||||
|
s = pthread_getschedparam(pthread_self(), &policy, &sparam);
|
||||||
|
if (s != 0) {
|
||||||
|
perror("pthread_getschedparam : ");
|
||||||
|
exit_fun("Error getting thread priority");
|
||||||
|
}
|
||||||
|
|
||||||
LOG_I(HW, "[SCHED][eNB] %s started on CPU %d, sched_policy = %s , priority = %d, CPU Affinity=%s \n",thread_name,sched_getcpu(),
|
pthread_setname_np(pthread_self(), thread_name);
|
||||||
(policy == SCHED_FIFO) ? "SCHED_FIFO" :
|
|
||||||
(policy == SCHED_RR) ? "SCHED_RR" :
|
LOG_I(HW, "[SCHED][eNB] %s started on CPU %d, sched_policy = %s , priority = %d, CPU Affinity=%s \n",thread_name,sched_getcpu(),
|
||||||
(policy == SCHED_OTHER) ? "SCHED_OTHER" :
|
(policy == SCHED_FIFO) ? "SCHED_FIFO" :
|
||||||
"???",
|
(policy == SCHED_RR) ? "SCHED_RR" :
|
||||||
sparam.sched_priority, cpu_affinity );
|
(policy == SCHED_OTHER) ? "SCHED_OTHER" :
|
||||||
|
"???",
|
||||||
|
sparam.sched_priority, cpu_affinity );
|
||||||
|
}
|
||||||
|
|
||||||
#endif //LOW_LATENCY
|
#endif //LOW_LATENCY
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user