diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py
index 4ac1b0ea94..37d648a5b0 100644
--- a/ci-scripts/cls_oaicitest.py
+++ b/ci-scripts/cls_oaicitest.py
@@ -185,7 +185,7 @@ class OaiCiTest():
SSH.command('mkdir -p log', '\$', 5)
SSH.command('chmod 777 log', '\$', 5)
# no need to remove in log (git clean did the trick)
- SSH.command('stdbuf -o0 ./build_oai ' + self.Build_OAI_UE_args + ' 2>&1 | stdbuf -o0 tee compile_oai_ue.log', 'Bypassing the Tests|build have failed', 900)
+ SSH.command('stdbuf -o0 ./build_oai ' + self.Build_OAI_UE_args + ' 2>&1 | stdbuf -o0 tee compile_oai_ue.log', 'Bypassing the Tests|build have failed', 1200)
SSH.command('ls ran_build/build', '\$', 3)
SSH.command('ls ran_build/build', '\$', 3)
buildStatus = True
diff --git a/ci-scripts/xml_files/enb_ue_usrp210_band7_ue_build.xml b/ci-scripts/xml_files/enb_ue_usrp210_band7_ue_build.xml
index 7280a87fb8..d73a1e26e9 100644
--- a/ci-scripts/xml_files/enb_ue_usrp210_band7_ue_build.xml
+++ b/ci-scripts/xml_files/enb_ue_usrp210_band7_ue_build.xml
@@ -32,7 +32,7 @@
Build_OAI_UE
Build OAI UE
- -w USRP --UE
+ -w USRP --UE --ninja
diff --git a/ci-scripts/xml_files/ue_band20_build.xml b/ci-scripts/xml_files/ue_band20_build.xml
index 9ca1a2b234..d867929630 100644
--- a/ci-scripts/xml_files/ue_band20_build.xml
+++ b/ci-scripts/xml_files/ue_band20_build.xml
@@ -32,7 +32,7 @@
Build_OAI_UE
Build OAI UE
- -w USRP --UE
+ -w USRP --UE --ninja
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index ff6495c493..6b5c1a9b22 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -239,7 +239,7 @@ void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
if (decodeSuccess) {
memcpy(ulsch_harq->b+rdata->offset,
ulsch_harq->c[r],
- rdata->Kr_bytes- - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0));
+ rdata->Kr_bytes - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0));
} else {
if ( rdata->nbSegments != ulsch_harq->processedSegments ) {
diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c
index f2662d9fe6..afebe4ed97 100644
--- a/openair1/SIMULATION/NR_PHY/ulschsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulschsim.c
@@ -81,7 +81,7 @@ int nr_postDecode_sim(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
if (decodeSuccess) {
memcpy(ulsch_harq->b+rdata->offset,
ulsch_harq->c[r],
- rdata->Kr_bytes- - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0));
+ rdata->Kr_bytes - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0));
} else {
if ( rdata->nbSegments != ulsch_harq->processedSegments ) {
int nb=abortTpool(gNB->threadPool, req->key);
diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h
index 08ecde26a0..0c55764d6e 100644
--- a/openair2/COMMON/x2ap_messages_types.h
+++ b/openair2/COMMON/x2ap_messages_types.h
@@ -122,6 +122,8 @@ typedef struct x2ap_register_enb_req_s {
* CC Params
*/
int16_t eutra_band[MAX_NUM_CCs];
+ int32_t nr_band[MAX_NUM_CCs];
+ int32_t nrARFCN[MAX_NUM_CCs];
uint32_t downlink_frequency[MAX_NUM_CCs];
int32_t uplink_frequency_offset[MAX_NUM_CCs];
uint32_t Nid_cell[MAX_NUM_CCs];
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index 228d624e03..9ad41d5432 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -34,6 +34,7 @@
#include "common/utils/LOG/log_extern.h"
#include "assertions.h"
#include "gnb_config.h"
+#include "gnb_paramdef.h"
#include "UTIL/OTG/otg.h"
#include "UTIL/OTG/otg_externs.h"
#include "intertask_interface.h"
@@ -1042,27 +1043,32 @@ void NRRCConfig(void) {
}
+
int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i) {
int J, l;
char *address = NULL;
char *cidr = NULL;
-
//int num_gnbs = 0;
//int num_component_carriers = 0;
int j,k = 0;
int32_t gnb_id = 0;
paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
+ ////////// Identification parameters
paramdef_t GNBParams[] = GNBPARAMS_DESC;
paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};
/* get global parameters, defined outside any section in the config file */
config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL);
-
- //paramlist_def_t SCCsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, NULL, 0};
+ NR_ServingCellConfigCommon_t *scc = calloc(1,sizeof(NR_ServingCellConfigCommon_t));
+ uint64_t ssb_bitmap=0xff;
+ memset((void*)scc,0,sizeof(NR_ServingCellConfigCommon_t));
+ prepare_scc(scc);
+ paramdef_t SCCsParams[] = SCCPARAMS_DESC(scc);
+ paramlist_def_t SCCsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, NULL, 0};
AssertFatal(i < GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt,
"Failed to parse config file %s, %uth attribute %s \n",
- RC.config_file_name, i, ENB_CONFIG_STRING_ACTIVE_ENBS);
+ RC.config_file_name, i, GNB_CONFIG_STRING_ACTIVE_GNBS);
if (GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt > 0) {
// Output a list of all gNBs.
@@ -1132,19 +1138,28 @@ int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i) {
"MNC %d cannot be encoded in two digits as requested (change mnc_digit_length to 3)\n",
X2AP_REGISTER_ENB_REQ(msg_p).mnc);
- X2AP_REGISTER_ENB_REQ (msg_p).num_cc = 1;
- J = 0;
- X2AP_REGISTER_ENB_REQ (msg_p).eutra_band[J] = 78; //ccparams_nr_x2.nr_band; //78
- X2AP_REGISTER_ENB_REQ (msg_p).downlink_frequency[J] = 3600000000; //ccparams_nr_x2.downlink_frequency; //3600000000
- X2AP_REGISTER_ENB_REQ (msg_p).uplink_frequency_offset[J] = 0; //(unsigned int) ccparams_nr_x2.uplink_frequency_offset; //0
- X2AP_REGISTER_ENB_REQ (msg_p).Nid_cell[J]= 0; //ccparams_nr_x2.Nid_cell; //0
- X2AP_REGISTER_ENB_REQ (msg_p).N_RB_DL[J]= 106; //ccparams_nr_x2.N_RB_DL; //106
+ sprintf(aprefix, "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0);
- X2AP_REGISTER_ENB_REQ (msg_p).frame_type[J] = TDD;
-
- //Temp out
- /*X2AP_REGISTER_ENB_REQ (msg_p).fdd_earfcn_DL[J] = to_earfcn_DL(ccparams_lte.eutra_band, ccparams_lte.downlink_frequency, ccparams_lte.N_RB_DL);
- X2AP_REGISTER_ENB_REQ (msg_p).fdd_earfcn_UL[J] = to_earfcn_UL(ccparams_lte.eutra_band, ccparams_lte.downlink_frequency + ccparams_lte.uplink_frequency_offset, ccparams_lte.N_RB_DL);*/
+ config_getlist(&SCCsParamList, NULL, 0, aprefix);
+ if (SCCsParamList.numelt > 0) {
+ sprintf(aprefix, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST,0,GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, 0);
+ config_get( SCCsParams,sizeof(SCCsParams)/sizeof(paramdef_t),aprefix);
+ fix_scc(scc,ssb_bitmap);
+ }
+ X2AP_REGISTER_ENB_REQ (msg_p).num_cc = SCCsParamList.numelt;
+ for (J = 0; J < SCCsParamList.numelt ; J++) {
+ X2AP_REGISTER_ENB_REQ (msg_p).nr_band[J] = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]; //nr_band; //78
+ X2AP_REGISTER_ENB_REQ (msg_p).nrARFCN[J] = scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA;
+ X2AP_REGISTER_ENB_REQ (msg_p).uplink_frequency_offset[J] = scc->uplinkConfigCommon->frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->offsetToCarrier; //0
+ X2AP_REGISTER_ENB_REQ (msg_p).Nid_cell[J]= *scc->physCellId; //0
+ X2AP_REGISTER_ENB_REQ (msg_p).N_RB_DL[J]= scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;//106
+ X2AP_REGISTER_ENB_REQ (msg_p).frame_type[J] = TDD;
+ LOG_I(X2AP, "gNB configuration parameters: nr_band: %d, nr_ARFCN: %d, DL_RBs: %d, num_cc: %d \n",
+ X2AP_REGISTER_ENB_REQ (msg_p).nr_band[J],
+ X2AP_REGISTER_ENB_REQ (msg_p).nrARFCN[J],
+ X2AP_REGISTER_ENB_REQ (msg_p).N_RB_DL[J],
+ X2AP_REGISTER_ENB_REQ (msg_p).num_cc);
+ }
sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k);
config_getlist( &X2ParamList,X2Params,sizeof(X2Params)/sizeof(paramdef_t),aprefix);
@@ -1233,4 +1248,3 @@ int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i) {
return 0;
}
-
diff --git a/openair2/GNB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h
index 66d9e5c594..1e8156c239 100644
--- a/openair2/GNB_APP/gnb_paramdef.h
+++ b/openair2/GNB_APP/gnb_paramdef.h
@@ -117,30 +117,6 @@ typedef enum {
#define GNB_CONFIG_STRING_PUSCHTARGETPOWX10 "pusch_TargetSNRx10"
#define GNB_CONFIG_STRING_PUCCHTARGETPOWX10 "pucch_TargetSNRx10"
-
-typedef struct ccparams_nr_x2 {
- char *frame_type;
- int32_t tdd_config;
- int32_t tdd_config_s;
- int32_t nr_band;
- long long int downlink_frequency;
- int32_t uplink_frequency_offset;
- int32_t Nid_cell;
- int32_t N_RB_DL;
- } ccparams_nr_x2_t;
-
-
-#define CCPARAMS_NR_X2_DESC(ccparams) { \
- {ENB_CONFIG_STRING_FRAME_TYPE, NULL, 0, strptr:&ccparams.frame_type, defstrval:"TDD", TYPE_STRING, 0}, \
- {ENB_CONFIG_STRING_TDD_CONFIG, NULL, 0, iptr:&ccparams.tdd_config, defintval:3, TYPE_UINT, 0}, \
- {ENB_CONFIG_STRING_TDD_CONFIG_S, NULL, 0, iptr:&ccparams.tdd_config_s, defintval:0, TYPE_UINT, 0}, \
- {ENB_CONFIG_STRING_EUTRA_BAND, NULL, 0, iptr:&ccparams.nr_band, defintval:78, TYPE_UINT, 0}, \
- {ENB_CONFIG_STRING_DOWNLINK_FREQUENCY, NULL, 0, i64ptr:(int64_t *)&ccparams.downlink_frequency, defint64val:3600000000, TYPE_UINT64, 0}, \
- {ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET, NULL, 0, iptr:&ccparams.uplink_frequency_offset, defintval:0, TYPE_INT, 0}, \
- {ENB_CONFIG_STRING_NID_CELL, NULL, 0, iptr:&ccparams.Nid_cell, defintval:0, TYPE_UINT, 0}, \
- {ENB_CONFIG_STRING_N_RB_DL, NULL, 0, iptr:&ccparams.N_RB_DL, defintval:106, TYPE_UINT, 0} \
-}
-
/*-----------------------------------------------------------------------------------------------------------------------------------------*/
/* cell configuration parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 8f5aab99a7..9a00fa1184 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -914,7 +914,9 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
#if (!defined(PRE_SCD_THREAD))
if (!NODE_IS_DU(RC.rrc[module_idP]->node_type)) {
+ void rlc_tick(int, int);
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP, module_idP);
+ rlc_tick(frameP, subframeP);
pdcp_run(&ctxt);
pdcp_mbms_run(&ctxt);
rrc_rx_tx(&ctxt, CC_id);
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index e97f1bebdd..8c4ee72380 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -3099,6 +3099,9 @@ ue_scheduler(const module_id_t module_idP,
}
}
+ void rlc_tick(int, int);
+ rlc_tick(rxFrameP % 1024, rxSubframeP);
+
//#endif
UE_mac_inst[module_idP].txFrame = txFrameP;
UE_mac_inst[module_idP].txSubframe = txSubframeP;
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
index 85f638d66d..16d306f64c 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
@@ -40,7 +40,7 @@ void nr_pdcp_entity_drb_am_recv_sdu(nr_pdcp_entity_t *_entity, char *buffer, int
{
nr_pdcp_entity_drb_am_t *entity = (nr_pdcp_entity_drb_am_t *)_entity;
int sn;
- char buf[size+2];
+ char buf[size+3];
sn = entity->common.next_nr_pdcp_tx_sn;
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
index 3a46f913e9..2ed01b5b78 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
@@ -923,3 +923,13 @@ void nr_rlc_tick(int frame, int subframe)
nr_rlc_current_time++;
}
}
+
+/* This is a hack, to compile the gNB.
+ * TODO: remove it. The solution is to cleanup cmake_targets/CMakeLists.txt
+ */
+void rlc_tick(int a, int b)
+{
+ LOG_E(RLC, "%s:%d:%s: this code should not be reached\n",
+ __FILE__, __LINE__, __FUNCTION__);
+ exit(1);
+}
diff --git a/openair2/LAYER2/rlc_v2/rlc_oai_api.c b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
index bd3eebe635..5fede07c01 100644
--- a/openair2/LAYER2/rlc_v2/rlc_oai_api.c
+++ b/openair2/LAYER2/rlc_v2/rlc_oai_api.c
@@ -177,14 +177,6 @@ mac_rlc_status_resp_t mac_rlc_status_ind(
mac_rlc_status_resp_t ret;
rlc_entity_t *rb;
- /* TODO: handle time a bit more properly */
- if (rlc_current_time_last_frame != frameP ||
- rlc_current_time_last_subframe != subframeP) {
- rlc_current_time++;
- rlc_current_time_last_frame = frameP;
- rlc_current_time_last_subframe = subframeP;
- }
-
rlc_manager_lock(rlc_ue_manager);
ue = rlc_manager_get_ue(rlc_ue_manager, rntiP);
@@ -244,14 +236,6 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(
exit(1);
}
- /* TODO: handle time a bit more properly */
- if (rlc_current_time_last_frame != frameP ||
- rlc_current_time_last_subframe != subframeP) {
- rlc_current_time++;
- rlc_current_time_last_frame = frameP;
- rlc_current_time_last_subframe = subframeP;
- }
-
rlc_manager_lock(rlc_ue_manager);
ue = rlc_manager_get_ue(rlc_ue_manager, rntiP);
@@ -1028,3 +1012,27 @@ rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const x)
return RLC_OP_STATUS_OK;
}
+
+void rlc_tick(int frame, int subframe)
+{
+ int expected_next_frame;
+ int expected_next_subframe;
+
+ if (frame != rlc_current_time_last_frame ||
+ subframe != rlc_current_time_last_subframe) {
+ /* warn if discontinuity in ticks */
+ expected_next_subframe = (rlc_current_time_last_subframe + 1) % 10;
+ if (expected_next_subframe == 0)
+ expected_next_frame = (rlc_current_time_last_frame + 1) % 1024;
+ else
+ expected_next_frame = rlc_current_time_last_frame;
+ if (expected_next_frame != frame || expected_next_subframe != subframe)
+ LOG_W(RLC, "rlc_tick: discontinuity (expected %d.%d, got %d.%d)\n",
+ expected_next_frame, expected_next_subframe,
+ frame, subframe);
+
+ rlc_current_time++;
+ rlc_current_time_last_frame = frame;
+ rlc_current_time_last_subframe = subframe;
+ }
+}
diff --git a/openair2/X2AP/x2ap_eNB.c b/openair2/X2AP/x2ap_eNB.c
index 4789efeebe..7e4f735705 100644
--- a/openair2/X2AP/x2ap_eNB.c
+++ b/openair2/X2AP/x2ap_eNB.c
@@ -310,14 +310,21 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
x2ap_register_eNB->t_dc_overall);
for (int i = 0; i< x2ap_register_eNB->num_cc; i++) {
- new_instance->eutra_band[i] = x2ap_register_eNB->eutra_band[i];
- new_instance->downlink_frequency[i] = x2ap_register_eNB->downlink_frequency[i];
+ if(new_instance->cell_type == CELL_MACRO_GNB){
+ new_instance->nr_band[i] = x2ap_register_eNB->nr_band[i];
+ new_instance->tdd_nRARFCN[i] = x2ap_register_eNB->nrARFCN[i];
+ }
+ else{
+ new_instance->eutra_band[i] = x2ap_register_eNB->eutra_band[i];
+ new_instance->downlink_frequency[i] = x2ap_register_eNB->downlink_frequency[i];
+ new_instance->fdd_earfcn_DL[i] = x2ap_register_eNB->fdd_earfcn_DL[i];
+ new_instance->fdd_earfcn_UL[i] = x2ap_register_eNB->fdd_earfcn_UL[i];
+ }
+
new_instance->uplink_frequency_offset[i] = x2ap_register_eNB->uplink_frequency_offset[i];
new_instance->Nid_cell[i] = x2ap_register_eNB->Nid_cell[i];
new_instance->N_RB_DL[i] = x2ap_register_eNB->N_RB_DL[i];
new_instance->frame_type[i] = x2ap_register_eNB->frame_type[i];
- new_instance->fdd_earfcn_DL[i] = x2ap_register_eNB->fdd_earfcn_DL[i];
- new_instance->fdd_earfcn_UL[i] = x2ap_register_eNB->fdd_earfcn_UL[i];
}
DevCheck(x2ap_register_eNB->nb_x2 <= X2AP_MAX_NB_ENB_IP_ADDRESS,
diff --git a/openair2/X2AP/x2ap_eNB_defs.h b/openair2/X2AP/x2ap_eNB_defs.h
index 3d8efd8cd4..063302d03a 100644
--- a/openair2/X2AP/x2ap_eNB_defs.h
+++ b/openair2/X2AP/x2ap_eNB_defs.h
@@ -179,6 +179,7 @@ typedef struct x2ap_eNB_instance_s {
uint32_t specialSubframe[MAX_NUM_CCs];
//#ifdef Rel15
+ int32_t nr_band[MAX_NUM_CCs];
uint32_t tdd_nRARFCN[MAX_NUM_CCs];
int16_t nr_SCS[MAX_NUM_CCs];
//#endif
diff --git a/openair2/X2AP/x2ap_eNB_generate_messages.c b/openair2/X2AP/x2ap_eNB_generate_messages.c
index 1e549d8cbe..e066535df9 100644
--- a/openair2/X2AP/x2ap_eNB_generate_messages.c
+++ b/openair2/X2AP/x2ap_eNB_generate_messages.c
@@ -39,7 +39,6 @@
#include "x2ap_ids.h"
#include "x2ap_eNB_itti_messaging.h"
-#include "X2AP_SupportedSULFreqBandItem.h"
#include "msc.h"
#include "assertions.h"
@@ -1236,7 +1235,6 @@ int x2ap_gNB_generate_ENDC_x2_setup_request(
X2AP_En_gNB_ENDCX2SetupReqIEs_t *ie_GNB_ENDC;
X2AP_PLMN_Identity_t *plmn;
ServedNRcellsENDCX2ManagementList__Member *servedCellMember;
- X2AP_SupportedSULFreqBandItem_t *SULFreqBandItem;
uint8_t *buffer;
uint32_t len;
@@ -1284,8 +1282,8 @@ MCC_MNC_TO_PLMNID(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length
ie_GNB_ENDC->value.present = X2AP_En_gNB_ENDCX2SetupReqIEs__value_PR_ServedNRcellsENDCX2ManagementList;
{
- for (int i = 0; inum_cc; i++){
- servedCellMember = (ServedNRcellsENDCX2ManagementList__Member *)calloc(1,sizeof(ServedNRcellsENDCX2ManagementList__Member));
+ for (int i = 0; inum_cc; i++){
+ servedCellMember = (ServedNRcellsENDCX2ManagementList__Member *)calloc(1,sizeof(ServedNRcellsENDCX2ManagementList__Member));
{
servedCellMember->servedNRCellInfo.nrpCI = instance_p->Nid_cell[i];
@@ -1299,60 +1297,63 @@ MCC_MNC_TO_PLMNID(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length
NR_FIVEGS_TAC_ID_TO_BIT_STRING(instance_p->tac, servedCellMember->servedNRCellInfo.fiveGS_TAC);
X2AP_INFO("TAC: %d -> %02x%02x%02x\n", instance_p->tac,
- servedCellMember->servedNRCellInfo.fiveGS_TAC->buf[0],
- servedCellMember->servedNRCellInfo.fiveGS_TAC->buf[1],
- servedCellMember->servedNRCellInfo.fiveGS_TAC->buf[2]);
+ servedCellMember->servedNRCellInfo.fiveGS_TAC->buf[0],
+ servedCellMember->servedNRCellInfo.fiveGS_TAC->buf[1],
+ servedCellMember->servedNRCellInfo.fiveGS_TAC->buf[2]);
plmn = (X2AP_PLMN_Identity_t *)calloc(1,sizeof(X2AP_PLMN_Identity_t));
{
MCC_MNC_TO_PLMNID(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, plmn);
ASN_SEQUENCE_ADD(&servedCellMember->servedNRCellInfo.broadcastPLMNs.list, plmn);
}
-
- if (instance_p->frame_type[i] == TDD) {
+ if (instance_p->frame_type[i] == TDD) {
X2AP_FreqBandNrItem_t *freq_band;
servedCellMember->servedNRCellInfo.nrModeInfo.present = X2AP_ServedNRCell_Information__nrModeInfo_PR_tdd;
- servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nRFreqInfo.nRARFCN = 0; //instance_p->tdd_nRARFCN[i];
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nRFreqInfo.nRARFCN = instance_p->tdd_nRARFCN[i];
/* addition of Frequency Band List */
freq_band = calloc(1, sizeof(X2AP_FreqBandNrItem_t));
if (freq_band == NULL)
exit(1);
- freq_band->freqBandIndicatorNr = instance_p->eutra_band[0];
-
- SULFreqBandItem = calloc(1, sizeof(X2AP_SupportedSULFreqBandItem_t));
- SULFreqBandItem->freqBandIndicatorNr=80; /* TODO: put correct value */
- ASN_SEQUENCE_ADD(&freq_band->supportedSULBandList.list, SULFreqBandItem);
+ freq_band->freqBandIndicatorNr = instance_p->nr_band[i];
ASN_SEQUENCE_ADD(&servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nRFreqInfo.freqBandListNr, freq_band);
switch (instance_p->N_RB_DL[i]) {
- case 50:
- //This is not correct. Just to be able to test X2 only using an eNB instead of gNB
- servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb51;
+ case 32:
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb32;
+ break;
+ case 66:
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb66;
+ break;
+ case 93 :
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb93;
+ break;
+ case 106:
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb106;
+ break;
+ case 121:
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb121;
+ break;
+ case 217:
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb217;
+ break;
+ case 273:
+ servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb273;
+ break;
+ /*More cases to be added */
+ default:
+ AssertFatal(0,"Failed: Check value for N_RB_DL/N_RB_UL");
break;
- case 93 :
- servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb93;
- break;
- case 106:
- servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb106;
- break;
- case 121:
- servedCellMember->servedNRCellInfo.nrModeInfo.choice.tdd.nR_TxBW.nRNRB = X2AP_NRNRB_nrb121;
- break;
- /*More cases to be added */
- default:
- AssertFatal(0,"Failed: Check value for N_RB_DL/N_RB_UL");
- break;
- }
- }
+ }
+ }
else {
AssertFatal(0,"ENDC_X2Setuprequest not supported for FDD!");
}
- /*Don't know where to extract the value of measurementTimingConfiguration from. Set it to 0 for now */
- INT8_TO_OCTET_STRING(0, &servedCellMember->servedNRCellInfo.measurementTimingConfiguration);
+ /*Don't know where to extract the value of measurementTimingConfiguration from. Set it to 0 for now */
+ INT8_TO_OCTET_STRING(0, &servedCellMember->servedNRCellInfo.measurementTimingConfiguration);
}
ASN_SEQUENCE_ADD(&ie_GNB_ENDC->value.choice.ServedNRcellsENDCX2ManagementList.list, servedCellMember);
- }
}
+ }
ASN_SEQUENCE_ADD(&ie->value.choice.InitiatingNodeType_EndcX2Setup.choice.init_en_gNB.list, ie_GNB_ENDC);
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index e3b9797105..4e3a661273 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -2017,6 +2017,7 @@ void *ru_thread_synch(void *arg) {
#if defined(PRE_SCD_THREAD)
void *pre_scd_thread( void *param ) {
+ void rlc_tick(int, int);
static int eNB_pre_scd_status;
protocol_ctxt_t ctxt;
int frame;
@@ -2051,6 +2052,7 @@ void *pre_scd_thread( void *param ) {
AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"mutex_unlock returns %d\n",ret);
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, Mod_id, ENB_FLAG_YES,
NOT_A_RNTI, frame, subframe,Mod_id);
+ rlc_tick(frame, subframe);
pdcp_run(&ctxt);
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {