From 3b4df11078f252015a54d0c157829eb890b46290 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:51:07 +0200 Subject: [PATCH 01/21] Remove aerial_phy_slot_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 100 --------------------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 3 - 3 files changed, 1 insertion(+), 104 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index 81d91c8265..be175254f8 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -54,7 +54,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->port = p7_vnf->local_port; p7_vnf->config->sync_indication = &aerial_phy_sync_indication; - p7_vnf->config->slot_indication = &aerial_phy_slot_indication; + p7_vnf->config->slot_indication = NULL; p7_vnf->config->harq_indication = &aerial_phy_harq_indication; p7_vnf->config->nr_crc_indication = &aerial_phy_nr_crc_indication; p7_vnf->config->nr_rx_data_indication = &aerial_phy_nr_rx_data_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 790df64f94..aa4f1a9493 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -37,82 +37,6 @@ extern RAN_CONTEXT_t RC; extern UL_RCC_IND_t UL_RCC_INFO; extern uint16_t sf_ahead; -int aerial_wake_gNB_rxtx(PHY_VARS_gNB *gNB, uint16_t sfn, uint16_t slot) -{ - struct timespec curr_t; - clock_gettime(CLOCK_MONOTONIC, &curr_t); - // NFAPI_TRACE(NFAPI_TRACE_INFO, "\n wake_gNB_rxtx before assignment sfn:%d slot:%d TIME - // %d.%d",sfn,slot,curr_t.tv_sec,curr_t.tv_nsec); - gNB_L1_proc_t *proc = &gNB->proc; - gNB_L1_rxtx_proc_t *L1_proc = (slot & 1) ? &proc->L1_proc : &proc->L1_proc_tx; - - NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; - // NFAPI_TRACE(NFAPI_TRACE_INFO, "%s(eNB:%p, sfn:%d, sf:%d)\n", __FUNCTION__, eNB, sfn, sf); - // int i; - struct timespec wait; - clock_gettime(CLOCK_REALTIME, &wait); - wait.tv_sec = 0; - wait.tv_nsec += 5000L; - // wait.tv_nsec = 0; - // wake up TX for subframe n+sf_ahead - // lock the TX mutex and make sure the thread is ready - if (pthread_mutex_timedlock(&L1_proc->mutex, &wait) != 0) { - LOG_E(PHY, "[gNB] ERROR pthread_mutex_lock for gNB RXTX thread %d (IC %d)\n", L1_proc->slot_rx & 1, L1_proc->instance_cnt); - exit_fun("error locking mutex_rxtx"); - return (-1); - } - - { - static uint16_t old_slot = 0; - static uint16_t old_sfn = 0; - proc->slot_rx = old_slot; - proc->frame_rx = old_sfn; - // Try to be 1 frame back - old_slot = slot; - old_sfn = sfn; - // NFAPI_TRACE(NFAPI_TRACE_INFO, "\n wake_gNB_rxtx after assignment sfn:%d slot:%d",proc->frame_rx,proc->slot_rx); - if (old_slot == 0 && old_sfn % 100 == 0) - LOG_W(PHY, - "[gNB] sfn/slot:%d%d old_sfn/slot:%d%d proc[rx:%d%d]\n", - sfn, - slot, - old_sfn, - old_slot, - proc->frame_rx, - proc->slot_rx); - } - - ++L1_proc->instance_cnt; - // LOG_D( PHY,"[VNF-subframe_ind] sfn/sf:%d:%d proc[frame_rx:%d subframe_rx:%d] L1_proc->instance_cnt_rxtx:%d \n", sfn, sf, - // proc->frame_rx, proc->subframe_rx, L1_proc->instance_cnt_rxtx); - // We have just received and processed the common part of a subframe, say n. - // TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired - // transmitted timestamp of the next TX slot (first). - // The last (TS_rx mod samples_per_frame) was n*samples_per_tti, - // we want to generate subframe (n+N), so TS_tx = TX_rx+N*samples_per_tti, - // and proc->subframe_tx = proc->subframe_rx+sf_ahead - L1_proc->timestamp_tx = proc->timestamp_rx + (gNB->if_inst->sl_ahead * fp->samples_per_subframe); - L1_proc->frame_rx = proc->frame_rx; - L1_proc->slot_rx = proc->slot_rx; - L1_proc->frame_tx = (L1_proc->slot_rx > (19 - gNB->if_inst->sl_ahead)) ? (L1_proc->frame_rx + 1) & 1023 : L1_proc->frame_rx; - L1_proc->slot_tx = (L1_proc->slot_rx + gNB->if_inst->sl_ahead) % 20; - - // LOG_I(PHY, "sfn/sf:%d%d proc[rx:%d%d] rx:%d%d] About to wake rxtx thread\n\n", sfn, slot, proc->frame_rx, proc->slot_rx, - // L1_proc->frame_rx, L1_proc->slot_rx); NFAPI_TRACE(NFAPI_TRACE_INFO, "\nEntering wake_gNB_rxtx sfn %d slot - // %d\n",L1_proc->frame_rx,L1_proc->slot_rx); - // the thread can now be woken up - if (pthread_cond_signal(&L1_proc->cond) != 0) { - LOG_E(PHY, "[gNB] ERROR pthread_cond_signal for gNB RXn-TXnp4 thread\n"); - exit_fun("ERROR pthread_clond_signal"); - return (-1); - } - - // LOG_D(PHY,"%s() About to attempt pthread_mutex_unlock\n", __FUNCTION__); - pthread_mutex_unlock(&L1_proc->mutex); - // LOG_D(PHY,"%s() UNLOCKED pthread_mutex_unlock\n", __FUNCTION__); - return (0); -} - int aerialwake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf) { L1_proc_t *proc = &eNB->proc; @@ -227,30 +151,6 @@ int aerial_phy_sync_indication(struct nfapi_vnf_p7_config *config, uint8_t sync) return (0); } -int aerial_phy_slot_indication(struct nfapi_vnf_p7_config *config, uint16_t phy_id, uint16_t sfn, uint16_t slot) -{ - static uint8_t first_time = 1; - - if (first_time) { - NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] slot indication %d\n", NFAPI_SFNSLOT2DEC(sfn, slot)); - first_time = 0; - } - - if (RC.gNB && RC.gNB[0]->configured) { - // uint16_t sfn = NFAPI_SFNSF2SFN(sfn_sf); - // uint16_t sf = NFAPI_SFNSF2SF(sfn_sf); - LOG_D(PHY, "[VNF] slot indication sfn:%d slot:%d\n", sfn, slot); - aerial_wake_gNB_rxtx(RC.gNB[0], sfn, slot); // DONE: find NR equivalent - } else { - NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] %s() RC.gNB:%p\n", __FUNCTION__, RC.gNB); - - if (RC.gNB) - NFAPI_TRACE(NFAPI_TRACE_INFO, "RC.gNB[0]->configured:%d\n", RC.gNB[0]->configured); - } - - return 0; -} - int aerial_phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indication_t *ind) { struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 7ea5e24569..942747993b 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -180,10 +180,7 @@ typedef struct { } vnf_info; -int aerial_wake_gNB_rxtx(PHY_VARS_gNB *gNB, uint16_t sfn, uint16_t slot); -int aerial_wake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf); int aerial_phy_sync_indication(struct nfapi_vnf_p7_config *config, uint8_t sync); -int aerial_phy_slot_indication(struct nfapi_vnf_p7_config *config, uint16_t phy_id, uint16_t sfn, uint16_t slot); int aerial_phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indication_t *ind); int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); From 24c8e6c5c1f52741f4d3f1c3b4b17f8a1bfeb6cf Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:52:06 +0200 Subject: [PATCH 02/21] Remove aerial_phy_sync_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 15 --------------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index be175254f8..cf04176665 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -53,7 +53,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) init_queue(&gnb_slot_ind_queue); p7_vnf->config->port = p7_vnf->local_port; - p7_vnf->config->sync_indication = &aerial_phy_sync_indication; + p7_vnf->config->sync_indication = NULL; p7_vnf->config->slot_indication = NULL; p7_vnf->config->harq_indication = &aerial_phy_harq_indication; p7_vnf->config->nr_crc_indication = &aerial_phy_nr_crc_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index aa4f1a9493..5d446f7b00 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -136,21 +136,6 @@ extern pthread_cond_t nfapi_sync_cond; extern pthread_mutex_t nfapi_sync_mutex; extern int nfapi_sync_var; -int aerial_phy_sync_indication(struct nfapi_vnf_p7_config *config, uint8_t sync) -{ - // NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] SYNC %s\n", sync==1 ? "ACHIEVED" : "LOST"); - - if (sync == 1 && nfapi_sync_var != 0) { - NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] Signal to OAI main code that it can go\n"); - pthread_mutex_lock(&nfapi_sync_mutex); - nfapi_sync_var = 0; - pthread_cond_broadcast(&nfapi_sync_cond); - pthread_mutex_unlock(&nfapi_sync_mutex); - } - - return (0); -} - int aerial_phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indication_t *ind) { struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 942747993b..f391b22e46 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -180,7 +180,6 @@ typedef struct { } vnf_info; -int aerial_phy_sync_indication(struct nfapi_vnf_p7_config *config, uint8_t sync); int aerial_phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indication_t *ind); int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); From 8888a6bd70ee5d4c9a5288bdaebac361d3065730 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:52:54 +0200 Subject: [PATCH 03/21] Remove aerial_phy_harq_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 41 ---------------------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 43 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index cf04176665..ea1a70a56f 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -55,7 +55,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->port = p7_vnf->local_port; p7_vnf->config->sync_indication = NULL; p7_vnf->config->slot_indication = NULL; - p7_vnf->config->harq_indication = &aerial_phy_harq_indication; + p7_vnf->config->harq_indication = NULL; p7_vnf->config->nr_crc_indication = &aerial_phy_nr_crc_indication; p7_vnf->config->nr_rx_data_indication = &aerial_phy_nr_rx_data_indication; p7_vnf->config->nr_rach_indication = &aerial_phy_nr_rach_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 5d446f7b00..26f87bc1eb 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -136,47 +136,6 @@ extern pthread_cond_t nfapi_sync_cond; extern pthread_mutex_t nfapi_sync_mutex; extern int nfapi_sync_var; -int aerial_phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indication_t *ind) -{ - struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; - LOG_D(MAC, - "%s() NFAPI SFN/SF:%d number_of_harqs:%u\n", - __FUNCTION__, - NFAPI_SFNSF2DEC(ind->sfn_sf), - ind->harq_indication_body.number_of_harqs); - AssertFatal(pthread_mutex_lock(&eNB->UL_INFO_mutex) == 0, "Mutex lock failed"); - if (NFAPI_MODE == NFAPI_MODE_VNF) { - int8_t index = NFAPI_SFNSF2SF(ind->sfn_sf); - - UL_RCC_INFO.harq_ind[index] = *ind; - - assert(ind->harq_indication_body.number_of_harqs <= NFAPI_HARQ_IND_MAX_PDU); - if (ind->harq_indication_body.number_of_harqs > 0) { - UL_RCC_INFO.harq_ind[index].harq_indication_body.harq_pdu_list = - malloc(sizeof(nfapi_harq_indication_pdu_t) * NFAPI_HARQ_IND_MAX_PDU); - } - for (int i = 0; i < ind->harq_indication_body.number_of_harqs; i++) { - memcpy(&UL_RCC_INFO.harq_ind[index].harq_indication_body.harq_pdu_list[i], - &ind->harq_indication_body.harq_pdu_list[i], - sizeof(nfapi_harq_indication_pdu_t)); - } - } else { - eNB->UL_INFO.harq_ind = *ind; - eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = eNB->harq_pdu_list; - - assert(ind->harq_indication_body.number_of_harqs <= NFAPI_HARQ_IND_MAX_PDU); - for (int i = 0; i < ind->harq_indication_body.number_of_harqs; i++) { - memcpy(&eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[i], - &ind->harq_indication_body.harq_pdu_list[i], - sizeof(eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[i])); - } - } - AssertFatal(pthread_mutex_unlock(&eNB->UL_INFO_mutex) == 0, "Mutex unlock failed"); - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_harq_ind(p7_vnf->mac, ind); - return 1; -} - int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind) { if (NFAPI_MODE == NFAPI_MODE_AERIAL) { diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index f391b22e46..c5126c2ca9 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -180,7 +180,6 @@ typedef struct { } vnf_info; -int aerial_phy_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_harq_indication_t *ind); int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); From 17ed5d345e5b3657c40b29577a061d2a2e71c5e0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:55:30 +0200 Subject: [PATCH 04/21] Remove aerial_phy_srs_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 7 ------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index ea1a70a56f..d25c46a6ea 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -60,7 +60,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->nr_rx_data_indication = &aerial_phy_nr_rx_data_indication; p7_vnf->config->nr_rach_indication = &aerial_phy_nr_rach_indication; p7_vnf->config->nr_uci_indication = &aerial_phy_nr_uci_indication; - p7_vnf->config->srs_indication = &aerial_phy_srs_indication; + p7_vnf->config->srs_indication = NULL; p7_vnf->config->sr_indication = &aerial_phy_sr_indication; p7_vnf->config->cqi_indication = &aerial_phy_cqi_indication; p7_vnf->config->lbt_dl_indication = &aerial_phy_lbt_dl_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 26f87bc1eb..031ec699b0 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -370,13 +370,6 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) return 1; } -int aerial_phy_srs_indication(struct nfapi_vnf_p7_config *config, nfapi_srs_indication_t *ind) -{ - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_srs_ind(p7_vnf->mac, ind); - return 1; -} - int aerial_phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t *ind) { struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index c5126c2ca9..989544f839 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -184,7 +184,6 @@ int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind); -int aerial_phy_srs_indication(struct nfapi_vnf_p7_config *config, nfapi_srs_indication_t *ind); int aerial_phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t *ind); int aerial_phy_cqi_indication(struct nfapi_vnf_p7_config *config, nfapi_cqi_indication_t *ind); int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind); From 88d548fbc24d6a8b9d9357ffa40d5b90664c16b5 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:56:15 +0200 Subject: [PATCH 05/21] Remove aerial_phy_cqi_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 94 ---------------------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 96 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index d25c46a6ea..88ad067804 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -62,7 +62,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->nr_uci_indication = &aerial_phy_nr_uci_indication; p7_vnf->config->srs_indication = NULL; p7_vnf->config->sr_indication = &aerial_phy_sr_indication; - p7_vnf->config->cqi_indication = &aerial_phy_cqi_indication; + p7_vnf->config->cqi_indication = NULL; p7_vnf->config->lbt_dl_indication = &aerial_phy_lbt_dl_indication; p7_vnf->config->nb_harq_indication = &aerial_phy_nb_harq_indication; p7_vnf->config->nrach_indication = &aerial_phy_nrach_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 031ec699b0..a4deb3ab6e 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -433,100 +433,6 @@ int aerial_phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indica return 1; } -static bool aerial_is_ue_same(uint16_t ue_id_1, uint16_t ue_id_2) -{ - return (ue_id_1 == ue_id_2); -} - -static void aerial_analyze_cqi_pdus_for_duplicates(nfapi_cqi_indication_t *ind) -{ - uint16_t num_cqis = ind->cqi_indication_body.number_of_cqis; - assert(num_cqis <= NFAPI_CQI_IND_MAX_PDU); - for (int i = 0; i < num_cqis; i++) { - nfapi_cqi_indication_pdu_t *src_pdu = &ind->cqi_indication_body.cqi_pdu_list[i]; - - LOG_I(MAC, - "CQI_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", - i, - src_pdu->rx_ue_information.rnti, - src_pdu->ul_cqi_information.ul_cqi, - src_pdu->ul_cqi_information.channel); - - for (int j = i + 1; j < num_cqis; j++) { - uint16_t rnti_i = ind->cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti; - uint16_t rnti_j = ind->cqi_indication_body.cqi_pdu_list[j].rx_ue_information.rnti; - if (aerial_is_ue_same(rnti_i, rnti_j)) { - LOG_E(MAC, "Problem, two cqis received from a single UE for rnti %x\n", rnti_i); - // abort(); This will be fixed in merge request which handles multiple CQIs. - } - } - } -} - -int aerial_phy_cqi_indication(struct nfapi_vnf_p7_config *config, nfapi_cqi_indication_t *ind) -{ - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_cqi_ind(p7_vnf->mac, ind); - struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; - LOG_D(MAC, - "%s() NFAPI SFN/SF:%d number_of_cqis:%u\n", - __FUNCTION__, - NFAPI_SFNSF2DEC(ind->sfn_sf), - ind->cqi_indication_body.number_of_cqis); - AssertFatal(pthread_mutex_lock(&eNB->UL_INFO_mutex) == 0, "Mutex lock failed"); - if (NFAPI_MODE == NFAPI_MODE_VNF) { - int8_t index = NFAPI_SFNSF2SF(ind->sfn_sf); - - UL_RCC_INFO.cqi_ind[index] = *ind; - assert(ind->cqi_indication_body.number_of_cqis <= NFAPI_CQI_IND_MAX_PDU); - if (ind->cqi_indication_body.number_of_cqis > 0) { - UL_RCC_INFO.cqi_ind[index].cqi_indication_body.cqi_pdu_list = - malloc(sizeof(nfapi_cqi_indication_pdu_t) * NFAPI_CQI_IND_MAX_PDU); - UL_RCC_INFO.cqi_ind[index].cqi_indication_body.cqi_raw_pdu_list = - malloc(sizeof(nfapi_cqi_indication_raw_pdu_t) * NFAPI_CQI_IND_MAX_PDU); - } - - aerial_analyze_cqi_pdus_for_duplicates(ind); - - assert(ind->cqi_indication_body.number_of_cqis <= NFAPI_CQI_IND_MAX_PDU); - for (int i = 0; i < ind->cqi_indication_body.number_of_cqis; i++) { - nfapi_cqi_indication_pdu_t *src_pdu = &ind->cqi_indication_body.cqi_pdu_list[i]; - LOG_D(MAC, - "SR_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", - i, - src_pdu->rx_ue_information.rnti, - src_pdu->ul_cqi_information.ul_cqi, - src_pdu->ul_cqi_information.channel); - memcpy(&UL_RCC_INFO.cqi_ind[index].cqi_indication_body.cqi_pdu_list[i], src_pdu, sizeof(nfapi_cqi_indication_pdu_t)); - - memcpy(&UL_RCC_INFO.cqi_ind[index].cqi_indication_body.cqi_raw_pdu_list[i], - &ind->cqi_indication_body.cqi_raw_pdu_list[i], - sizeof(nfapi_cqi_indication_raw_pdu_t)); - } - } else { - nfapi_cqi_indication_t *dest_ind = &eNB->UL_INFO.cqi_ind; - *dest_ind = *ind; - dest_ind->cqi_indication_body.cqi_pdu_list = ind->cqi_indication_body.cqi_pdu_list; - dest_ind->cqi_indication_body.cqi_raw_pdu_list = ind->cqi_indication_body.cqi_raw_pdu_list; - assert(ind->cqi_indication_body.number_of_cqis <= NFAPI_CQI_IND_MAX_PDU); - for (int i = 0; i < ind->cqi_indication_body.number_of_cqis; i++) { - nfapi_cqi_indication_pdu_t *src_pdu = &ind->cqi_indication_body.cqi_pdu_list[i]; - LOG_D(MAC, - "CQI_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", - i, - src_pdu->rx_ue_information.rnti, - src_pdu->ul_cqi_information.ul_cqi, - src_pdu->ul_cqi_information.channel); - memcpy(&dest_ind->cqi_indication_body.cqi_pdu_list[i], src_pdu, sizeof(nfapi_cqi_indication_pdu_t)); - memcpy(&dest_ind->cqi_indication_body.cqi_raw_pdu_list[i], - &ind->cqi_indication_body.cqi_raw_pdu_list[i], - sizeof(nfapi_cqi_indication_raw_pdu_t)); - } - } - AssertFatal(pthread_mutex_unlock(&eNB->UL_INFO_mutex) == 0, "Mutex unlock failed"); - return 1; -} - int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind) { // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 989544f839..9a6bc75363 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -185,7 +185,6 @@ int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind); int aerial_phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t *ind); -int aerial_phy_cqi_indication(struct nfapi_vnf_p7_config *config, nfapi_cqi_indication_t *ind); int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind); int aerial_phy_nb_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_nb_harq_indication_t *ind); int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind); From f1cbbc9f838c6d9dadc9428efd5674600f8e82b5 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:57:00 +0200 Subject: [PATCH 06/21] Remove aerial_phy_sr_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 63 ---------------------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 65 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index 88ad067804..55ee5672f9 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -61,7 +61,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->nr_rach_indication = &aerial_phy_nr_rach_indication; p7_vnf->config->nr_uci_indication = &aerial_phy_nr_uci_indication; p7_vnf->config->srs_indication = NULL; - p7_vnf->config->sr_indication = &aerial_phy_sr_indication; + p7_vnf->config->sr_indication = NULL; p7_vnf->config->cqi_indication = NULL; p7_vnf->config->lbt_dl_indication = &aerial_phy_lbt_dl_indication; p7_vnf->config->nb_harq_indication = &aerial_phy_nb_harq_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index a4deb3ab6e..e043a598e3 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -370,69 +370,6 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) return 1; } -int aerial_phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t *ind) -{ - struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0]; - LOG_D(MAC, "%s() NFAPI SFN/SF:%d srs:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->sr_indication_body.number_of_srs); - AssertFatal(pthread_mutex_lock(&eNB->UL_INFO_mutex) == 0, "Mutex lock failed"); - if (NFAPI_MODE == NFAPI_MODE_VNF) { - int8_t index = NFAPI_SFNSF2SF(ind->sfn_sf); - - UL_RCC_INFO.sr_ind[index] = *ind; - LOG_D(MAC, - "%s() UL_INFO[%d].sr_ind.sr_indication_body.number_of_srs:%d\n", - __FUNCTION__, - index, - eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs); - if (ind->sr_indication_body.number_of_srs > 0) { - assert(ind->sr_indication_body.number_of_srs <= NFAPI_SR_IND_MAX_PDU); - UL_RCC_INFO.sr_ind[index].sr_indication_body.sr_pdu_list = malloc(sizeof(nfapi_sr_indication_pdu_t) * NFAPI_SR_IND_MAX_PDU); - } - - assert(ind->sr_indication_body.number_of_srs <= NFAPI_SR_IND_MAX_PDU); - for (int i = 0; i < ind->sr_indication_body.number_of_srs; i++) { - nfapi_sr_indication_pdu_t *dest_pdu = &UL_RCC_INFO.sr_ind[index].sr_indication_body.sr_pdu_list[i]; - nfapi_sr_indication_pdu_t *src_pdu = &ind->sr_indication_body.sr_pdu_list[i]; - - LOG_D(MAC, - "SR_IND[PDU:%d %d][rnti:%x cqi:%d channel:%d]\n", - index, - i, - src_pdu->rx_ue_information.rnti, - src_pdu->ul_cqi_information.ul_cqi, - src_pdu->ul_cqi_information.channel); - - memcpy(dest_pdu, src_pdu, sizeof(*src_pdu)); - } - } else { - nfapi_sr_indication_t *dest_ind = &eNB->UL_INFO.sr_ind; - nfapi_sr_indication_pdu_t *dest_pdu_list = eNB->sr_pdu_list; - *dest_ind = *ind; - dest_ind->sr_indication_body.sr_pdu_list = dest_pdu_list; - LOG_D(MAC, - "%s() eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs:%d\n", - __FUNCTION__, - eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs); - - assert(eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs <= NFAPI_SR_IND_MAX_PDU); - for (int i = 0; i < eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs; i++) { - nfapi_sr_indication_pdu_t *dest_pdu = &dest_ind->sr_indication_body.sr_pdu_list[i]; - nfapi_sr_indication_pdu_t *src_pdu = &ind->sr_indication_body.sr_pdu_list[i]; - LOG_D(MAC, - "SR_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", - i, - src_pdu->rx_ue_information.rnti, - src_pdu->ul_cqi_information.ul_cqi, - src_pdu->ul_cqi_information.channel); - memcpy(dest_pdu, src_pdu, sizeof(*src_pdu)); - } - } - AssertFatal(pthread_mutex_unlock(&eNB->UL_INFO_mutex) == 0, "Mutex unlock failed"); - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_sr_ind(p7_vnf->mac, ind); - return 1; -} - int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind) { // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 9a6bc75363..c6a6a805ee 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -184,7 +184,6 @@ int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind); -int aerial_phy_sr_indication(struct nfapi_vnf_p7_config *config, nfapi_sr_indication_t *ind); int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind); int aerial_phy_nb_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_nb_harq_indication_t *ind); int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind); From 8150328353b66bd3e352d132be9f42fcfd584be9 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 15:57:30 +0200 Subject: [PATCH 07/21] Remove aerial_phy_lbt_dl_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 7 ------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index 55ee5672f9..e9a2363493 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -63,7 +63,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->srs_indication = NULL; p7_vnf->config->sr_indication = NULL; p7_vnf->config->cqi_indication = NULL; - p7_vnf->config->lbt_dl_indication = &aerial_phy_lbt_dl_indication; + p7_vnf->config->lbt_dl_indication = NULL; p7_vnf->config->nb_harq_indication = &aerial_phy_nb_harq_indication; p7_vnf->config->nrach_indication = &aerial_phy_nrach_indication; p7_vnf->config->nr_slot_indication = &aerial_phy_nr_slot_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index e043a598e3..4b4a6c797a 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -370,13 +370,6 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) return 1; } -int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind) -{ - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_lbt_dl_ind(p7_vnf->mac, ind); - return 1; -} - int aerial_phy_nb_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_nb_harq_indication_t *ind) { // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index c6a6a805ee..0af5874be2 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -184,7 +184,6 @@ int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind); -int aerial_phy_lbt_dl_indication(struct nfapi_vnf_p7_config *config, nfapi_lbt_dl_indication_t *ind); int aerial_phy_nb_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_nb_harq_indication_t *ind); int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind); int aerial_phy_nr_slot_indication(nfapi_nr_slot_indication_scf_t *ind); From d91e80beba383ac047cd9e01fe8770a32e76c356 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 16:01:03 +0200 Subject: [PATCH 08/21] Remove aerial_phy_nb_harq_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 7 ------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index e9a2363493..e8b4c5ddb3 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -64,7 +64,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->sr_indication = NULL; p7_vnf->config->cqi_indication = NULL; p7_vnf->config->lbt_dl_indication = NULL; - p7_vnf->config->nb_harq_indication = &aerial_phy_nb_harq_indication; + p7_vnf->config->nb_harq_indication = NULL; p7_vnf->config->nrach_indication = &aerial_phy_nrach_indication; p7_vnf->config->nr_slot_indication = &aerial_phy_nr_slot_indication; p7_vnf->config->nr_srs_indication = &aerial_phy_nr_srs_indication; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 4b4a6c797a..fb2376b71a 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -370,13 +370,6 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) return 1; } -int aerial_phy_nb_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_nb_harq_indication_t *ind) -{ - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_nb_harq_ind(p7_vnf->mac, ind); - return 1; -} - int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind) { // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 0af5874be2..14c504e620 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -184,7 +184,6 @@ int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind); -int aerial_phy_nb_harq_indication(struct nfapi_vnf_p7_config *config, nfapi_nb_harq_indication_t *ind); int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind); int aerial_phy_nr_slot_indication(nfapi_nr_slot_indication_scf_t *ind); int aerial_phy_nr_srs_indication(nfapi_nr_srs_indication_t *ind); From 77d62cbf57a481efdb44a0b874527a81a9bafdef Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 16:01:38 +0200 Subject: [PATCH 09/21] Remove aerial_phy_nrach_indication(): this is a 4G callback --- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 8 -------- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 1 - 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index e8b4c5ddb3..eb694940e3 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -65,7 +65,7 @@ void *aerial_vnf_nr_p7_config_init(void *ptr) p7_vnf->config->cqi_indication = NULL; p7_vnf->config->lbt_dl_indication = NULL; p7_vnf->config->nb_harq_indication = NULL; - p7_vnf->config->nrach_indication = &aerial_phy_nrach_indication; + p7_vnf->config->nrach_indication = NULL; p7_vnf->config->nr_slot_indication = &aerial_phy_nr_slot_indication; p7_vnf->config->nr_srs_indication = &aerial_phy_nr_srs_indication; p7_vnf->config->malloc = &aerial_vnf_allocate; diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index fb2376b71a..3a3839c525 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -370,14 +370,6 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) return 1; } -int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind) -{ - // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data); - // mac_nrach_ind(p7_vnf->mac, ind); - return 1; -} - - NR_Sched_Rsp_t g_sched_resp; void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_t slot, NR_Sched_Rsp_t* sched_info); int oai_fapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req); diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 14c504e620..65a6f1818a 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -184,7 +184,6 @@ int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind); int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind); int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind); int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind); -int aerial_phy_nrach_indication(struct nfapi_vnf_p7_config *config, nfapi_nrach_indication_t *ind); int aerial_phy_nr_slot_indication(nfapi_nr_slot_indication_scf_t *ind); int aerial_phy_nr_srs_indication(nfapi_nr_srs_indication_t *ind); void *aerial_vnf_allocate(size_t size); From 1a97aa359e32ac1a123956c76b08e3b78f8e2da3 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 27 Sep 2024 16:22:28 +0200 Subject: [PATCH 10/21] aerial_phy_nr_srs_indication(): implement without relying on L1 structures --- nfapi/oai_integration/aerial/fapi_nvIPC.h | 1 - nfapi/oai_integration/aerial/fapi_vnf_p5.c | 2 +- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 26 +++++----------------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.h b/nfapi/oai_integration/aerial/fapi_nvIPC.h index 6910370495..d5171f128e 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.h +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.h @@ -37,7 +37,6 @@ #include "nv_ipc_utils.h" #include "nvlog.h" #include "nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h" -#include "openair1/PHY/defs_gNB.h" #include "debug.h" typedef struct { diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index eb694940e3..55e4cb4a80 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -283,7 +283,7 @@ int aerial_nr_send_config_request(nfapi_vnf_config_t *config, int p5_idx) pnf_info *pnf = vnf->pnfs; phy_info *phy = pnf->phys; - nfapi_nr_config_request_scf_t *req = &RC.nrmac[0]->config[0]; //&RC.gNB[0]->gNB_config; // check + nfapi_nr_config_request_scf_t *req = &RC.nrmac[0]->config[0]; NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] %d.%d pnf p7 %s:%d timing %u %u %u %u\n", diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 3a3839c525..19fec5153f 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -33,6 +33,8 @@ #include "fapi_vnf_p7.h" #include "nr_nfapi_p7.h" +#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h" // for handle_nr_srs_measurements() + extern RAN_CONTEXT_t RC; extern UL_RCC_IND_t UL_RCC_INFO; extern uint16_t sf_ahead; @@ -430,26 +432,10 @@ int aerial_phy_nr_slot_indication(nfapi_nr_slot_indication_scf_t *ind) int aerial_phy_nr_srs_indication(nfapi_nr_srs_indication_t *ind) { - struct PHY_VARS_gNB_s *gNB = RC.gNB[0]; - - gNB->UL_INFO.srs_ind = *ind; - - if (ind->number_of_pdus > 0) - gNB->UL_INFO.srs_ind.pdu_list = malloc(sizeof(nfapi_nr_srs_indication_pdu_t) * ind->number_of_pdus); - - for (int i = 0; i < ind->number_of_pdus; i++) { - memcpy(&gNB->UL_INFO.srs_ind.pdu_list[i], &ind->pdu_list[i], sizeof(ind->pdu_list[0])); - - LOG_D(MAC, - "%s() NFAPI SFN/Slot:%d.%d SRS_IND:number_of_pdus:%d UL_INFO:pdus:%d\n", - __FUNCTION__, - ind->sfn, - ind->slot, - ind->number_of_pdus, - gNB->UL_INFO.srs_ind.number_of_pdus); - } - - + // or queue to decouple, but I think it should be fast (in all likelihood, + // the VNF has nothing to do) + for (int i = 0; i < ind->number_of_pdus; ++i) + handle_nr_srs_measurements(0, ind->sfn, ind->slot, &ind->pdu_list[i]); return 1; } From 83838962fd51748781a8d2fe03b2efa561672825 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 1 Oct 2024 10:45:22 +0200 Subject: [PATCH 11/21] Aerial: Avoid superfluous memcpy(), reduce scope MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We can directly read from buffers, so the memcpy() only takes time. Also, limit the scope of the variables for the unpacking of RX_DATA.indication. Co-authored-by: Rúben Soares Silva --- nfapi/oai_integration/aerial/fapi_nvIPC.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.c b/nfapi/oai_integration/aerial/fapi_nvIPC.c index 46a28c440e..a1de610c03 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.c +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.c @@ -102,16 +102,8 @@ static int ipc_handle_rx_msg(nv_ipc_t *ipc, nv_ipc_msg_t *msg) } } - int messageBufLen = msg->msg_len; - int dataBufLen = msg->data_len; - uint8_t msgbuf[messageBufLen]; - uint8_t databuf[dataBufLen]; - memcpy(msgbuf, msg->msg_buf, messageBufLen); - memcpy(databuf, msg->data_buf, dataBufLen); - uint8_t *pReadPackedMessage = msgbuf; - uint8_t *pReadData = databuf; - uint8_t *end = msgbuf + messageBufLen; - uint8_t *data_end = databuf + dataBufLen; + uint8_t *pReadPackedMessage = msg->msg_buf; + uint8_t *end = msg->msg_buf + msg->msg_len; // unpack FAPI messages and handle them if (vnf_config != 0) { @@ -209,6 +201,9 @@ static int ipc_handle_rx_msg(nv_ipc_t *ipc, nv_ipc_msg_t *msg) } case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION: { + uint8_t *pReadData = msg->data_buf; + int dataBufLen = msg->data_len; + uint8_t *data_end = msg->data_buf + dataBufLen; nfapi_nr_rx_data_indication_t ind; ind.header.message_id = fapi_msg.message_id; ind.header.message_length = fapi_msg.message_length; From 0609d31dc7f843c67a9c49da4ea94bfc798ad8f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BAben=20Soares=20Silva?= Date: Thu, 10 Oct 2024 15:59:17 +0200 Subject: [PATCH 12/21] Only copy RX_DATA.indication pdu if there's data --- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 19fec5153f..30f85165ea 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -203,8 +203,11 @@ int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind) rx_ind->pdu_list[j].ul_cqi = ind->pdu_list[j].ul_cqi; rx_ind->pdu_list[j].timing_advance = ind->pdu_list[j].timing_advance; rx_ind->pdu_list[j].rssi = ind->pdu_list[j].rssi; - rx_ind->pdu_list[j].pdu = calloc(rx_ind->pdu_list[j].pdu_length, sizeof(uint8_t)); - memcpy(rx_ind->pdu_list[j].pdu,ind->pdu_list[j].pdu,ind->pdu_list[j].pdu_length); + // Only copy PDU data if there's any to copy + if (rx_ind->pdu_list[j].pdu_length > 0) { + rx_ind->pdu_list[j].pdu = calloc(rx_ind->pdu_list[j].pdu_length, sizeof(uint8_t)); + memcpy(rx_ind->pdu_list[j].pdu, ind->pdu_list[j].pdu, ind->pdu_list[j].pdu_length); + } LOG_D(NR_MAC, "(%d.%d) Handle %d for index %d, RNTI, %04x, HARQID %d\n", ind->sfn, From e04ed98994ef48a7e4511de78c2550b2d9634f62 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 1 Oct 2024 10:52:20 +0200 Subject: [PATCH 13/21] Remove unused code --- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 99 ---------------------- 1 file changed, 99 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 30f85165ea..f6179e06d4 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -35,105 +35,6 @@ #include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h" // for handle_nr_srs_measurements() -extern RAN_CONTEXT_t RC; -extern UL_RCC_IND_t UL_RCC_INFO; -extern uint16_t sf_ahead; - -int aerialwake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf) -{ - L1_proc_t *proc = &eNB->proc; - L1_rxtx_proc_t *L1_proc = (sf & 1) ? &proc->L1_proc : &proc->L1_proc_tx; - LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms; - // NFAPI_TRACE(NFAPI_TRACE_INFO, "%s(eNB:%p, sfn:%d, sf:%d)\n", __FUNCTION__, eNB, sfn, sf); - // int i; - struct timespec wait; - wait.tv_sec = 0; - wait.tv_nsec = 5000000L; - - // wake up TX for subframe n+sf_ahead - // lock the TX mutex and make sure the thread is ready - // if (pthread_mutex_timedlock(&L1_proc->mutex,&wait) != 0) { - // LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB RXTX thread %d (IC %d)\n", L1_proc->subframe_rx&1,L1_proc->instance_cnt ); - // exit_fun( "error locking mutex_rxtx" ); - // return(-1); - //} - - { - static uint16_t old_sf = 0; - static uint16_t old_sfn = 0; - proc->subframe_rx = old_sf; - proc->frame_rx = old_sfn; - // Try to be 1 frame back - old_sf = sf; - old_sfn = sfn; - - if (old_sf == 0 && old_sfn % 100 == 0) - LOG_D(PHY, "[eNB] sfn/sf:%d%d old_sfn/sf:%d%d proc[rx:%d%d]\n", sfn, sf, old_sfn, old_sf, proc->frame_rx, proc->subframe_rx); - } - // wake up TX for subframe n+sf_ahead - // lock the TX mutex and make sure the thread is ready - if (pthread_mutex_timedlock(&L1_proc->mutex, &wait) != 0) { - LOG_E(PHY, "[eNB] ERROR pthread_mutex_lock for eNB RXTX thread %d (IC %d)\n", L1_proc->subframe_rx & 1, L1_proc->instance_cnt); - // exit_fun( "error locking mutex_rxtx" ); - return (-1); - } - static int busy_log_cnt = 0; - if (L1_proc->instance_cnt < 0) { - ++L1_proc->instance_cnt; - if (busy_log_cnt != 0) { - LOG_E(MAC, - "RCC singal to rxtx frame %d subframe %d busy end %d (frame %d subframe %d)\n", - L1_proc->frame_rx, - L1_proc->subframe_rx, - busy_log_cnt, - proc->frame_rx, - proc->subframe_rx); - } - busy_log_cnt = 0; - } else { - if (busy_log_cnt == 0) { - LOG_E(MAC, - "RCC singal to rxtx frame %d subframe %d busy %d (frame %d subframe %d)\n", - L1_proc->frame_rx, - L1_proc->subframe_rx, - L1_proc->instance_cnt, - proc->frame_rx, - proc->subframe_rx); - } - pthread_mutex_unlock(&L1_proc->mutex); - busy_log_cnt++; - return (0); - } - - pthread_mutex_unlock(&L1_proc->mutex); - - // LOG_D( PHY,"[VNF-subframe_ind] sfn/sf:%d:%d proc[frame_rx:%d subframe_rx:%d] L1_proc->instance_cnt_rxtx:%d \n", sfn, sf, - // proc->frame_rx, proc->subframe_rx, L1_proc->instance_cnt_rxtx); - // We have just received and processed the common part of a subframe, say n. - // TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired - // transmitted timestamp of the next TX slot (first). - // The last (TS_rx mod samples_per_frame) was n*samples_per_tti, - // we want to generate subframe (n+N), so TS_tx = TX_rx+N*samples_per_tti, - // and proc->subframe_tx = proc->subframe_rx+sf_ahead - L1_proc->timestamp_tx = proc->timestamp_rx + (sf_ahead * fp->samples_per_tti); - L1_proc->frame_rx = proc->frame_rx; - L1_proc->subframe_rx = proc->subframe_rx; - L1_proc->frame_tx = (L1_proc->subframe_rx > (9 - sf_ahead)) ? (L1_proc->frame_rx + 1) & 1023 : L1_proc->frame_rx; - L1_proc->subframe_tx = (L1_proc->subframe_rx + sf_ahead) % 10; - - // LOG_D(PHY, "sfn/sf:%d%d proc[rx:%d%d] L1_proc[instance_cnt_rxtx:%d rx:%d%d] About to wake rxtx thread\n\n", sfn, sf, - // proc->frame_rx, proc->subframe_rx, L1_proc->instance_cnt_rxtx, L1_proc->frame_rx, L1_proc->subframe_rx); - - // the thread can now be woken up - if (pthread_cond_signal(&L1_proc->cond) != 0) { - LOG_E(PHY, "[eNB] ERROR pthread_cond_signal for eNB RXn-TXnp4 thread\n"); - exit_fun("ERROR pthread_cond_signal"); - return (-1); - } - - return (0); -} - extern pthread_cond_t nfapi_sync_cond; extern pthread_mutex_t nfapi_sync_mutex; extern int nfapi_sync_var; From f7afc8e8eeb7aa9e529ff41c423f897e816ef691 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 10:29:17 +0200 Subject: [PATCH 14/21] Aerial: compile P5 with Aerial-specfic modifications --- nfapi/open-nFAPI/fapi/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nfapi/open-nFAPI/fapi/CMakeLists.txt b/nfapi/open-nFAPI/fapi/CMakeLists.txt index bd93d05447..1e2208172f 100644 --- a/nfapi/open-nFAPI/fapi/CMakeLists.txt +++ b/nfapi/open-nFAPI/fapi/CMakeLists.txt @@ -4,3 +4,6 @@ add_library(nr_fapi_p5 ) target_include_directories(nr_fapi_p5 PUBLIC inc) target_link_libraries(nr_fapi_p5 PUBLIC nfapi_common) +if(OAI_AERIAL) + target_compile_definitions(nr_fapi_p5 PRIVATE ENABLE_AERIAL) +endif() From f2f08ac52afbf5ff12bbc6a694a893848e99108c Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 16:11:55 +0200 Subject: [PATCH 15/21] Remove ENABLE_AERIAL switch in aerial bindings As is visible at the top of the patch, for compiling aerial_lib (the binding FAPI-Aerial), we always add ENABLE_AERIAL. Thus, all the code within ENABLE_AERIAL will be compiled; we can also simply take it out. --- nfapi/oai_integration/aerial/CMakeLists.txt | 2 +- nfapi/oai_integration/aerial/fapi_nvIPC.c | 3 +-- nfapi/oai_integration/aerial/fapi_nvIPC.h | 2 -- nfapi/oai_integration/aerial/fapi_vnf_p5.c | 3 +-- nfapi/oai_integration/aerial/fapi_vnf_p5.h | 3 +-- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 5 +---- nfapi/oai_integration/aerial/fapi_vnf_p7.h | 2 -- 7 files changed, 5 insertions(+), 15 deletions(-) diff --git a/nfapi/oai_integration/aerial/CMakeLists.txt b/nfapi/oai_integration/aerial/CMakeLists.txt index 4c02ab01e9..80d4cd77c6 100644 --- a/nfapi/oai_integration/aerial/CMakeLists.txt +++ b/nfapi/oai_integration/aerial/CMakeLists.txt @@ -19,7 +19,7 @@ if (OAI_AERIAL) else () message(STATUS " nvlog library found in ${NVLOG_LIB}") endif () - target_compile_definitions(aerial_lib PUBLIC ENABLE_L2_SLT_RSP ENABLE_AERIAL) + target_compile_definitions(aerial_lib PUBLIC ENABLE_L2_SLT_RSP) target_link_libraries(aerial_lib PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) target_link_libraries(aerial_lib PRIVATE nr_fapi_p5) target_link_libraries(aerial_lib PRIVATE "${NVLOG_LIB}" "${NVIPC_LIB}") diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.c b/nfapi/oai_integration/aerial/fapi_nvIPC.c index a1de610c03..5b17f0ff1f 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.c +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.c @@ -29,7 +29,7 @@ * \note * \warning */ -#ifdef ENABLE_AERIAL + #define _GNU_SOURCE #include #include @@ -681,4 +681,3 @@ int nvIPC_Init(nvipc_params_t nvipc_params_s) aerial_pnf_nr_connection_indication_cb(vnf_config, 1); return 0; } -#endif diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.h b/nfapi/oai_integration/aerial/fapi_nvIPC.h index d5171f128e..594edd843a 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.h +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.h @@ -29,7 +29,6 @@ * \note * \warning */ -#ifdef ENABLE_AERIAL #ifndef OPENAIRINTERFACE_FAPI_NVIPC_H #define OPENAIRINTERFACE_FAPI_NVIPC_H @@ -57,4 +56,3 @@ void set_config(nfapi_vnf_config_t *conf); int nvIPC_Init(nvipc_params_t); #endif // OPENAIRINTERFACE_FAPI_NVIPC_H -#endif diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.c b/nfapi/oai_integration/aerial/fapi_vnf_p5.c index 55e4cb4a80..951a734ddd 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.c @@ -29,7 +29,7 @@ * \note * \warning */ -#ifdef ENABLE_AERIAL + #include "fapi_vnf_p5.h" #include "fapi_vnf_p7.h" #include "nfapi/open-nFAPI/vnf/inc/vnf_p7.h" @@ -617,4 +617,3 @@ int oai_fapi_send_end_request(int cell, uint32_t frame, uint32_t slot){ } return retval; } -#endif diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p5.h b/nfapi/oai_integration/aerial/fapi_vnf_p5.h index b67f959f8f..84fb3ec2f8 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p5.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p5.h @@ -29,7 +29,7 @@ * \note * \warning */ -#ifdef ENABLE_AERIAL + #ifndef OPENAIRINTERFACE_FAPI_VNF_P5_H #define OPENAIRINTERFACE_FAPI_VNF_P5_H #define _GNU_SOURCE @@ -70,4 +70,3 @@ int oai_fapi_ul_dci_req(nfapi_nr_ul_dci_request_t *ul_dci_req); int oai_fapi_tx_data_req(nfapi_nr_tx_data_request_t *tx_data_req); int oai_fapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req); #endif //OPENAIRINTERFACE_FAPI_VNF_P5_H -#endif diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index f6179e06d4..a84ac70110 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -29,7 +29,7 @@ * \note * \warning */ -#ifdef ENABLE_AERIAL + #include "fapi_vnf_p7.h" #include "nr_nfapi_p7.h" @@ -293,7 +293,6 @@ int trigger_scheduler(nfapi_nr_slot_indication_scf_t *slot_ind) // memset(sched_resp, 0, sizeof(*sched_resp)); gNB_dlsch_ulsch_scheduler(0, slot_ind->sfn, slot_ind->slot, &g_sched_resp); if (NFAPI_MODE == NFAPI_MODE_AERIAL) { -#ifdef ENABLE_AERIAL bool send_slt_resp = false; if (g_sched_resp.DL_req.dl_tti_request_body.nPDUs> 0) { oai_fapi_dl_tti_req(&g_sched_resp.DL_req); @@ -314,7 +313,6 @@ int trigger_scheduler(nfapi_nr_slot_indication_scf_t *slot_ind) if (send_slt_resp) { oai_fapi_send_end_request(0,slot_ind->sfn, slot_ind->slot); } -#endif } return 1; @@ -862,4 +860,3 @@ int fapi_nr_pack_and_send_p7_message(vnf_p7_t *vnf_p7, nfapi_p7_message_header_t return aerial_send_P7_msg(FAPI_buffer, len_FAPI, header); } } -#endif diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.h b/nfapi/oai_integration/aerial/fapi_vnf_p7.h index 65a6f1818a..404df347cc 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.h +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.h @@ -30,7 +30,6 @@ * \warning */ -#ifdef ENABLE_AERIAL #ifndef OPENAIRINTERFACE_FAPI_VNF_P7_H #define OPENAIRINTERFACE_FAPI_VNF_P7_H @@ -230,4 +229,3 @@ uint8_t aerial_unpack_nr_rach_indication(uint8_t **ppReadPackedMsg, // int fapi_nr_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nfapi_p7_codec_config_t* config); int fapi_nr_pack_and_send_p7_message(vnf_p7_t *vnf_p7, nfapi_p7_message_header_t *header); #endif // OPENAIRINTERFACE_FAPI_VNF_P7_H -#endif From c945bef2f1d4e60a112a7672a97aaaf6da1172bb Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 16:14:36 +0200 Subject: [PATCH 16/21] Remove check for NFAPI_MODE_AERIAL, it's pointless In Aerial bindings (FAPI-Aerial), the NFAPI mode must be NFAPI_MODE_AERIAL (otherwise, we would not be executing this code). Hence, the switches don't make sense. Remove them. The check can more easily be checked with git show --ignore-all-space --- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 363 ++++++++++----------- 1 file changed, 173 insertions(+), 190 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index a84ac70110..bf7fbc1f72 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -41,152 +41,139 @@ extern int nfapi_sync_var; int aerial_phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind) { - if (NFAPI_MODE == NFAPI_MODE_AERIAL) { - nfapi_nr_crc_indication_t *crc_ind = CALLOC(1, sizeof(*crc_ind)); - crc_ind->header.message_id = ind->header.message_id; - crc_ind->number_crcs = ind->number_crcs; - crc_ind->sfn = ind->sfn; - crc_ind->slot = ind->slot; - if (ind->number_crcs > 0) { - crc_ind->crc_list = CALLOC(NFAPI_NR_CRC_IND_MAX_PDU, sizeof(nfapi_nr_crc_t)); - AssertFatal(crc_ind->crc_list != NULL, "Memory not allocated for crc_ind->crc_list in phy_nr_crc_indication."); + nfapi_nr_crc_indication_t *crc_ind = CALLOC(1, sizeof(*crc_ind)); + crc_ind->header.message_id = ind->header.message_id; + crc_ind->number_crcs = ind->number_crcs; + crc_ind->sfn = ind->sfn; + crc_ind->slot = ind->slot; + if (ind->number_crcs > 0) { + crc_ind->crc_list = CALLOC(NFAPI_NR_CRC_IND_MAX_PDU, sizeof(nfapi_nr_crc_t)); + AssertFatal(crc_ind->crc_list != NULL, "Memory not allocated for crc_ind->crc_list in phy_nr_crc_indication."); + } + for (int j = 0; j < ind->number_crcs; j++) { + crc_ind->crc_list[j].handle = ind->crc_list[j].handle; + crc_ind->crc_list[j].rnti = ind->crc_list[j].rnti; + crc_ind->crc_list[j].harq_id = ind->crc_list[j].harq_id; + crc_ind->crc_list[j].tb_crc_status = ind->crc_list[j].tb_crc_status; + crc_ind->crc_list[j].num_cb = ind->crc_list[j].num_cb; + crc_ind->crc_list[j].cb_crc_status = ind->crc_list[j].cb_crc_status; + crc_ind->crc_list[j].ul_cqi = ind->crc_list[j].ul_cqi; + crc_ind->crc_list[j].timing_advance = ind->crc_list[j].timing_advance; + crc_ind->crc_list[j].rssi = ind->crc_list[j].rssi; + if (crc_ind->crc_list[j].tb_crc_status != 0) { + LOG_D(NR_MAC, + "Received crc_ind.harq_id %d status %d for index %d SFN SLot %u %u with rnti %04x\n", + crc_ind->crc_list[j].harq_id, + crc_ind->crc_list[j].tb_crc_status, + j, + crc_ind->sfn, + crc_ind->slot, + crc_ind->crc_list[j].rnti); } - for (int j = 0; j < ind->number_crcs; j++) { - crc_ind->crc_list[j].handle = ind->crc_list[j].handle; - crc_ind->crc_list[j].rnti = ind->crc_list[j].rnti; - crc_ind->crc_list[j].harq_id = ind->crc_list[j].harq_id; - crc_ind->crc_list[j].tb_crc_status = ind->crc_list[j].tb_crc_status; - crc_ind->crc_list[j].num_cb = ind->crc_list[j].num_cb; - crc_ind->crc_list[j].cb_crc_status = ind->crc_list[j].cb_crc_status; - crc_ind->crc_list[j].ul_cqi = ind->crc_list[j].ul_cqi; - crc_ind->crc_list[j].timing_advance = ind->crc_list[j].timing_advance; - crc_ind->crc_list[j].rssi = ind->crc_list[j].rssi; - if (crc_ind->crc_list[j].tb_crc_status != 0) { - LOG_D(NR_MAC, - "Received crc_ind.harq_id %d status %d for index %d SFN SLot %u %u with rnti %04x\n", - crc_ind->crc_list[j].harq_id, - crc_ind->crc_list[j].tb_crc_status, - j, - crc_ind->sfn, - crc_ind->slot, - crc_ind->crc_list[j].rnti); - } - } - if (!put_queue(&gnb_crc_ind_queue, crc_ind)) { - LOG_E(NR_MAC, "Put_queue failed for crc_ind\n"); - free(crc_ind->crc_list); - free(crc_ind); - } - } else { - LOG_E(NR_MAC, "NFAPI_MODE = %d not NFAPI_MODE_AERIAL(3)\n", nfapi_getmode()); + } + if (!put_queue(&gnb_crc_ind_queue, crc_ind)) { + LOG_E(NR_MAC, "Put_queue failed for crc_ind\n"); + free(crc_ind->crc_list); + free(crc_ind); } return 1; } int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind) { - if (NFAPI_MODE == NFAPI_MODE_AERIAL) { - nfapi_nr_rx_data_indication_t *rx_ind = CALLOC(1, sizeof(*rx_ind)); - rx_ind->header.message_id = ind->header.message_id; - rx_ind->sfn = ind->sfn; - rx_ind->slot = ind->slot; - rx_ind->number_of_pdus = ind->number_of_pdus; + nfapi_nr_rx_data_indication_t *rx_ind = CALLOC(1, sizeof(*rx_ind)); + rx_ind->header.message_id = ind->header.message_id; + rx_ind->sfn = ind->sfn; + rx_ind->slot = ind->slot; + rx_ind->number_of_pdus = ind->number_of_pdus; - if (ind->number_of_pdus > 0) { - rx_ind->pdu_list = CALLOC(NFAPI_NR_RX_DATA_IND_MAX_PDU, sizeof(nfapi_nr_rx_data_pdu_t)); - AssertFatal(rx_ind->pdu_list != NULL, "Memory not allocated for rx_ind->pdu_list in phy_nr_rx_data_indication."); + if (ind->number_of_pdus > 0) { + rx_ind->pdu_list = CALLOC(NFAPI_NR_RX_DATA_IND_MAX_PDU, sizeof(nfapi_nr_rx_data_pdu_t)); + AssertFatal(rx_ind->pdu_list != NULL, "Memory not allocated for rx_ind->pdu_list in phy_nr_rx_data_indication."); + } + for (int j = 0; j < ind->number_of_pdus; j++) { + rx_ind->pdu_list[j].handle = ind->pdu_list[j].handle; + rx_ind->pdu_list[j].rnti = ind->pdu_list[j].rnti; + rx_ind->pdu_list[j].harq_id = ind->pdu_list[j].harq_id; + rx_ind->pdu_list[j].pdu_length = ind->pdu_list[j].pdu_length; + rx_ind->pdu_list[j].ul_cqi = ind->pdu_list[j].ul_cqi; + rx_ind->pdu_list[j].timing_advance = ind->pdu_list[j].timing_advance; + rx_ind->pdu_list[j].rssi = ind->pdu_list[j].rssi; + // Only copy PDU data if there's any to copy + if (rx_ind->pdu_list[j].pdu_length > 0) { + rx_ind->pdu_list[j].pdu = calloc(rx_ind->pdu_list[j].pdu_length, sizeof(uint8_t)); + memcpy(rx_ind->pdu_list[j].pdu, ind->pdu_list[j].pdu, ind->pdu_list[j].pdu_length); } - for (int j = 0; j < ind->number_of_pdus; j++) { - rx_ind->pdu_list[j].handle = ind->pdu_list[j].handle; - rx_ind->pdu_list[j].rnti = ind->pdu_list[j].rnti; - rx_ind->pdu_list[j].harq_id = ind->pdu_list[j].harq_id; - rx_ind->pdu_list[j].pdu_length = ind->pdu_list[j].pdu_length; - rx_ind->pdu_list[j].ul_cqi = ind->pdu_list[j].ul_cqi; - rx_ind->pdu_list[j].timing_advance = ind->pdu_list[j].timing_advance; - rx_ind->pdu_list[j].rssi = ind->pdu_list[j].rssi; - // Only copy PDU data if there's any to copy - if (rx_ind->pdu_list[j].pdu_length > 0) { - rx_ind->pdu_list[j].pdu = calloc(rx_ind->pdu_list[j].pdu_length, sizeof(uint8_t)); - memcpy(rx_ind->pdu_list[j].pdu, ind->pdu_list[j].pdu, ind->pdu_list[j].pdu_length); - } - LOG_D(NR_MAC, - "(%d.%d) Handle %d for index %d, RNTI, %04x, HARQID %d\n", - ind->sfn, - ind->slot, - ind->pdu_list[j].handle, - j, - ind->pdu_list[j].rnti, - ind->pdu_list[j].harq_id); - } - if (!put_queue(&gnb_rx_ind_queue, rx_ind)) { - LOG_E(NR_MAC, "Put_queue failed for rx_ind\n"); - free(rx_ind->pdu_list); - free(rx_ind); - } - } else { - LOG_E(NR_MAC, "NFAPI_MODE = %d not NFAPI_MODE_AERIAL(3)\n", nfapi_getmode()); + LOG_D(NR_MAC, + "(%d.%d) Handle %d for index %d, RNTI, %04x, HARQID %d\n", + ind->sfn, + ind->slot, + ind->pdu_list[j].handle, + j, + ind->pdu_list[j].rnti, + ind->pdu_list[j].harq_id); + } + if (!put_queue(&gnb_rx_ind_queue, rx_ind)) { + LOG_E(NR_MAC, "Put_queue failed for rx_ind\n"); + free(rx_ind->pdu_list); + free(rx_ind); } return 1; } int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind) { - if (NFAPI_MODE == NFAPI_MODE_AERIAL) { - nfapi_nr_rach_indication_t *rach_ind = CALLOC(1, sizeof(*rach_ind)); - rach_ind->header.message_id = ind->header.message_id; - rach_ind->sfn = ind->sfn; - rach_ind->slot = ind->slot; - rach_ind->number_of_pdus = ind->number_of_pdus; - rach_ind->pdu_list = CALLOC(rach_ind->number_of_pdus, sizeof(*rach_ind->pdu_list)); - AssertFatal(rach_ind->pdu_list != NULL, "Memory not allocated for rach_ind->pdu_list in phy_nr_rach_indication."); + nfapi_nr_rach_indication_t *rach_ind = CALLOC(1, sizeof(*rach_ind)); + rach_ind->header.message_id = ind->header.message_id; + rach_ind->sfn = ind->sfn; + rach_ind->slot = ind->slot; + rach_ind->number_of_pdus = ind->number_of_pdus; + rach_ind->pdu_list = CALLOC(rach_ind->number_of_pdus, sizeof(*rach_ind->pdu_list)); + AssertFatal(rach_ind->pdu_list != NULL, "Memory not allocated for rach_ind->pdu_list in phy_nr_rach_indication."); + for (int i = 0; i < ind->number_of_pdus; i++) { + rach_ind->pdu_list[i].phy_cell_id = ind->pdu_list[i].phy_cell_id; + rach_ind->pdu_list[i].symbol_index = ind->pdu_list[i].symbol_index; + rach_ind->pdu_list[i].slot_index = ind->pdu_list[i].slot_index; + rach_ind->pdu_list[i].freq_index = ind->pdu_list[i].freq_index; + rach_ind->pdu_list[i].avg_rssi = ind->pdu_list[i].avg_rssi; + rach_ind->pdu_list[i].avg_snr = ind->pdu_list[i].avg_snr; + rach_ind->pdu_list[i].num_preamble = ind->pdu_list[i].num_preamble; + for (int j = 0; j < ind->pdu_list[i].num_preamble; j++) { + rach_ind->pdu_list[i].preamble_list[j].preamble_index = ind->pdu_list[i].preamble_list[j].preamble_index; + rach_ind->pdu_list[i].preamble_list[j].timing_advance = ind->pdu_list[i].preamble_list[j].timing_advance; + rach_ind->pdu_list[i].preamble_list[j].preamble_pwr = ind->pdu_list[i].preamble_list[j].preamble_pwr; + } + } + if (!put_queue(&gnb_rach_ind_queue, rach_ind)) { + LOG_E(NR_MAC, "Put_queue failed for rach_ind\n"); for (int i = 0; i < ind->number_of_pdus; i++) { - rach_ind->pdu_list[i].phy_cell_id = ind->pdu_list[i].phy_cell_id; - rach_ind->pdu_list[i].symbol_index = ind->pdu_list[i].symbol_index; - rach_ind->pdu_list[i].slot_index = ind->pdu_list[i].slot_index; - rach_ind->pdu_list[i].freq_index = ind->pdu_list[i].freq_index; - rach_ind->pdu_list[i].avg_rssi = ind->pdu_list[i].avg_rssi; - rach_ind->pdu_list[i].avg_snr = ind->pdu_list[i].avg_snr; - rach_ind->pdu_list[i].num_preamble = ind->pdu_list[i].num_preamble; - for (int j = 0; j < ind->pdu_list[i].num_preamble; j++) { - rach_ind->pdu_list[i].preamble_list[j].preamble_index = ind->pdu_list[i].preamble_list[j].preamble_index; - rach_ind->pdu_list[i].preamble_list[j].timing_advance = ind->pdu_list[i].preamble_list[j].timing_advance; - rach_ind->pdu_list[i].preamble_list[j].preamble_pwr = ind->pdu_list[i].preamble_list[j].preamble_pwr; - } - } - if (!put_queue(&gnb_rach_ind_queue, rach_ind)) { - LOG_E(NR_MAC, "Put_queue failed for rach_ind\n"); - for (int i = 0; i < ind->number_of_pdus; i++) { - free(rach_ind->pdu_list[i].preamble_list); - } - free(rach_ind->pdu_list); - free(rach_ind); - } else { - LOG_I(NR_MAC, "RACH.indication put_queue successfull\n"); + free(rach_ind->pdu_list[i].preamble_list); } + free(rach_ind->pdu_list); + free(rach_ind); } else { - LOG_E(NR_MAC, "NFAPI_MODE = %d not NFAPI_MODE_AERIAL(3)\n", nfapi_getmode()); + LOG_I(NR_MAC, "RACH.indication put_queue successfull\n"); } return 1; } int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) { - if (NFAPI_MODE == NFAPI_MODE_AERIAL) { - nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); - AssertFatal(uci_ind, "Memory not allocated for uci_ind in phy_nr_uci_indication."); - *uci_ind = *ind; + nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); + AssertFatal(uci_ind, "Memory not allocated for uci_ind in phy_nr_uci_indication."); + *uci_ind = *ind; - uci_ind->uci_list = CALLOC(NFAPI_NR_UCI_IND_MAX_PDU, sizeof(nfapi_nr_uci_t)); - AssertFatal(uci_ind->uci_list != NULL, "Memory not allocated for uci_ind->uci_list in phy_nr_uci_indication."); - for (int i = 0; i < ind->num_ucis; i++) { - uci_ind->uci_list[i] = ind->uci_list[i]; + uci_ind->uci_list = CALLOC(NFAPI_NR_UCI_IND_MAX_PDU, sizeof(nfapi_nr_uci_t)); + AssertFatal(uci_ind->uci_list != NULL, "Memory not allocated for uci_ind->uci_list in phy_nr_uci_indication."); + for (int i = 0; i < ind->num_ucis; i++) { + uci_ind->uci_list[i] = ind->uci_list[i]; - switch (uci_ind->uci_list[i].pdu_type) { - case NFAPI_NR_UCI_PUSCH_PDU_TYPE: - LOG_E(MAC, "%s(): unhandled NFAPI_NR_UCI_PUSCH_PDU_TYPE\n", __func__); - break; + switch (uci_ind->uci_list[i].pdu_type) { + case NFAPI_NR_UCI_PUSCH_PDU_TYPE: + LOG_E(MAC, "%s(): unhandled NFAPI_NR_UCI_PUSCH_PDU_TYPE\n", __func__); + break; - case NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE: { + case NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE: { // nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_ind_pdu = &uci_ind->uci_list[i].pucch_pdu_format_0_1; // nfapi_nr_uci_pucch_pdu_format_0_1_t *ind_pdu = &ind->uci_list[i].pucch_pdu_format_0_1; // if (ind_pdu->sr) { @@ -205,49 +192,49 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) // for (int j = 0; j < uci_ind_pdu->harq->num_harq; j++) // uci_ind_pdu->harq->harq_list[j].harq_value = ind_pdu->harq->harq_list[j].harq_value; // } - break; - } + break; + } - case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_ind_pdu = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4; - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *ind_pdu = &ind->uci_list[i].pucch_pdu_format_2_3_4; - *uci_ind_pdu = *ind_pdu; - if (ind_pdu->harq.harq_payload) { - uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload)); - AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, - "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication."); - *uci_ind_pdu->harq.harq_payload = *ind_pdu->harq.harq_payload; - } - if (ind_pdu->sr.sr_payload) { - uci_ind_pdu->sr.sr_payload = CALLOC(1, sizeof(*uci_ind_pdu->sr.sr_payload)); - AssertFatal(uci_ind_pdu->sr.sr_payload != NULL, - "Memory not allocated for uci_ind_pdu->sr.sr_payload in phy_nr_uci_indication."); - //SCF222.10.02 sr_bit_len values from 1 to 8, payload always just one byte - uci_ind_pdu->sr.sr_payload[0] = ind_pdu->sr.sr_payload[0]; - } - if (ind_pdu->csi_part1.csi_part1_payload) { - uint8_t byte_len = (ind_pdu->csi_part1.csi_part1_bit_len / 8) + 1; - uci_ind_pdu->csi_part1.csi_part1_payload = calloc(byte_len, sizeof(uint8_t)); - AssertFatal(uci_ind_pdu->csi_part1.csi_part1_payload != NULL, - "Memory not allocated for uci_ind_pdu->csi_part1.csi_part1_payload in phy_nr_uci_indication."); - memcpy(uci_ind_pdu->csi_part1.csi_part1_payload,ind_pdu->csi_part1.csi_part1_payload,byte_len); - } - if (ind_pdu->csi_part2.csi_part2_payload) { - uint8_t byte_len = (ind_pdu->csi_part2.csi_part2_bit_len / 8) + 1; - uci_ind_pdu->csi_part2.csi_part2_payload = calloc(byte_len, sizeof(uint8_t)); - AssertFatal(uci_ind_pdu->csi_part2.csi_part2_payload != NULL, - "Memory not allocated for uci_ind_pdu->csi_part2.csi_part2_payload in phy_nr_uci_indication."); - memcpy(uci_ind_pdu->csi_part2.csi_part2_payload,ind_pdu->csi_part2.csi_part2_payload,byte_len); - } - break; + case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_ind_pdu = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4; + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *ind_pdu = &ind->uci_list[i].pucch_pdu_format_2_3_4; + *uci_ind_pdu = *ind_pdu; + if (ind_pdu->harq.harq_payload) { + uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload)); + AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, + "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication."); + *uci_ind_pdu->harq.harq_payload = *ind_pdu->harq.harq_payload; } + if (ind_pdu->sr.sr_payload) { + uci_ind_pdu->sr.sr_payload = CALLOC(1, sizeof(*uci_ind_pdu->sr.sr_payload)); + AssertFatal(uci_ind_pdu->sr.sr_payload != NULL, + "Memory not allocated for uci_ind_pdu->sr.sr_payload in phy_nr_uci_indication."); + //SCF222.10.02 sr_bit_len values from 1 to 8, payload always just one byte + uci_ind_pdu->sr.sr_payload[0] = ind_pdu->sr.sr_payload[0]; + } + if (ind_pdu->csi_part1.csi_part1_payload) { + uint8_t byte_len = (ind_pdu->csi_part1.csi_part1_bit_len / 8) + 1; + uci_ind_pdu->csi_part1.csi_part1_payload = calloc(byte_len, sizeof(uint8_t)); + AssertFatal(uci_ind_pdu->csi_part1.csi_part1_payload != NULL, + "Memory not allocated for uci_ind_pdu->csi_part1.csi_part1_payload in phy_nr_uci_indication."); + memcpy(uci_ind_pdu->csi_part1.csi_part1_payload,ind_pdu->csi_part1.csi_part1_payload,byte_len); + } + if (ind_pdu->csi_part2.csi_part2_payload) { + uint8_t byte_len = (ind_pdu->csi_part2.csi_part2_bit_len / 8) + 1; + uci_ind_pdu->csi_part2.csi_part2_payload = calloc(byte_len, sizeof(uint8_t)); + AssertFatal(uci_ind_pdu->csi_part2.csi_part2_payload != NULL, + "Memory not allocated for uci_ind_pdu->csi_part2.csi_part2_payload in phy_nr_uci_indication."); + memcpy(uci_ind_pdu->csi_part2.csi_part2_payload,ind_pdu->csi_part2.csi_part2_payload,byte_len); + } + break; } } + } - if (!put_queue(&gnb_uci_ind_queue, uci_ind)) { - LOG_E(NR_MAC, "Put_queue failed for uci_ind\n"); - for (int i = 0; i < ind->num_ucis; i++) { - if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) { + if (!put_queue(&gnb_uci_ind_queue, uci_ind)) { + LOG_E(NR_MAC, "Put_queue failed for uci_ind\n"); + for (int i = 0; i < ind->num_ucis; i++) { + if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) { // if (uci_ind->uci_list[i].pucch_pdu_format_0_1.harq) { // free(uci_ind->uci_list[i].pucch_pdu_format_0_1.harq->harq_list); // uci_ind->uci_list[i].pucch_pdu_format_0_1.harq->harq_list = NULL; @@ -258,20 +245,17 @@ int aerial_phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) // free(uci_ind->uci_list[i].pucch_pdu_format_0_1.sr); // uci_ind->uci_list[i].pucch_pdu_format_0_1.sr = NULL; // } - } - if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) { - free(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.harq.harq_payload); - free(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.csi_part1.csi_part1_payload); - free(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.csi_part2.csi_part2_payload); - } } - free(uci_ind->uci_list); - uci_ind->uci_list = NULL; - free(uci_ind); - uci_ind = NULL; + if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) { + free(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.harq.harq_payload); + free(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.csi_part1.csi_part1_payload); + free(uci_ind->uci_list[i].pucch_pdu_format_2_3_4.csi_part2.csi_part2_payload); + } } - } else { - LOG_E(NR_MAC, "NFAPI_MODE = %d not NFAPI_MODE_AERIAL(3)\n", nfapi_getmode()); + free(uci_ind->uci_list); + uci_ind->uci_list = NULL; + free(uci_ind); + uci_ind = NULL; } return 1; } @@ -292,27 +276,26 @@ int trigger_scheduler(nfapi_nr_slot_indication_scf_t *slot_ind) // Call into the scheduler (this is hardcoded and should be init properly!) // memset(sched_resp, 0, sizeof(*sched_resp)); gNB_dlsch_ulsch_scheduler(0, slot_ind->sfn, slot_ind->slot, &g_sched_resp); - if (NFAPI_MODE == NFAPI_MODE_AERIAL) { - bool send_slt_resp = false; - if (g_sched_resp.DL_req.dl_tti_request_body.nPDUs> 0) { - oai_fapi_dl_tti_req(&g_sched_resp.DL_req); - send_slt_resp = true; - } - if (g_sched_resp.UL_tti_req.n_pdus > 0) { - oai_fapi_ul_tti_req(&g_sched_resp.UL_tti_req); - send_slt_resp = true; - } - if (g_sched_resp.TX_req.Number_of_PDUs > 0) { - oai_fapi_tx_data_req(&g_sched_resp.TX_req); - send_slt_resp = true; - } - if (g_sched_resp.UL_dci_req.numPdus > 0) { - oai_fapi_ul_dci_req(&g_sched_resp.UL_dci_req); - send_slt_resp = true; - } - if (send_slt_resp) { - oai_fapi_send_end_request(0,slot_ind->sfn, slot_ind->slot); - } + + bool send_slt_resp = false; + if (g_sched_resp.DL_req.dl_tti_request_body.nPDUs> 0) { + oai_fapi_dl_tti_req(&g_sched_resp.DL_req); + send_slt_resp = true; + } + if (g_sched_resp.UL_tti_req.n_pdus > 0) { + oai_fapi_ul_tti_req(&g_sched_resp.UL_tti_req); + send_slt_resp = true; + } + if (g_sched_resp.TX_req.Number_of_PDUs > 0) { + oai_fapi_tx_data_req(&g_sched_resp.TX_req); + send_slt_resp = true; + } + if (g_sched_resp.UL_dci_req.numPdus > 0) { + oai_fapi_ul_dci_req(&g_sched_resp.UL_dci_req); + send_slt_resp = true; + } + if (send_slt_resp) { + oai_fapi_send_end_request(0,slot_ind->sfn, slot_ind->slot); } return 1; From c648dfd078b2619e471222fe1d79673942f680ec Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 16:27:22 +0200 Subject: [PATCH 17/21] Bugfix: preamble_list is an array Since commit e6e25275edb6cd86666406458c17b44a32f7c15d, preamble_list is an array, not a pointer. Hence, we don't need to call free(). --- nfapi/oai_integration/aerial/fapi_vnf_p7.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index bf7fbc1f72..2f8d001d50 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -146,9 +146,6 @@ int aerial_phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind) } if (!put_queue(&gnb_rach_ind_queue, rach_ind)) { LOG_E(NR_MAC, "Put_queue failed for rach_ind\n"); - for (int i = 0; i < ind->number_of_pdus; i++) { - free(rach_ind->pdu_list[i].preamble_list); - } free(rach_ind->pdu_list); free(rach_ind); } else { From da5601b8bf7fa9fae6a4bf9f5c034b4407663dea Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 16:31:42 +0200 Subject: [PATCH 18/21] Remove code enclosed in NVIPC_CUDA_ENABLE When compiling aerial, we compile without CUDA support (see e.g., docker/Dockerfile.gNB.aerial.ubuntu22). Hence, do not check for it in aerial for the moment, we won't use it for the foreseeable future. --- nfapi/oai_integration/aerial/fapi_nvIPC.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.c b/nfapi/oai_integration/aerial/fapi_nvIPC.c index 5b17f0ff1f..354de62d8f 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.c +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.c @@ -88,11 +88,6 @@ static int ipc_handle_rx_msg(nv_ipc_t *ipc, nv_ipc_msg_t *msg) gpu = 0; } -#ifdef NVIPC_CUDA_ENABLE - // Test CUDA: call CUDA functions to change all string to lower case - test_cuda_to_lower_case(test_cuda_device_id, msg->data_buf, TEST_DATA_BUF_LEN, gpu); -#endif - if (gpu) { p_cpu_data = cpu_buf_recv; memset(cpu_buf_recv, 0, RECV_BUF_LEN); @@ -647,11 +642,7 @@ int load_hard_code_config(nv_ipc_config_t *config, int module_type, nv_ipc_trans return -1; } -#ifdef NVIPC_CUDA_ENABLE - int test_cuda_device_id = get_cuda_device_id(); -#else int test_cuda_device_id = -1; -#endif LOG_D(NFAPI_VNF,"CUDA device ID configured : %d \n", test_cuda_device_id); config->transport_config.shm.cuda_device_id = test_cuda_device_id; if (test_cuda_device_id >= 0) { From 35174d79179aeb5871e448f8fe811c34e3c22dcf Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 16:35:07 +0200 Subject: [PATCH 19/21] Remove useless code We don't use CUDA (see previous commit). Further, the variables referenced in this piece of code are not used later. --- nfapi/oai_integration/aerial/fapi_nvIPC.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.c b/nfapi/oai_integration/aerial/fapi_nvIPC.c index 354de62d8f..ca8cd16381 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.c +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.c @@ -79,24 +79,6 @@ static int ipc_handle_rx_msg(nv_ipc_t *ipc, nv_ipc_msg_t *msg) return -1; } - char *p_cpu_data = NULL; - if (msg->data_buf != NULL) { - int gpu; - if (msg->data_pool == NV_IPC_MEMPOOL_CUDA_DATA) { - gpu = 1; - } else { - gpu = 0; - } - - if (gpu) { - p_cpu_data = cpu_buf_recv; - memset(cpu_buf_recv, 0, RECV_BUF_LEN); - ipc->cuda_memcpy_to_host(ipc, p_cpu_data, msg->data_buf, RECV_BUF_LEN); - } else { - p_cpu_data = msg->data_buf; - } - } - uint8_t *pReadPackedMessage = msg->msg_buf; uint8_t *end = msg->msg_buf + msg->msg_len; From 3da3ec19070fbb0851591967eb31309654323c27 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 9 Oct 2024 20:19:32 +0200 Subject: [PATCH 20/21] Resolve error "unknown type name" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolve error: nfapi/oai_integration/aerial/fapi_nvIPC.h:56:16: error: unknown type name ‘nvipc_params_t’ 56 | int nvIPC_Init(nvipc_params_t nvipc_params_s); By including the header. Also, move the definiton of the struct to the MAC, where it is actually stored, and out of the radio common_lib.h, since this is not a radio (split 7/8) parameter. --- nfapi/oai_integration/aerial/fapi_nvIPC.h | 4 +++- openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h | 5 +++++ openair2/NR_PHY_INTERFACE/NR_IF_Module.c | 2 ++ radio/COMMON/common_lib.h | 5 ----- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.h b/nfapi/oai_integration/aerial/fapi_nvIPC.h index 594edd843a..3d88937f60 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.h +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.h @@ -38,6 +38,8 @@ #include "nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h" #include "debug.h" +#include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h" + typedef struct { uint8_t num_msg; uint8_t opaque_handle; @@ -53,6 +55,6 @@ int aerial_send_P7_msg_with_data(void *packedBuf, uint32_t dataLength, nfapi_p7_message_header_t *header); void set_config(nfapi_vnf_config_t *conf); -int nvIPC_Init(nvipc_params_t); +int nvIPC_Init(nvipc_params_t nvipc_params_s); #endif // OPENAIRINTERFACE_FAPI_NVIPC_H diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index 1306652033..18b44bcf28 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -792,6 +792,11 @@ typedef struct f1_config_t { uint32_t gnb_id; // associated gNB's ID, not used in DU itself } f1_config_t; +typedef struct { + char *nvipc_shm_prefix; + int8_t nvipc_poll_core; +} nvipc_params_t; + /*! \brief top level eNB MAC structure */ typedef struct gNB_MAC_INST_s { /// Ethernet parameters for northbound midhaul interface diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c index 0cc456c322..2e4687a352 100644 --- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c @@ -241,6 +241,8 @@ void handle_nr_srs(NR_UL_IND_t *UL_info) { const int num_srs = UL_info->srs_ind.number_of_pdus; nfapi_nr_srs_indication_pdu_t *srs_list = UL_info->srs_ind.pdu_list; + // from here + for (int i = 0; i < num_srs; i++) { nfapi_nr_srs_indication_pdu_t *srs_ind = &srs_list[i]; LOG_D(NR_PHY, "(%d.%d) UL_info->srs_ind.pdu_list[%d].rnti: 0x%04x\n", frame, slot, i, srs_ind->rnti); diff --git a/radio/COMMON/common_lib.h b/radio/COMMON/common_lib.h index 80894c2a1d..aa2d9e3189 100644 --- a/radio/COMMON/common_lib.h +++ b/radio/COMMON/common_lib.h @@ -336,11 +336,6 @@ typedef struct { uint8_t if_compress; } eth_params_t; -typedef struct { - char *nvipc_shm_prefix; - int8_t nvipc_poll_core; -} nvipc_params_t; - typedef struct { //! Tx buffer for if device, keep one per subframe now to allow multithreading void *tx[10]; From eb98aa690e1d7a1c1bc16522b1d4ce3348f1aba0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 10 Oct 2024 16:04:08 +0200 Subject: [PATCH 21/21] Docker: Use -Werror in Aerial build --- docker/Dockerfile.gNB.aerial.ubuntu22 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.gNB.aerial.ubuntu22 b/docker/Dockerfile.gNB.aerial.ubuntu22 index dcfe005caa..281f72f6a3 100644 --- a/docker/Dockerfile.gNB.aerial.ubuntu22 +++ b/docker/Dockerfile.gNB.aerial.ubuntu22 @@ -54,7 +54,8 @@ RUN /bin/sh oaienv && \ RUN /bin/sh oaienv && \ cd cmake_targets && \ mkdir -p log && \ - ./build_oai -w AERIAL --gNB --ninja + ./build_oai -c -w AERIAL --gNB --ninja \ + --cmake-opt -DCMAKE_C_FLAGS="-Werror" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror" #start from scratch for target executable