From 202862bce15924eb42eca03bdc2119e7caacdf0a Mon Sep 17 00:00:00 2001 From: David Kim Date: Fri, 19 Nov 2021 13:42:34 -0800 Subject: [PATCH 01/11] Updated for multiple UEs CBRA procedure. 1. Added rnti filter for multiple UEs. 2. Adjusted mode offset for SA mode. --- executables/nr-ue.c | 6 ++++++ executables/nr-uesoftmodem.c | 2 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 14 ++++++++++++++ openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 15 ++++++++++++++- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 9d980c666c..d08f7cb0bd 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -492,6 +492,12 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) nr_ue_ul_indication(&ul_info); check_nr_prach(mac, &ul_info, &prach_resources); } + if(IS_SOFTMODEM_NOS1 || get_softmodem_params()->sa) { + NR_UE_MAC_INST_t *mac = get_mac_inst(0); + protocol_ctxt_t ctxt; + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_NO, mac->crnti, frame, slot, 0); + pdcp_run(&ctxt); + } process_queued_nr_nfapi_msgs(mac, sfn_slot); free(slot_ind); slot_ind = NULL; diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index f6f28d8cf2..20ae10beca 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -458,7 +458,7 @@ int main( int argc, char **argv ) { init_NR_UE(1,rrc_config_path); - int mode_offset = get_softmodem_params()->nsa ? NUMBER_OF_UE_MAX : 0; + int mode_offset = get_softmodem_params()->nsa ? NUMBER_OF_UE_MAX : 1; uint16_t node_number = get_softmodem_params()->node_number; ue_id_g = (node_number == 0) ? 0 : node_number - 2; AssertFatal(ue_id_g >= 0, "UE id is expected to be nonnegative.\n"); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index d330060b79..711e81f7f6 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -599,6 +599,15 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci->dci_format]; + if (get_softmodem_params()->sa) { + if (((dci->rnti != 0xFFFF) && (mac->ra.ra_state <= GENERATE_PREAMBLE)) || + ((dci->rnti != 0x10b) && (mac->ra.ra_state == WAIT_RAR)) || + ((dci->rnti != mac->ra.t_crnti ) && (mac->ra.ra_state == WAIT_CONTENTION_RESOLUTION)) || + ((dci->rnti != mac->crnti ) && (mac->ra.ra_state == RA_SUCCEEDED))) { + return -1; + } + } + LOG_D(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n", dci->rnti,dci->dci_format,dci->n_CCE,dci->payloadSize,*(unsigned long long*)dci->payloadBits); int8_t ret = nr_extract_dci_info(mac, dci->dci_format, dci->payloadSize, dci->rnti, (uint64_t *)dci->payloadBits, def_dci_pdu_rel15); @@ -3795,6 +3804,11 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t LOG_D(NR_MAC, "In %s:[%d.%d]: [UE %d][RAPROC] invoking MAC for received RAR (current preamble %d)\n", __FUNCTION__, frame, slot, mod_id, preamble_index); + if (ra->RA_RAPID_found == 1) + { + return -1; + } + while (1) { n_subheaders++; if (rarh->T == 1) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index a63b5efc30..7c880db211 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -278,6 +278,12 @@ static bool is_my_dci(NR_UE_MAC_INST_t *mac, nfapi_nr_dl_dci_pdu_t *received_pdu { if (received_pdu->RNTI != mac->crnti && mac->ra.ra_state == RA_SUCCEEDED) return false; + if (received_pdu->RNTI != mac->ra.t_crnti && mac->ra.ra_state == WAIT_CONTENTION_RESOLUTION) + return false; + if (received_pdu->RNTI != 0x10b && mac->ra.ra_state == WAIT_RAR) + return false; + if (received_pdu->RNTI != 0xFFFF && mac->ra.ra_state <= GENERATE_PREAMBLE) + return false; } return true; } @@ -316,7 +322,10 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ uint16_t num_dcis = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dcis > 0) { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + if (!dl_info->dci_ind && !pdu_idx) + { + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + } dl_info->dci_ind->SFN = dl_tti_request->SFN; dl_info->dci_ind->slot = dl_tti_request->Slot; AssertFatal(num_dcis < sizeof(dl_info->dci_ind->dci_list) / sizeof(dl_info->dci_ind->dci_list[0]), @@ -1044,6 +1053,10 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ dl_info->dci_ind->dci_list+i); fapi_nr_dci_indication_pdu_t *dci_index = dl_info->dci_ind->dci_list+i; + if (dci_index->dci_format == 7 && mac->ra.ra_state == RA_SUCCEEDED) { + LOG_D(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); + break; + } dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci_index->dci_format]; g_harq_pid = def_dci_pdu_rel15->harq_pid; LOG_D(NR_MAC, "Setting harq_pid = %d and dci_index = %d (based on format)\n", g_harq_pid, dci_index->dci_format); From 6ef81fd4b83578126ade87762d2e0860be423f01 Mon Sep 17 00:00:00 2001 From: David Kim Date: Fri, 19 Nov 2021 13:53:26 -0800 Subject: [PATCH 02/11] Updated for formatting. --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 711e81f7f6..d9fa1f1529 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -3805,9 +3805,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t LOG_D(NR_MAC, "In %s:[%d.%d]: [UE %d][RAPROC] invoking MAC for received RAR (current preamble %d)\n", __FUNCTION__, frame, slot, mod_id, preamble_index); if (ra->RA_RAPID_found == 1) - { return -1; - } while (1) { n_subheaders++; From c974609c2fd5ce019931c94126ea0cfb623a7c4c Mon Sep 17 00:00:00 2001 From: David Kim Date: Fri, 19 Nov 2021 14:31:41 -0800 Subject: [PATCH 03/11] Updated the execution condition for pdcp_run. --- executables/nr-ue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index d08f7cb0bd..96fbb9686e 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -492,7 +492,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) nr_ue_ul_indication(&ul_info); check_nr_prach(mac, &ul_info, &prach_resources); } - if(IS_SOFTMODEM_NOS1 || get_softmodem_params()->sa) { + if(!IS_SOFTMODEM_NOS1 && get_softmodem_params()->sa) { NR_UE_MAC_INST_t *mac = get_mac_inst(0); protocol_ctxt_t ctxt; PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_NO, mac->crnti, frame, slot, 0); From 37c1f1ec1db5369eed8d29dba7303e1cb1c70dc8 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 22 Nov 2021 07:24:39 -0800 Subject: [PATCH 04/11] Unnecessary filtering/changes to OAI MAC layer The filtering added in the nrue_procedures.c file are already happening in the stub function so we should be duplicating them in the NRUE MAC layer. --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index d9fa1f1529..1479df82a8 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -599,15 +599,6 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci->dci_format]; - if (get_softmodem_params()->sa) { - if (((dci->rnti != 0xFFFF) && (mac->ra.ra_state <= GENERATE_PREAMBLE)) || - ((dci->rnti != 0x10b) && (mac->ra.ra_state == WAIT_RAR)) || - ((dci->rnti != mac->ra.t_crnti ) && (mac->ra.ra_state == WAIT_CONTENTION_RESOLUTION)) || - ((dci->rnti != mac->crnti ) && (mac->ra.ra_state == RA_SUCCEEDED))) { - return -1; - } - } - LOG_D(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n", dci->rnti,dci->dci_format,dci->n_CCE,dci->payloadSize,*(unsigned long long*)dci->payloadBits); int8_t ret = nr_extract_dci_info(mac, dci->dci_format, dci->payloadSize, dci->rnti, (uint64_t *)dci->payloadBits, def_dci_pdu_rel15); From fc140b20072b5f710c5281cec5c2cdfe369fa0a6 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 22 Nov 2021 07:40:36 -0800 Subject: [PATCH 05/11] Allocating for the number of DCIs and changing pdu_idx check --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index dab83672cb..52f6db77b4 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -322,9 +322,9 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ uint16_t num_dcis = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dcis > 0) { - if (!dl_info->dci_ind && !pdu_idx) + if (!dl_info->dci_ind && pdu_idx == 0) { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + dl_info->dci_ind = CALLOC(num_dcis, sizeof(fapi_nr_dci_indication_t)); } dl_info->dci_ind->SFN = dl_tti_request->SFN; dl_info->dci_ind->slot = dl_tti_request->Slot; From 6d556607d4cea92602afcccdddc5a8e70918ec72 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 22 Nov 2021 12:34:18 -0800 Subject: [PATCH 06/11] Reverting incorrect CALLOC --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 52f6db77b4..be1676fdd1 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -324,7 +324,7 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ { if (!dl_info->dci_ind && pdu_idx == 0) { - dl_info->dci_ind = CALLOC(num_dcis, sizeof(fapi_nr_dci_indication_t)); + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); } dl_info->dci_ind->SFN = dl_tti_request->SFN; dl_info->dci_ind->slot = dl_tti_request->Slot; From 23582a448384238c86be0ef2ee272fafa8fb98c9 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 22 Nov 2021 16:31:47 -0800 Subject: [PATCH 07/11] Adding more error checking --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 38 ++++++++------------- 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index e61662c63a..96f7490cd5 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -300,11 +300,7 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ int pdu_idx = 0; int num_pdus = dl_tti_request->dl_tti_request_body.nPDUs; - if (num_pdus <= 0) - { - LOG_E(NR_PHY, "%s: dl_tti_request number of PDUS <= 0\n", __FUNCTION__); - abort(); - } + AssertFatal(num_pdus >= 0, "Invalid dl_tti_request number of PDUS\n"); for (int i = 0; i < num_pdus; i++) { @@ -322,13 +318,13 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ uint16_t num_dcis = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dcis > 0) { - if (!dl_info->dci_ind && pdu_idx == 0) + if (!dl_info->dci_ind) { dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); } dl_info->dci_ind->SFN = dl_tti_request->SFN; dl_info->dci_ind->slot = dl_tti_request->Slot; - AssertFatal(num_dcis < sizeof(dl_info->dci_ind->dci_list) / sizeof(dl_info->dci_ind->dci_list[0]), + AssertFatal(num_dcis <= sizeof(dl_info->dci_ind->dci_list) / sizeof(dl_info->dci_ind->dci_list[0]), "The number of DCIs is greater than dci_list"); for (int j = 0; j < num_dcis; j++) { @@ -417,13 +413,12 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi { NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id); int num_pdus = tx_data_request->Number_of_PDUs; - if (num_pdus <= 0) - { - LOG_E(NR_PHY, "%s: tx_data_request number of PDUS <= 0\n", __FUNCTION__); - abort(); - } + AssertFatal(num_pdus >= 0, "Invalid tx_data_request number of PDUS\n"); - dl_info->rx_ind = CALLOC(1, sizeof(fapi_nr_rx_indication_t)); + if (!dl_info->rx_ind) + { + dl_info->rx_ind = CALLOC(1, sizeof(fapi_nr_rx_indication_t)); + } AssertFatal(dl_info->rx_ind != NULL, "%s: Out of memory in calloc", __FUNCTION__); fapi_nr_rx_indication_t *rx_ind = dl_info->rx_ind; rx_ind->sfn = tx_data_request->SFN; @@ -468,11 +463,7 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n int pdu_idx = 0; int num_pdus = ul_dci_req->numPdus; - if (num_pdus <= 0) - { - LOG_E(NR_PHY, "%s: ul_dci_request number of PDUS <= 0\n", __FUNCTION__); - abort(); - } + AssertFatal(num_pdus >= 0, "Invalid ul_dci_request number of PDUS\n"); for (int i = 0; i < num_pdus; i++) { @@ -484,7 +475,10 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n uint16_t num_dci = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dci > 0) { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + if (!dl_info->dci_ind) + { + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + } AssertFatal(dl_info->dci_ind != NULL, "%s: Out of memory in calloc", __FUNCTION__); dl_info->dci_ind->SFN = ul_dci_req->SFN; dl_info->dci_ind->slot = ul_dci_req->Slot; @@ -559,11 +553,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n { NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id); int num_pdus = ul_tti_req->n_pdus; - if (num_pdus <= 0) - { - LOG_E(NR_PHY, "%s: ul_tti_request number of PDUS <= 0\n", __FUNCTION__); - abort(); - } + AssertFatal(num_pdus >= 0, "Invalid ul_tti_request number of PDUS\n"); AssertFatal(num_pdus <= sizeof(ul_tti_req->pdus_list) / sizeof(ul_tti_req->pdus_list[0]), "Too many pdus %d in ul_tti_req\n", num_pdus); From 97eda100c732e966e2d53992da22f79b1d232776 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 23 Nov 2021 07:33:31 -0800 Subject: [PATCH 08/11] Removed logic around CALLOCs When we check if the pointer is NULL before CALLOCing, then the gNB will crash. It seems that we are mostlikely leaking memeory since the gNB only crashes with the old change. By reverting these changes, the gNB does not crash. We are seeing UE-to-UE IP traffic on this commit when the tunnel interfaces are established (~50% of the time). --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 96f7490cd5..bfe90e57dc 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -318,10 +318,7 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ uint16_t num_dcis = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dcis > 0) { - if (!dl_info->dci_ind) - { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); - } + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); dl_info->dci_ind->SFN = dl_tti_request->SFN; dl_info->dci_ind->slot = dl_tti_request->Slot; AssertFatal(num_dcis <= sizeof(dl_info->dci_ind->dci_list) / sizeof(dl_info->dci_ind->dci_list[0]), @@ -415,10 +412,7 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi int num_pdus = tx_data_request->Number_of_PDUs; AssertFatal(num_pdus >= 0, "Invalid tx_data_request number of PDUS\n"); - if (!dl_info->rx_ind) - { - dl_info->rx_ind = CALLOC(1, sizeof(fapi_nr_rx_indication_t)); - } + dl_info->rx_ind = CALLOC(1, sizeof(fapi_nr_rx_indication_t)); AssertFatal(dl_info->rx_ind != NULL, "%s: Out of memory in calloc", __FUNCTION__); fapi_nr_rx_indication_t *rx_ind = dl_info->rx_ind; rx_ind->sfn = tx_data_request->SFN; @@ -475,10 +469,7 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n uint16_t num_dci = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dci > 0) { - if (!dl_info->dci_ind) - { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); - } + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); AssertFatal(dl_info->dci_ind != NULL, "%s: Out of memory in calloc", __FUNCTION__); dl_info->dci_ind->SFN = ul_dci_req->SFN; dl_info->dci_ind->slot = ul_dci_req->Slot; From dd891537a723fe874002c57431022215a441553f Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 23 Nov 2021 12:37:22 -0800 Subject: [PATCH 09/11] Checking for pointers to be NULL before allocating memory --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index bfe90e57dc..4647bb0844 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -318,7 +318,10 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ uint16_t num_dcis = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dcis > 0) { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + if (!dl_info->dci_ind) + { + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + } dl_info->dci_ind->SFN = dl_tti_request->SFN; dl_info->dci_ind->slot = dl_tti_request->Slot; AssertFatal(num_dcis <= sizeof(dl_info->dci_ind->dci_list) / sizeof(dl_info->dci_ind->dci_list[0]), @@ -362,7 +365,10 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ will be freed after handling. This is why the PDU index will always be zero for the RX_IND becasue we should not have more than one MIB. */ - dl_info->rx_ind = CALLOC(1, sizeof(*dl_info->rx_ind)); + if (!dl_info->rx_ind) + { + dl_info->rx_ind = CALLOC(1, sizeof(*dl_info->rx_ind)); + } fapi_nr_rx_indication_t *rx_ind = dl_info->rx_ind; rx_ind->sfn = dl_tti_request->SFN; rx_ind->slot = dl_tti_request->Slot; @@ -412,7 +418,10 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi int num_pdus = tx_data_request->Number_of_PDUs; AssertFatal(num_pdus >= 0, "Invalid tx_data_request number of PDUS\n"); - dl_info->rx_ind = CALLOC(1, sizeof(fapi_nr_rx_indication_t)); + if (!dl_info->rx_ind) + { + dl_info->rx_ind = CALLOC(1, sizeof(fapi_nr_rx_indication_t)); + } AssertFatal(dl_info->rx_ind != NULL, "%s: Out of memory in calloc", __FUNCTION__); fapi_nr_rx_indication_t *rx_ind = dl_info->rx_ind; rx_ind->sfn = tx_data_request->SFN; @@ -469,7 +478,10 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n uint16_t num_dci = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dci > 0) { - dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + if (!dl_info->dci_ind) + { + dl_info->dci_ind = CALLOC(1, sizeof(fapi_nr_dci_indication_t)); + } AssertFatal(dl_info->dci_ind != NULL, "%s: Out of memory in calloc", __FUNCTION__); dl_info->dci_ind->SFN = ul_dci_req->SFN; dl_info->dci_ind->slot = ul_dci_req->Slot; From cf9686f78713a954e4597b3ba9438a01b31e77c0 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 23 Nov 2021 14:00:30 -0800 Subject: [PATCH 10/11] Setting ctxt by mod_id instead of instance in gNB This change allows multiple UEs to have a tunnel interface brought up when connecting to the 5GCN Also, adding two new config files for mutltiple UEs to connect to the 5GCN --- .../episci/episci_nr-ue0.nfapi.conf | 52 +++++++++++++++++++ .../episci/episci_nr-ue1.nfapi.conf | 52 +++++++++++++++++++ .../LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 2 +- openair2/RRC/NR/rrc_gNB_NGAP.c | 2 +- 4 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf create mode 100644 ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf diff --git a/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf new file mode 100644 index 0000000000..f5563ecc02 --- /dev/null +++ b/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf @@ -0,0 +1,52 @@ +log_config = { + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="medium"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="full"; +}; + +uicc0 = { +imsi = "208950000000031"; +key = "0c0a34601d4f07677303652c0462535b"; +opc= "63bfa50ee6523365ff14c1f45f88737d"; +dnn= "oai"; +nssai_sst=222; +nssai_sd=123; +} + +L1s = ( + { + num_cc = 1; + tr_n_preference = "nfapi"; + local_n_if_name = "ens3"; + remote_n_address = "127.0.0.1"; //Proxy IP + local_n_address = "127.0.0.1"; + local_n_portc = 50600; + remote_n_portc = 50601; + local_n_portd = 50610; + remote_n_portd = 50611; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 90 + att_rx = 0; + bands = [7,38,42,43]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; + } +); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf new file mode 100644 index 0000000000..5df3ccf6cc --- /dev/null +++ b/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf @@ -0,0 +1,52 @@ +log_config = { + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="medium"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="full"; +}; + +uicc0 = { +imsi = "208950000000032"; +key = "0c0a34601d4f07677303652c0462535b"; +opc= "63bfa50ee6523365ff14c1f45f88737d"; +dnn= "oai"; +nssai_sst=222; +nssai_sd=123; +} + +L1s = ( + { + num_cc = 1; + tr_n_preference = "nfapi"; + local_n_if_name = "ens3"; + remote_n_address = "127.0.0.1"; //Proxy IP + local_n_address = "127.0.0.1"; + local_n_portc = 50600; + remote_n_portc = 50601; + local_n_portd = 50610; + remote_n_portd = 50611; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 90 + att_rx = 0; + bands = [7,38,42,43]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; + } +); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index b49d75b635..05782ccfba 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -851,7 +851,7 @@ void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t frame, slot, &UE_info->list, - 2, + MAX_MOBILES_PER_GNB, n_rb_sched, rballoc_mask); } diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index 60ee99a172..d4f3f23664 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -1053,7 +1053,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( uint8_t nb_pdusessions_tosetup = NGAP_PDUSESSION_SETUP_REQ(msg_p).nb_pdusessions_tosetup; pdu_sessions_done = 0; - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0); + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, GNB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0, 0); for (int i = 0; i < NR_NB_RB_MAX - 3; i++) { if(ue_context_p->ue_context.pduSession[i].status >= PDU_SESSION_STATUS_DONE) continue; From d7b23238da9b21d5e4ce96063d8d3f7b5e421b1c Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 23 Nov 2021 14:12:45 -0800 Subject: [PATCH 11/11] Removing unnecessary filtering in NRUE MAC layer --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 6687904cfe..c6d3d627e0 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -3796,9 +3796,6 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t LOG_D(NR_MAC, "In %s:[%d.%d]: [UE %d][RAPROC] invoking MAC for received RAR (current preamble %d)\n", __FUNCTION__, frame, slot, mod_id, preamble_index); - if (ra->RA_RAPID_found == 1) - return -1; - while (1) { n_subheaders++; if (rarh->T == 1) {