From 244621d8e669193776daa86b0a5d4894d5628bb4 Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Wed, 3 Dec 2025 16:51:44 +0100 Subject: [PATCH 01/53] Fix for threadpool abort function Fixed an issue where if threadpool was aborted when some threads were in a running state the threadpool would never exit. This was due to the fact that the thread terminate task (func == NULL && args == NULL) could have been pushed to queues which were inactive. This change adds a uint64_t mask of threads that have already exited so whenever the terminate task is sent to another queue, it is ensured that the queue used will wake up at least one tpool worker. Also added pushTpool_mask which allows to specify a subset of threads to push the task to but its only used internally. Also added in this commit: A way to allocate thread-safe storage for thread pool workers via get_tpool_worker_index. This index is unique to the thread pool worker within one threadpool and can be used to access arrays in a thread-safe manner. An example of such use was added in a testcase that was added which compares delay between actors and threadpool workers. --- common/utils/CMakeLists.txt | 3 + common/utils/tests/CMakeLists.txt | 2 + common/utils/tests/test_tpool_vs_actors.c | 126 ++++++++++++++++++++++ common/utils/threadPool/thread-pool.c | 40 ++++++- common/utils/threadPool/thread-pool.h | 5 + 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 common/utils/tests/CMakeLists.txt create mode 100644 common/utils/tests/test_tpool_vs_actors.c diff --git a/common/utils/CMakeLists.txt b/common/utils/CMakeLists.txt index c3c7720628..dc997db6c7 100644 --- a/common/utils/CMakeLists.txt +++ b/common/utils/CMakeLists.txt @@ -23,3 +23,6 @@ endif() add_subdirectory(barrier) add_subdirectory(actor) add_subdirectory(shm_iq_channel) +if (ENABLE_TESTS) + add_subdirectory(tests) +endif() diff --git a/common/utils/tests/CMakeLists.txt b/common/utils/tests/CMakeLists.txt new file mode 100644 index 0000000000..de855b5944 --- /dev/null +++ b/common/utils/tests/CMakeLists.txt @@ -0,0 +1,2 @@ +add_executable(test_tpool_vs_actors test_tpool_vs_actors.c) +target_link_libraries(test_tpool_vs_actors PRIVATE thread-pool pthread LOG minimal_lib actor) diff --git a/common/utils/tests/test_tpool_vs_actors.c b/common/utils/tests/test_tpool_vs_actors.c new file mode 100644 index 0000000000..97f2867f42 --- /dev/null +++ b/common/utils/tests/test_tpool_vs_actors.c @@ -0,0 +1,126 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#include "actor.h" +#include "thread-pool.h" +#include "task.h" +#include "log.h" +#include + +#define NUM_THREADS 10 +#define NUM_JOBS 200000 + +typedef struct { + struct timespec ts; + int actor_index; +} actor_task_t; + +long long delay_table[NUM_THREADS] = {0}; + +void calculate_delay(struct timespec* send_ts, int thread_index) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + long long recv_time = ts.tv_sec * 1000000000LL + ts.tv_nsec; + long long send_time = send_ts->tv_sec * 1000000000LL + send_ts->tv_nsec; + long long delay = recv_time - send_time; + delay_table[thread_index] += delay; +} + +void tpool_function(void* args) +{ + int worker_id = get_tpool_worker_index(); + calculate_delay((struct timespec*)args, worker_id); + free(args); +} + +void actor_function(void* args) +{ + actor_task_t* actor_args = (actor_task_t*)args; + calculate_delay(&actor_args->ts, actor_args->actor_index); +} + +int main() +{ + logInit(); + tpool_t pool; + char params[NUM_THREADS * 4]; + memset(params, 0, sizeof(params)); + for (int i = 0; i < NUM_THREADS; i++) { + char buf[4]; + snprintf(buf, sizeof(buf), "%d,", -1); + strcat(params, buf); + } + + initTpool(params, &pool, true); + + // Example task + task_t task; + task.func = tpool_function; + task.args = NULL; + + // Push tasks to the thread pool + for (int i = 0; i < NUM_JOBS; i++) { + struct timespec* ts = malloc(sizeof(struct timespec)); + clock_gettime(CLOCK_MONOTONIC, ts); + task.args = ts; + pushTpool(&pool, task); + } + + // Abort the thread pool + abortTpool(&pool); + + long long sum_delay = 0; + for (int i = 0; i < NUM_THREADS; i++) { + sum_delay += delay_table[i]; + } + float average_delay = sum_delay / (NUM_JOBS * 1.0f); + printf("Average task delay on tpool: %.2f ns\n", average_delay); + + + memset(delay_table, 0, sizeof(delay_table)); + + Actor_t actors[NUM_THREADS]; + for (int i = 0; i < NUM_THREADS; i++) { + init_actor(&actors[i], "example_actor", -1); + } + + // Push tasks to the actors + for (int i = 0; i < NUM_JOBS; i++) { + notifiedFIFO_elt_t* task = newNotifiedFIFO_elt(sizeof(actor_task_t), 0, NULL, actor_function); + actor_task_t* arg_ts = (actor_task_t*)NotifiedFifoData(task); + arg_ts->actor_index = i % NUM_THREADS; + clock_gettime(CLOCK_MONOTONIC, &arg_ts->ts); + pushNotifiedFIFO(&actors[i % NUM_THREADS].fifo, task); + } + + for (int i = 0; i < NUM_THREADS; i++) { + shutdown_actor(&actors[i]); + } + + sum_delay = 0; + for (int i = 0; i < NUM_THREADS; i++) { + sum_delay += delay_table[i]; + } + average_delay = sum_delay / (NUM_JOBS * 1.0f); + printf("Average task delay on actors: %.2f ns\n", average_delay); + return 0; +} \ No newline at end of file diff --git a/common/utils/threadPool/thread-pool.c b/common/utils/threadPool/thread-pool.c index 2a31602e6e..2983c779a7 100644 --- a/common/utils/threadPool/thread-pool.c +++ b/common/utils/threadPool/thread-pool.c @@ -55,12 +55,47 @@ void pushTpool(tpool_t* tpool, task_t task) push_not_q(&q_arr[index % len_thr], task); } +// Same as above, but avoid certain tpool workers based on the mask +void pushTpool_mask(tpool_t* tpool, task_t task, uint64_t mask) +{ + DevAssert(tpool != NULL); + if (tpool->len_thr == 0) { + task.func(task.args); + return; + } + + size_t index = tpool->index++; + size_t const len_thr = tpool->len_thr; + + not_q_t* q_arr = (not_q_t*)tpool->q_arr; + + for (size_t i = 0; i < len_thr; ++i) { + int index = (i + tpool->index) % len_thr; + if ((1UL << index) & mask) + continue; + if (try_push_not_q(&q_arr[index], task)) { + return; + } + } + + while ((1ULL << (index % len_thr)) & mask) + index++; + push_not_q(&q_arr[index % len_thr], task); +} + +__thread int tpool_worker_index = -1; +int get_tpool_worker_index(void) +{ + return tpool_worker_index; +} + static void* worker_thread(void* arg) { DevAssert(arg != NULL); task_thread_args_t* args = (task_thread_args_t*)arg; int const idx = args->idx; + tpool_worker_index = idx; tpool_t* tpool = args->tpool; uint32_t const len = tpool->len_thr; @@ -87,7 +122,10 @@ static void* worker_thread(void* arg) } if (ret.t.func == NULL && ret.t.args == NULL) { - pushTpool(tpool, (task_t){.args = NULL, .func = NULL}); + tpool->dead_mask |= 1ULL << idx; + if (__builtin_popcountll(tpool->dead_mask) == tpool->len_thr) + break; + pushTpool_mask(tpool, (task_t){.args = NULL, .func = NULL}, tpool->dead_mask); break; } ret.t.func(ret.t.args); diff --git a/common/utils/threadPool/thread-pool.h b/common/utils/threadPool/thread-pool.h index 8e5d329499..75fc1487bb 100644 --- a/common/utils/threadPool/thread-pool.h +++ b/common/utils/threadPool/thread-pool.h @@ -50,6 +50,7 @@ typedef struct { void* q_arr; pthread_barrier_t barrier; + _Atomic(uint64_t) dead_mask; } tpool_t; /// @brief Push job to threadpool. May run task inline in case there are no worker threads @@ -82,4 +83,8 @@ void initFloatingCoresTpool(int nbThreads,tpool_t *pool, bool performanceMeas, c /// Convenience macro #define initTpool(PARAMPTR,TPOOLPTR, MEASURFLAG) initNamedTpool(PARAMPTR,TPOOLPTR, MEASURFLAG, NULL) + +/// Returns the index of the worker thread in the thread pool +/// @return index of the worker thread in a thread pool or -1 if not called from a thread pool worker thread +int get_tpool_worker_index(void); #endif From a2625163e6b0af38c6f8aab28b0b1012dd03945a Mon Sep 17 00:00:00 2001 From: francescomani Date: Wed, 10 Dec 2025 19:33:01 +0100 Subject: [PATCH 02/53] drop rach_ConfigDedicated once reconfiguration with sync related RA is completed at UE --- openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c index ecf8edb022..aa1073aa98 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c @@ -1114,9 +1114,9 @@ void nr_ra_succeeded(NR_UE_MAC_INST_t *mac, const uint8_t gNB_index, const frame RA_config_t *ra = &mac->ra; if (ra->cfra) { - LOG_I(MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CFRA: RAR successfully received.\n", mac->ue_id, frame, slot); + LOG_A(NR_MAC, "[UE %d][%d.%d][RAPROC] RA procedure succeeded. CFRA: RAR successfully received.\n", mac->ue_id, frame, slot); } else { - LOG_A(MAC, + LOG_A(NR_MAC, "[UE %d][%d.%d][RAPROC] %d-Step RA procedure succeeded. CBRA: Contention Resolution is successful.\n", mac->ue_id, frame, @@ -1127,6 +1127,10 @@ void nr_ra_succeeded(NR_UE_MAC_INST_t *mac, const uint8_t gNB_index, const frame nr_timer_stop(&ra->contention_resolution_timer); } + // rach-ConfigDedicated is one shot configuration to be used only for a specific instance of reconfiguration with sync + if (ra->rach_ConfigDedicated) + asn1cFreeStruc(asn_DEF_NR_RACH_ConfigDedicated, ra->rach_ConfigDedicated); + ra->RA_active = false; mac->msg3_C_RNTI = false; ra->ra_state = nrRA_SUCCEEDED; From b0d8c1f3b6d5913b23cdb2fc0ad1080c8f35505d Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Fri, 19 Dec 2025 11:26:02 +0100 Subject: [PATCH 03/53] RRC (refactor): extract target context application into dedicated function Refactor handover target context application logic into a reusable function nr_rrc_apply_target_context() that updates both F1AP associations (secondary UE and DU association) and RNTI from the target handover context. And apply to rrc_CU_process_ue_context_modification_response() --- openair2/RRC/NR/rrc_gNB.c | 10 +--------- openair2/RRC/NR/rrc_gNB_mobility.c | 28 ++++++++++++++++++++++++++++ openair2/RRC/NR/rrc_gNB_mobility.h | 2 ++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 4d28d66b69..0e07b6a060 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -2579,17 +2579,9 @@ static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, i // nothing is to be done, we wait for confirmation to release the UE in the // CU/DU) if (UE->ho_context && UE->ho_context->target && UE->ho_context->source) { - nr_ho_target_cu_t *target_ctx = UE->ho_context->target; - f1_ue_data_t ue_data = cu_get_f1_ue_data(UE->rrc_ue_id); - ue_data.secondary_ue = target_ctx->du_ue_id; - ue_data.du_assoc_id = target_ctx->du->assoc_id; - bool success = cu_update_f1_ue_data(UE->rrc_ue_id, &ue_data); - DevAssert(success); - LOG_I(NR_RRC, "UE %d handover: update RNTI from %04x to %04x\n", UE->rrc_ue_id, UE->rnti, target_ctx->new_rnti); nr_ho_source_cu_t *source_ctx = UE->ho_context->source; DevAssert(source_ctx->old_rnti == UE->rnti); - UE->rnti = target_ctx->new_rnti; - UE->nr_cellid = target_ctx->du->setup_req->cell[0].info.nr_cellid; + nr_rrc_apply_target_context(UE); } } diff --git a/openair2/RRC/NR/rrc_gNB_mobility.c b/openair2/RRC/NR/rrc_gNB_mobility.c index e570682ce8..c1ba11e5ac 100644 --- a/openair2/RRC/NR/rrc_gNB_mobility.c +++ b/openair2/RRC/NR/rrc_gNB_mobility.c @@ -63,6 +63,34 @@ static void free_ho_ctx(nr_handover_context_t *ho_ctx) free(ho_ctx); } +/** @brief Apply target handover context: update F1AP associations and RNTI */ +void nr_rrc_apply_target_context(gNB_RRC_UE_t *UE) +{ + DevAssert(UE->ho_context); + DevAssert(UE->ho_context->target); + nr_ho_target_cu_t *target_ctx = UE->ho_context->target; + f1_ue_data_t ue_data = cu_get_f1_ue_data(UE->rrc_ue_id); + LOG_I(NR_RRC, + "UE %d: update CU F1AP Context DU UE ID %u => %u and RNTI %04x => %04x\n", + UE->rrc_ue_id, + ue_data.secondary_ue, + target_ctx->du_ue_id, + UE->rnti, + target_ctx->new_rnti); + + /* update F1 data: secondary UE association and DU association */ + ue_data.secondary_ue = target_ctx->du_ue_id; + ue_data.du_assoc_id = target_ctx->du->assoc_id; + bool success = cu_update_f1_ue_data(UE->rrc_ue_id, &ue_data); + DevAssert(success); + + /* update UE RNTI */ + UE->rnti = target_ctx->new_rnti; + + /* update UE NR cell ID */ + UE->nr_cellid = target_ctx->du->setup_req->cell[0].info.nr_cellid; +} + /** @brief Fill DRB to Be Setup List in F1 UE Context Setup Request (optional list) * @return 0 if list is empty, list size otherwise */ static int fill_drb_to_be_setup(const gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue, f1ap_drb_to_setup_t drbs[MAX_DRBS_PER_UE]) diff --git a/openair2/RRC/NR/rrc_gNB_mobility.h b/openair2/RRC/NR/rrc_gNB_mobility.h index 88e3548220..54691c2edd 100644 --- a/openair2/RRC/NR/rrc_gNB_mobility.h +++ b/openair2/RRC/NR/rrc_gNB_mobility.h @@ -110,4 +110,6 @@ void nr_rrc_trigger_n2_ho_target(gNB_RRC_INST *rrc, gNB_RRC_UE_t *ue); byte_array_t *get_meas_timing_config(const NR_MeasurementTimingConfiguration_t *mtc, const NR_MeasConfig_t *measConfig); +void nr_rrc_apply_target_context(gNB_RRC_UE_t *UE); + #endif /* RRC_GNB_MOBILITY_H_ */ From 4f8feaf513f3a2dd3b09db2456f06d4b24c7791b Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Fri, 19 Dec 2025 11:22:50 +0100 Subject: [PATCH 04/53] RRC: update RNTI after N2 HO acknowledge The RNTI from the target context was not updated after HO acknowledge this led to a failure in the first re-establishment after HO. This commit is introducing the function nr_rrc_apply_target_context in nr_rrc_n2_ho_acknowledge() and also updates the cell ID for consistency. --- openair2/RRC/NR/rrc_gNB_mobility.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB_mobility.c b/openair2/RRC/NR/rrc_gNB_mobility.c index c1ba11e5ac..1fc274db5b 100644 --- a/openair2/RRC/NR/rrc_gNB_mobility.c +++ b/openair2/RRC/NR/rrc_gNB_mobility.c @@ -492,10 +492,7 @@ static void nr_rrc_n2_ho_acknowledge(gNB_RRC_INST *rrc, gNB_RRC_UE_t *UE) /* this is the callback for N2 handover after F1 UE context setup response in * the handover case. Check that there was no associated DU, then set it */ AssertFatal(previous_data.secondary_ue == -1, "there was already a DU present\n"); - previous_data.secondary_ue = UE->ho_context->target->du_ue_id; - bool success = cu_update_f1_ue_data(UE->rrc_ue_id, &previous_data); - DevAssert(success); - LOG_I(NR_RRC, "Updated CU F1AP Context for UE %d, DU Id : %u\n", UE->rrc_ue_id, UE->ho_context->target->du_ue_id); + nr_rrc_apply_target_context(UE); byte_array_t hoCommand = rrc_gNB_encode_HandoverCommand(UE, rrc); if (hoCommand.len < 0) { From eebf79a097b3c26a602a05719daf3d82ac15256f Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Fri, 19 Dec 2025 13:09:55 +0100 Subject: [PATCH 05/53] Add logs to inform about cell updates in MAC-PHY and RRCReestablishment failures These logs are very helpful to identify cell configuration changes in MAC/PHY, for monitoring purposes, and to rapidly signal integrity failures during re-establishment. --- executables/nr-ue.c | 9 +++++++++ openair2/LAYER2/NR_MAC_UE/config_ue.c | 7 +++++++ openair2/RRC/NR_UE/rrc_UE.c | 14 +++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index f57b663f1e..1356e87474 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -509,6 +509,15 @@ static int handle_sync_req_from_mac(PHY_VARS_NR_UE *UE) uint64_t dl_CarrierFreq = get_carrier_frequency(fp->N_RB_DL, fp->numerology_index, cfg->dl_frequency); uint64_t ul_CarrierFreq = get_carrier_frequency(fp->N_RB_UL, fp->numerology_index, cfg->uplink_frequency); if (dl_CarrierFreq != fp->dl_CarrierFreq || ul_CarrierFreq != fp->ul_CarrierFreq) { + LOG_I(NR_PHY, + "[UE %d] RF frequency change: dl %lu->%lu Hz, ul %lu->%lu Hz (from dl_frequency=%u kHz, target_Nid_cell=%d)\n", + UE->Mod_id, + fp->dl_CarrierFreq, + dl_CarrierFreq, + fp->ul_CarrierFreq, + ul_CarrierFreq, + cfg->dl_frequency, + UE->target_Nid_cell); fp->dl_CarrierFreq = dl_CarrierFreq; fp->ul_CarrierFreq = ul_CarrierFreq; nr_rf_card_config_freq(&UE->openair0_cfg[UE->rf_map.card], ul_CarrierFreq, dl_CarrierFreq, 0); diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index c92c8225f6..18b331ff46 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -406,6 +406,13 @@ static void config_common_ue(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommon_t *scc->ssbSubcarrierSpacing, frequencyInfoDL->absoluteFrequencyPointA) / 1000; // freq in kHz + LOG_I(NR_MAC, + "[UE %d] Set dl_frequency=%u kHz (from absoluteFrequencyPointA=%ld, band=%d, scs=%ld)\n", + mac->ue_id, + cfg->carrier_config.dl_frequency, + frequencyInfoDL->absoluteFrequencyPointA, + mac->nr_band, + *scc->ssbSubcarrierSpacing); for (int i = 0; i < 5; i++) { if (i == frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) { diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 8487619092..ebf314fc83 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -833,8 +833,10 @@ static void nr_rrc_process_reconfigurationWithSync(NR_UE_RRC_INST_t *rrc, /* if the frequencyInfoDL is included, consider the target SpCell to be one on the SSB frequency indicated by the frequencyInfoDL */ const NR_DownlinkConfigCommon_t *dcc = reconfigurationWithSync->spCellConfigCommon->downlinkConfigCommon; - if (dcc && dcc->frequencyInfoDL && dcc->frequencyInfoDL->absoluteFrequencySSB) + if (dcc && dcc->frequencyInfoDL && dcc->frequencyInfoDL->absoluteFrequencySSB) { rrc->arfcn_ssb = *dcc->frequencyInfoDL->absoluteFrequencySSB; + LOG_I(NR_RRC, "UE %ld: updated ARFCN_SSB=%ld\n", rrc->ue_id, rrc->arfcn_ssb); + } // consider the target SpCell to be one with a physical cell identity indicated by the physCellId if (!reconfigurationWithSync->spCellConfigCommon->physCellId) @@ -1662,6 +1664,15 @@ static void nr_rrc_ue_decode_NR_BCCH_BCH_Message(NR_UE_RRC_INST_t *rrc, } NR_BCCH_BCH_Message_t *bcch_message = NULL; + if (rrc->phyCellID != phycellid || rrc->arfcn_ssb != ssb_arfcn) { + LOG_I(NR_RRC, + "[UE %ld] BCCH update: phyCellID %d->%u, arfcn_ssb %ld->%ld\n", + rrc->ue_id, + rrc->phyCellID, + phycellid, + rrc->arfcn_ssb, + ssb_arfcn); + } rrc->phyCellID = phycellid; rrc->arfcn_ssb = ssb_arfcn; @@ -2287,6 +2298,7 @@ static void nr_rrc_ue_process_rrcReestablishment(NR_UE_RRC_INST_t *rrc, // perform the actions upon going to RRC_IDLE as specified in 5.3.11 // with release cause 'RRC connection failure', upon which the procedure ends if (!integrity_pass) { + LOG_W(NR_RRC, "Integrity of RRCReestablishment failed, going to IDLE\n"); NR_Release_Cause_t release_cause = RRC_CONNECTION_FAILURE; nr_rrc_going_to_IDLE(rrc, release_cause, NULL); return; From 91a08b1ba735c4b070eb4066c9f046235426ff5a Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Fri, 19 Dec 2025 15:37:36 +0100 Subject: [PATCH 06/53] Fix MAC frequency overwrite during handover causing integrity check failures During N2 handover, the UE receives reconfigurationWithSync which correctly sets the target cell frequency in mac->phy_config.config_req.carrier_config via config_common_ue() call. However, when SIB1 is decoded after reconfiguration, nr_rrc_mac_config_req_sib1() calls config_common_ue_sa() which unconditionally overwrites the frequency with the command-line parameter (downlink_frequency), which corresponds to the source cell frequency. This causes a critical issue during RRC re-establishment: - The UE uses the wrong frequency (source cell) for key derivation (kgnb*) - The gNB uses the correct frequency (target cell) for key derivation - This mismatch results in different kgnb* keys on UE and gNB - Integrity check fails: "Integrity of RRCReestablishment failed, going to IDLE" Root cause: config_common_ue_sa() is used for SIB1 processing (initial cell selection) and uses ServingCellConfigCommonSIB which doesn't contain absoluteFrequencyPointA. It must derive frequency from command-line parameters. However, after handover, the frequency has already been correctly set by config_common_ue() (used for reconfigurationWithSync) which uses ServingCellConfigCommon with absolute frequency information. Solution: Modify config_common_ue_sa() to preserve the existing frequency if it's already initialized (non-zero). Only set frequency from command-line parameters during initial cell selection when dl_frequency is 0. This ensures: - Initial cell selection: frequency derived from command-line parameter, just once - After handover: frequency preserved from reconfigurationWithSync - MAC maintains its own frequency state independently The fix applies to both DL and UL frequencies to maintain consistency. There is probably room for more refactoring to the resync flow, since the functionalities in config_common_ue and config_common_ue_sa are partially overlapping and upon reconfigurationWithSync some other configurations might be applied twice. --- openair2/LAYER2/NR_MAC_UE/config_ue.c | 37 ++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index 18b331ff46..e97b7fe0c3 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -142,9 +142,21 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommo frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth); cfg->carrier_config.dl_bandwidth = get_supported_bw_mhz(mac->frequency_range, bw_index); - uint64_t dl_bw_khz = (12 * frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth) * - (15 << frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing); - cfg->carrier_config.dl_frequency = (downlink_frequency[cc_idP][0]/1000) - (dl_bw_khz>>1); + /** Only set frequency if not already initialized (e.g., from handover reconfigurationWithSync) + * MAC maintains its own frequency state, don't overwrite it with command-line parameter which + * is related to the initial cell selection. */ + if (cfg->carrier_config.dl_frequency == 0) { + // Initial cell selection: derive from command-line parameter + uint64_t dl_bw_khz = (12 * frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth) * + (15 << frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing); + cfg->carrier_config.dl_frequency = (downlink_frequency[cc_idP][0]/1000) - (dl_bw_khz>>1); + LOG_I(NR_MAC, + "[UE %d] Initial cell selection: dl_frequency=%u kHz (from command-line, band=%d, scs=%ld)\n", + mac->ue_id, + cfg->carrier_config.dl_frequency, + mac->nr_band, + frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing); + } for (int i = 0; i < 5; i++) { if (i == frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) { @@ -165,10 +177,21 @@ static void config_common_ue_sa(NR_UE_MAC_INST_t *mac, NR_ServingCellConfigCommo frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth); cfg->carrier_config.uplink_bandwidth = get_supported_bw_mhz(mac->frequency_range, bw_index); - if (frequencyInfoUL->absoluteFrequencyPointA == NULL) - cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency; - else - cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency + (uplink_frequency_offset[cc_idP][0] / 1000); + /** Only set UL frequency if not already initialized (e.g., from handover reconfigurationWithSync) + * MAC maintains its own frequency state, don't overwrite it with command-line parameter which + * is related to the initial cell selection. */ + if (cfg->carrier_config.uplink_frequency == 0) { + // Initial cell selection: derive from DL frequency + LOG_I(NR_MAC, + "Initial cell selection: uplink_frequency=%u kHz (from dl_frequency=%u kHz, uplink_frequency_offset=%u kHz)\n", + cfg->carrier_config.uplink_frequency, + cfg->carrier_config.dl_frequency, + uplink_frequency_offset[cc_idP][0]); + if (frequencyInfoUL->absoluteFrequencyPointA == NULL) + cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency; + else + cfg->carrier_config.uplink_frequency = cfg->carrier_config.dl_frequency + (uplink_frequency_offset[cc_idP][0] / 1000); + } for (int i = 0; i < 5; i++) { if (i == frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) { From 605b39bd9d65ea1bff77b70038130e21c7f44a3d Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Fri, 19 Dec 2025 16:59:18 +0100 Subject: [PATCH 07/53] Fix RRCReestablishment key derivation to use horizontal derivation Per TS 33.501 6.9.2.3.4 and Fig 6.9.2.1.1-1, when sending RRCReestablishment with nextHopChainingCount, the gNB is staying at the same NCC level (not advancing). Therefore, horizontal derivation from the currently active KgNB must be used, not vertical derivation from NH. Vertical derivation (from NH) is only used when advancing to a new NCC level, which happens during handover or masterKeyUpdate procedures. The previous implementation incorrectly used vertical derivation from NH whenever nh_ncc > 0, which caused key mismatch between gNB and UE during reestablishment after handover, leading to integrity check failures. This fix ensures both gNB and UE use horizontal derivation when nextHopChainingCount matches the current NCC level, aligning with the specification's "virtual NH at NCC=0" model where: - Horizontal derivation = derive KNG-RAN* from currently active KgNB - Vertical derivation = derive KNG-RAN* from NH (only when advancing NCC) --- openair2/RRC/NR/rrc_gNB.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 0e07b6a060..285740096a 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -1092,7 +1092,13 @@ static void rrc_gNB_generate_RRCReestablishment(rrc_gNB_ue_context_t *ue_context const f1ap_served_cell_info_t *cell_info = &du->setup_req->cell[0].info; uint32_t ssb_arfcn = get_ssb_arfcn(du); LOG_I(NR_RRC, "Reestablishment update key pci=%d, earfcn_dl=%u\n", cell_info->nr_pci, ssb_arfcn); - nr_derive_key_ng_ran_star(cell_info->nr_pci, ssb_arfcn, ue_p->nh_ncc > 0 ? ue_p->nh : ue_p->kgnb, ue_p->kgnb); + + /* Per TS 33.501 6.9.2.3.4: When sending RRCReestablishment with nextHopChainingCount, + * we're staying at the same NCC level (not advancing), so use horizontal derivation + * from the currently active KgNB. Vertical derivation (from NH) is only used when + * advancing to a new NCC level, which happens during handover or masterKeyUpdate. */ + const uint8_t *base_key = ue_p->kgnb; + nr_derive_key_ng_ran_star(cell_info->nr_pci, ssb_arfcn, base_key, ue_p->kgnb); int size = do_RRCReestablishment(ue_context_pP->ue_context.nh_ncc, buffer, NR_RRC_BUF_SIZE, xid); LOG_A(NR_RRC, "Send RRCReestablishment [%d bytes] to RNTI %04x\n", size, ue_p->rnti); From a1712ce774105d1f9734d0dc6dbc1277beac72e1 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 27 Nov 2025 16:14:36 +0100 Subject: [PATCH 08/53] fix utf-ascii problem and clamp text to 80 columns --- doc/handover-tutorial.md | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/doc/handover-tutorial.md b/doc/handover-tutorial.md index 41d6e53aa7..461f9bd568 100644 --- a/doc/handover-tutorial.md +++ b/doc/handover-tutorial.md @@ -209,8 +209,8 @@ instead of waiting for UE measurement report.) Our CI setup consists of: - 2 USRPs B210 that are synchronized by connecting them to an Octoclock over 10MHz refrence and a PPS signal. The RU hosts are synchronized via NTP. -- Mini-Circuits RC4DAT-6G-60 programmable attenuator. To control the digital attenuator, - a Python script was developed `ci-scripts/attenuatorctl.py`. +- Mini-Circuits RC4DAT-6G-60 programmable attenuator. To control the digital + attenuator, a Python script was developed `ci-scripts/attenuatorctl.py`. - Quectel RM520 as a UE. - The setup is run using Docker `ci-scripts/yaml_files/5g_sa_f1_b210_ho`. @@ -328,7 +328,8 @@ nr_measurement_configuration = { }; ``` -`@include` this configuration file inside the gNB section of CU file as shown below. +`@include` this configuration file inside the gNB section of CU file as shown +below. ``` plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff })}); @@ -390,7 +391,7 @@ are as follows: on UTC time or a timer-based solution, which can also be applied jointly (or not) with another trigger as the measurement-based trigger. The timer-based handover trigger considers the deterministic satellite movement to predict - the time duration for which the satellite’s footprint covers a certain zone. + the time duration for which the satellite's footprint covers a certain zone. - **Timing advance value-based triggering**: This method uses the timing advance value (independently or jointly with another trigger) to trigger a @@ -432,14 +433,14 @@ We assume: * Two independent gNBs connected to the same 5GC via N2 interface. * A UE initially connected to gNB-PCI0, which will be handed over to gNB-PCI1. -* Handover is triggered by either a decision based measurement event (e.g. A3) or -telnet command. +* Handover is triggered by either a decision based measurement event (e.g. A3) +or telnet command. ## Steps to run N2 handover with OAI UE **Note for same-machine setup:** When running both gNBs on the same machine, -you need to assign a unique IP address to the second gNB to avoid network conflicts. -For example: +you need to assign a unique IP address to the second gNB to avoid network +conflicts. For example: ```sh sudo ip addr add 192.168.71.180/24 dev rfsim5g-public @@ -490,15 +491,20 @@ From gNB-PCI0, trigger handover on target gNB with PCI 1 for UE ID 1: ```sh echo ci trigger_n2_ho 1,1 | nc 127.0.0.1 9090 && echo ``` -where the input parameters correspond to the PCI of the neighbour cell and the RRC ID of the UE. +where the input parameters correspond to the PCI of the neighbor cell and the +RRC ID of the UE. This will initiate the N2 handover on the source gNB. ## Neighbour list and measurement configuration -Make sure the configuration file contains a neighbour list and measurement configuration, e.g. [neighbour-config-rfsim.conf](../../ci-scripts/conf_files/neighbour-config.conf). -This configuration can also be present in a different file and included in the gNB configuration file with `@include "neighbour-config-rfsim.conf"`. +Make sure the configuration file contains a neighbour list and measurement +configuration, e.g. [neighbour-config-rfsim.conf](../../ci-scripts/conf_files/neighbour-config.conf). +This configuration can also be present in a different file and included in the +gNB configuration file with `@include "neighbour-config-rfsim.conf"`. -For each gNB there is a `neighbour_cell_configuration` linked to its serving cell ID. +For each gNB there is a `neighbour_cell_configuration` linked to its serving +cell ID. -See the example above for `neighbour-config-ho.conf`. The same configuration is for both F1 and N2 handover. +See the example above for `neighbour-config-ho.conf`. The same configuration +is for both F1 and N2 handover. From f917a2a2faed2342ce6159bbafc921a042a7202b Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 28 Nov 2025 11:06:18 +0100 Subject: [PATCH 09/53] fix: use correct variables' names - timeToTrigger must be named time_to_trigger - cell_id must be named physCellId --- doc/handover-tutorial.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/handover-tutorial.md b/doc/handover-tutorial.md index 461f9bd568..92762f7d88 100644 --- a/doc/handover-tutorial.md +++ b/doc/handover-tutorial.md @@ -241,14 +241,14 @@ The below configuration further enables periodic measurements, A2 event Better than Serving"). The A2 event can be disabled by setting `enable = 0`. The A3 event cannot be disabled as of now. It can be made -specific to cells or set to `cell_id = -1` which means "any cell". +specific to cells or set to `physCellId = -1` which means "any cell". `hysteresis` is a margin added to the serving cell measurements to prevent unnecessary or frequent handovers. It ensures that the neighbouring cell must show sufficiently better signal quality before a handover is triggered. It is an integer between 0 and 30. -`timeToTrigger` the time during which specific criteria for the event +`time_to_trigger` the time during which specific criteria for the event needs to be met in order to trigger a measurement report. It is an enumerated parameter and in the configuration below it is set to 1 which corresponds to `ms40` or 40 milliseconds. @@ -312,17 +312,17 @@ nr_measurement_configuration = { }; A2 = { - enable = 1; - threshold = 60; - timeToTrigger = 1; + enable = 1; + threshold = 60; + time_to_trigger = 1; }; A3 = ( { - cell_id = -1; - offset = 10; - hysteresis = 0; - timeToTrigger = 1; + physCellId = -1; + offset = 10; + hysteresis = 0; + time_to_trigger = 1; } ) }; From b91a4c33bd48a501d86c76eb7c116f57c587f300 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 28 Nov 2025 11:10:52 +0100 Subject: [PATCH 10/53] fix configuration files 'timeToTrigger' has to be 'time_to_trigger'. For A3 events, 'cell_id' has to be 'physCellId' and the value has to be the one of the physical cell ID. --- ci-scripts/conf_files/neighbour-config-ho.conf | 6 +++--- ci-scripts/conf_files/neighbour-config.conf | 6 +++--- .../GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ci-scripts/conf_files/neighbour-config-ho.conf b/ci-scripts/conf_files/neighbour-config-ho.conf index 2490ce1883..07d58e14e5 100644 --- a/ci-scripts/conf_files/neighbour-config-ho.conf +++ b/ci-scripts/conf_files/neighbour-config-ho.conf @@ -42,13 +42,13 @@ nr_measurement_configuration = { A2 = { enable = 1; threshold = 110; - timeToTrigger = 1; + time_to_trigger = 1; }; A3 = ({ - cell_id = -1; #Default + physCellId = -1; #Default offset = 10; hysteresis = 0; - timeToTrigger = 1 + time_to_trigger = 1 }) }; diff --git a/ci-scripts/conf_files/neighbour-config.conf b/ci-scripts/conf_files/neighbour-config.conf index a498dbf157..9a05f01486 100644 --- a/ci-scripts/conf_files/neighbour-config.conf +++ b/ci-scripts/conf_files/neighbour-config.conf @@ -57,19 +57,19 @@ nr_measurement_configuration = { A2 = { enable = 1; threshold = 60; - timeToTrigger = 1; + time_to_trigger = 1; }; A3 = ({ physCellId = -1; #Default offset = 10; hysteresis = 0; - timeToTrigger = 1 + time_to_trigger = 1 }, { physCellId = 2; offset = 5; hysteresis = 1; - timeToTrigger = 2 + time_to_trigger = 2 }) }; diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf index cff9d2b293..641fbb2003 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/neighbour-config-rfsim.conf @@ -57,21 +57,21 @@ nr_measurement_configuration = { A2 = { enable = 1; threshold = 60; - timeToTrigger = 1; + time_to_trigger = 1; }; A3 = ( { - cell_id = 720898; # neighbour of gNB 0xe00 + physCellId = 1; # neighbour of gNB 0xe00 offset = 10; hysteresis = 0; - timeToTrigger = 1; + time_to_trigger = 1; }, { - cell_id = 12345678; # neighbour of gNB 0xb00 + physCellId = 0; # neighbour of gNB 0xb00 offset = 5; hysteresis = 1; - timeToTrigger = 2; + time_to_trigger = 2; } ); }; From 47ff7010a48e8cc6d8f5e2a5bb8deae157ca1512 Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Fri, 7 Nov 2025 12:35:45 +0100 Subject: [PATCH 11/53] Update threadCreate - if the name is too long, the thread name is shortened to maximum pthread name (16 characters). --- common/utils/system.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/utils/system.c b/common/utils/system.c index 270c3ae321..e38d97768a 100644 --- a/common/utils/system.c +++ b/common/utils/system.c @@ -282,8 +282,13 @@ void threadCreate(pthread_t* t, void * (*func)(void*), void * param, char* name, ret=pthread_create(t, &attr, func, param); AssertFatal(ret == 0, "Error in pthread_create(): ret: %d, errno: %d\n", ret, errno); - - pthread_setname_np(*t, name); + + char short_name[16]; + strncpy(short_name, name, sizeof(short_name) - 1); + short_name[sizeof(short_name) - 1] = '\0'; + ret = pthread_setname_np(*t, short_name); + AssertFatal(ret == 0, "Error in pthread_setname_np(): ret: %d, errno: %d\n", ret, errno); + if (affinity != -1 ) { cpu_set_t cpuset; CPU_ZERO(&cpuset); From 11ae7e79930707550895370d8bc2eb4184bb94f6 Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Thu, 8 Jan 2026 13:01:20 +0100 Subject: [PATCH 12/53] Make gpd config utility global Make gpd a global utility macro for reading config/command line parameters. Add a corresponding function with full name for clarity, keep the short name for the macro for backward compatibility and ease of use. The main benefit of gpd/config_get_paramdef_from_name macro/function is that it does not require maintaining a separate parameter index list. --- common/config/config_userapi.c | 16 ++++++++++++---- common/config/config_userapi.h | 5 ++++- radio/fhi_72/mplane/init-mplane.c | 8 -------- radio/fhi_72/oran-config.c | 8 -------- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c index 1a831d28c5..7c92a611de 100644 --- a/common/config/config_userapi.c +++ b/common/config/config_userapi.c @@ -105,13 +105,14 @@ int config_execcheck(configmodule_interface_t *cfg, paramdef_t *params, int nump return st; } -int config_paramidx_fromname(paramdef_t *params, int numparams, const char *name) { - for (int i=0; i= 0 && idx < num, "Invalid parameter name %s\n", name); + return &pd[idx]; +} diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h index 00818c4976..3aeeeec3c1 100644 --- a/common/config/config_userapi.h +++ b/common/config/config_userapi.h @@ -49,7 +49,9 @@ extern configmodule_interface_t *uniqCfg; #define CONFIG_SETRTFLAG(P) if (config_get_if()) { config_get_if()->rtflags |= P; } #define CONFIG_CLEARRTFLAG(P) if (config_get_if()) { config_get_if()->rtflags &= (~P); } #define CONFIG_ISPARAMFLAGSET(P,F) ( !!(P.paramflags & F)) -int config_paramidx_fromname(paramdef_t *params, int numparams, const char *name); +#define gpd(pd_array, nump, name) config_get_paramdef_from_name(pd_array, nump, name) + +int config_paramidx_fromname(const paramdef_t *params, int numparams, const char *name); /* utility functions, to be used by configuration module and/or configuration libraries */ void config_printhelp(paramdef_t *, int numparams, const char *prefix); @@ -75,6 +77,7 @@ int config_check_modify_integer(configmodule_interface_t *cfg, paramdef_t *param int config_check_intrange(configmodule_interface_t *cfg, paramdef_t *param); int config_check_strval(configmodule_interface_t *cfg, paramdef_t *param); int config_checkstr_assign_integer(configmodule_interface_t *cfg, paramdef_t *param); +const paramdef_t *config_get_paramdef_from_name(const paramdef_t *pd, int num, const char *name); #define CONFIG_GETCONFFILE (config_get_if()->cfgP[0]) diff --git a/radio/fhi_72/mplane/init-mplane.c b/radio/fhi_72/mplane/init-mplane.c index fcd908562a..7e0c105463 100644 --- a/radio/fhi_72/mplane/init-mplane.c +++ b/radio/fhi_72/mplane/init-mplane.c @@ -72,14 +72,6 @@ static void ly_print_clb(LY_LOG_LEVEL level, const char *msg, const char *path) } } -static const paramdef_t *gpd(const paramdef_t *pd, int num, const char *name) -{ - /* the config module does not know const-correctness... */ - int idx = config_paramidx_fromname((paramdef_t *)pd, num, (char *)name); - DevAssert(idx >= 0); - return &pd[idx]; -} - bool init_mplane(ru_session_list_t *ru_session_list) { paramdef_t fhip[] = ORAN_GLOBALPARAMS_DESC; diff --git a/radio/fhi_72/oran-config.c b/radio/fhi_72/oran-config.c index 51374e79fe..3a8e60ebdb 100644 --- a/radio/fhi_72/oran-config.c +++ b/radio/fhi_72/oran-config.c @@ -440,14 +440,6 @@ void print_fh_config(const struct xran_fh_config *fh_config) #endif } -static const paramdef_t *gpd(const paramdef_t *pd, int num, const char *name) -{ - /* the config module does not know const-correctness... */ - int idx = config_paramidx_fromname((paramdef_t *)pd, num, (char *)name); - DevAssert(idx >= 0); - return &pd[idx]; -} - static uint64_t get_u64_mask(const paramdef_t *pd) { DevAssert(pd != NULL); From d4e3c5d384805557054b6d447a41a86694f079c8 Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 19 Dec 2025 09:59:36 +0100 Subject: [PATCH 13/53] define speed of light in utils to avoid multiple local definitions --- common/platform_constants.h | 1 + openair1/PHY/NR_UE_TRANSPORT/nr_ntn_l1.c | 2 -- openair1/SIMULATION/TOOLS/random_channel.c | 3 +-- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 3 +-- radio/rfsimulator/apply_channelmod.c | 2 +- radio/rfsimulator/simulator.cpp | 4 ++-- 6 files changed, 6 insertions(+), 9 deletions(-) diff --git a/common/platform_constants.h b/common/platform_constants.h index 4000ffb001..2faadc3dcd 100644 --- a/common/platform_constants.h +++ b/common/platform_constants.h @@ -100,4 +100,5 @@ // SDAP #define MAX_QOS_FLOWS 64 +#define SPEED_OF_LIGHT 299792458 // in m/s #endif /* __PLATFORM_CONSTANTS_H__ */ diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ntn_l1.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ntn_l1.c index 51031d5449..deae817a36 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ntn_l1.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ntn_l1.c @@ -48,8 +48,6 @@ void fix_ntn_epoch_hfn(PHY_VARS_NR_UE *UE, int hfn, int frame) LOG_I(PHY, "setting epoch_hfn = %d\n", *epoch_hfn); } -#define SPEED_OF_LIGHT 299792458 - // calculate TA and Doppler based on the NTN-Config, if abs_subframe_tx < 0 then apply only Doppler void apply_ntn_timing_advance_and_doppler(PHY_VARS_NR_UE *UE, const NR_DL_FRAME_PARMS *fp, int abs_subframe_tx) { diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c index 92e191b2dc..cf973f5d84 100644 --- a/openair1/SIMULATION/TOOLS/random_channel.c +++ b/openair1/SIMULATION/TOOLS/random_channel.c @@ -462,8 +462,7 @@ void get_cexp_doppler(struct complexd *cexp_doppler, channel_desc_t *chan_desc, // TS 38.104 - Table G.3-1 uint16_t Dmin = 2; uint16_t Ds = 300; - double c = 299792458; - double v = chan_desc->max_Doppler * (c / (double)chan_desc->center_freq); + double v = chan_desc->max_Doppler * ((double) SPEED_OF_LIGHT / (double)chan_desc->center_freq); #ifdef DOPPLER_DEBUG printf("v = %f\n", v); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index c3cc4088ed..5f80703c21 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -1542,8 +1542,7 @@ static void nr_generate_Msg2(module_id_t module_idP, float T_c_ns = 0.509; int numerology = ul_bwp->scs; float rtt_ns = T_c_ns * 16 * 64 / (1 << numerology) * ra->timing_offset; - float speed_of_light_in_meters_per_second = 299792458.0f; - float distance_in_meters = speed_of_light_in_meters_per_second * rtt_ns / 1000 / 1000 / 1000 / 2; + float distance_in_meters = (float) SPEED_OF_LIGHT * rtt_ns / 1000 / 1000 / 1000 / 2; LOG_A(NR_MAC, "UE %04x: %d.%d Generating RA-Msg2 DCI, RA RNTI 0x%x, state %d, preamble_index(RAPID) %d, " "timing_offset = %d (estimated distance %.1f [m])\n", diff --git a/radio/rfsimulator/apply_channelmod.c b/radio/rfsimulator/apply_channelmod.c index 3f2e8d85c1..d1d1042451 100644 --- a/radio/rfsimulator/apply_channelmod.c +++ b/radio/rfsimulator/apply_channelmod.c @@ -65,7 +65,7 @@ void update_channel_model(channel_desc_t *channelDesc, uint64_t TS) const double pos_ue_y = 0; const double pos_ue_z = radius_earth; - const double c = 299792458; // m/s + const double c = (double) SPEED_OF_LIGHT; if (channelDesc->is_uplink) { const double dir_ue_sat_x = pos_sat_x - pos_ue_x; diff --git a/radio/rfsimulator/simulator.cpp b/radio/rfsimulator/simulator.cpp index 65e32216c4..ef6be135e6 100644 --- a/radio/rfsimulator/simulator.cpp +++ b/radio/rfsimulator/simulator.cpp @@ -713,7 +713,7 @@ static int rfsimu_setdistance_cmd(char *buff, int debug, telnet_printfunc_t prnt rfsimulator_state_t *t = (rfsimulator_state_t *)arg; const double sample_rate = t->sample_rate; - const double c = 299792458; /* 3e8 */ + const double c = (double) SPEED_OF_LIGHT; const uint64_t new_offset = (double)distance * sample_rate / c; const double new_distance = (double)new_offset * c / sample_rate; @@ -749,7 +749,7 @@ static int rfsimu_getdistance_cmd(char *buff, int debug, telnet_printfunc_t prnt rfsimulator_state_t *t = (rfsimulator_state_t *)arg; const double sample_rate = t->sample_rate; - const double c = 299792458; /* 3e8 */ + const double c = (double) SPEED_OF_LIGHT; for (int i = 0; i < MAX_FD_RFSIMU; i++) { buffer_t *b = &t->buf[i]; From 3684c3e0e8dd0a99bbee14811011de179de7df3a Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Fri, 17 Oct 2025 18:01:31 +0530 Subject: [PATCH 14/53] Declare ue_srs_procedures_nr in a header file to use in nr_srssim --- openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h | 6 ++++++ openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h index 2a24902295..ab51d118ff 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -178,6 +178,12 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT], bool no_phase_pre_comp); +bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, + const UE_nr_rxtx_proc_t *proc, + c16_t **txdataF, + nr_phy_data_tx_t *phy_data, + bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT]); + void clean_UE_harq(PHY_VARS_NR_UE *UE); void nr_dlsch_unscrambling(int16_t* llr, diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 68c0541e3a..745f4961bf 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -304,7 +304,7 @@ static void configure_srs_info(fapi_nr_ul_config_srs_pdu *srs_config_pdu, nr_srs * send srs according to current configuration * *********************************************************************/ -static bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, +bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, c16_t **txdataF, nr_phy_data_tx_t *phy_data, From 4b102ea237949bc658fcb0a6ccfc8b12db2ed536 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Fri, 17 Oct 2025 18:13:33 +0530 Subject: [PATCH 15/53] Make SRS receive procedures as a function --- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 14 ++ openair1/SCHED_NR/phy_procedures_nr_gNB.c | 175 ++++++++++-------- 2 files changed, 116 insertions(+), 73 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h index 29fca5975e..1a0fabf14e 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h @@ -231,6 +231,20 @@ int nr_get_srs_signal(PHY_VARS_gNB *gNB, c16_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], c16_t srs_received_noise[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)]); +void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, + int frame_rx, + int slot_rx, + uint8_t nb_antennas_rx, + uint8_t N_ap, + uint8_t N_symb_SRS, + uint16_t ofdm_symbol_size, + NR_gNB_SRS_t *srs, + nr_srs_info_t *nr_srs_info, + int *srs_est, + c16_t srs_estimated_channel_freq[][N_ap][ofdm_symbol_size * N_symb_SRS], + c16_t srs_estimated_channel_time[][N_ap][ofdm_symbol_size], + int16_t *snr_per_rb); + int get_nr_prach_duration(uint8_t prach_format); void free_nr_prach_entry(prach_list_t *, prach_item_t *); diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 1271734866..69dc6ad3e7 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -857,6 +857,81 @@ static bool check_and_configure_srs_info(nfapi_nr_srs_pdu_t *srs_config_pdu, nr_ return false; } +void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, + int frame_rx, + int slot_rx, + uint8_t nb_antennas_rx, + uint8_t N_ap, + uint8_t N_symb_SRS, + uint16_t ofdm_symbol_size, + NR_gNB_SRS_t *srs, + nr_srs_info_t *nr_srs_info, + int *srs_est, + c16_t srs_estimated_channel_freq[][N_ap][ofdm_symbol_size * N_symb_SRS], + c16_t srs_estimated_channel_time[][N_ap][ofdm_symbol_size], + int16_t *snr_per_rb) +{ + NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; + nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; + c16_t srs_received_signal[nb_antennas_rx][ofdm_symbol_size * N_symb_SRS]; + c16_t srs_received_noise[nb_antennas_rx][ofdm_symbol_size * N_symb_SRS]; + c16_t srs_estimated_channel_time_shifted[nb_antennas_rx][N_ap][ofdm_symbol_size]; + + start_meas(&gNB->generate_srs_stats); + + if (check_and_configure_srs_info(srs_pdu, nr_srs_info)) { + generate_srs_nr(frame_parms, nr_srs_info->srs_generated_signal, 0, srs_pdu->bwp_start, nr_srs_info, AMP, frame_rx, slot_rx); + } + + stop_meas(&gNB->generate_srs_stats); + c16_t **rxdataF = gNB->common_vars.rxdataF[srs->beam_nb]; + start_meas(&gNB->get_srs_signal_stats); + *srs_est = nr_get_srs_signal(gNB, rxdataF, frame_rx, slot_rx, srs_pdu, nr_srs_info, srs_received_signal, srs_received_noise); + stop_meas(&gNB->get_srs_signal_stats); + + if (*srs_est >= 0) { + start_meas(&gNB->srs_channel_estimation_stats); + nr_srs_channel_estimation(gNB, + frame_rx, + slot_rx, + srs_pdu, + nr_srs_info, + (const c16_t **)nr_srs_info->srs_generated_signal, + srs_received_signal, + srs_received_noise, + srs_estimated_channel_freq, + srs_estimated_channel_time, + srs_estimated_channel_time_shifted, + snr_per_rb, + &gNB->srs->snr); + stop_meas(&gNB->srs_channel_estimation_stats); + } + + T(T_GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE, + T_INT(0), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(0), + T_INT(0), + T_BUFFER(srs_estimated_channel_freq[0][0], ofdm_symbol_size * sizeof(int32_t))); + + T(T_GNB_PHY_UL_TIME_CHANNEL_ESTIMATE, + T_INT(0), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(0), + T_INT(0), + T_BUFFER(srs_estimated_channel_time_shifted[0][0], ofdm_symbol_size * sizeof(int32_t))); + + T(T_GNB_PHY_UL_SNR_ESTIMATE, + T_INT(0), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(0), + T_INT(0), + T_BUFFER(snr_per_rb, srs_pdu->bwp_size * sizeof(int16_t))); +} + int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, NR_UL_IND_t *UL_INFO) { /* those variables to log T_GNB_PHY_PUCCH_PUSCH_IQ only when we try to decode */ @@ -865,9 +940,9 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N int pusch_DTX = 0; const NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; - const int symb_sz = frame_parms->ofdm_symbol_size; + const uint16_t ofdm_symbol_size = frame_parms->ofdm_symbol_size; const int nb_symb = frame_parms->symbols_per_slot; - const int ant = gNB->frame_parms.nb_antennas_rx; + const uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX,1); LOG_D(PHY,"phy_procedures_gNB_uespec_RX frame %d, slot %d\n",frame_rx,slot_rx); { @@ -892,7 +967,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N gNB_I0_measurements(gNB, slot_rx, first_symb, num_symb, rb_mask_ul); } - const int soffset = (slot_rx & 3) * nb_symb * symb_sz; + const int soffset = (slot_rx & 3) * nb_symb * ofdm_symbol_size; start_meas(&gNB->phy_proc_rx); for (int i = 0; i < gNB->max_nb_pucch; i++) { @@ -911,7 +986,8 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N uci->pdu_type = NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE; uci->pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_0_1_t); nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_pdu_format0 = &uci->pucch_pdu_format_0_1; - int offset = pucch_pdu->start_symbol_index * symb_sz + (frame_parms->first_carrier_offset + pucch_pdu->prb_start * 12); + int offset = + pucch_pdu->start_symbol_index * ofdm_symbol_size + (frame_parms->first_carrier_offset + pucch_pdu->prb_start * 12); LOG_D(NR_PHY, "frame %d, slot %d: PUCCH signal energy %d\n", frame_rx, @@ -988,7 +1064,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[ULSCH_id]; pusch_vars->ulsch_power_tot = 0; pusch_vars->ulsch_noise_power_tot = 0; - for (int aarx = 0; aarx < ant; aarx++) { + for (int aarx = 0; aarx < nb_antennas_rx; aarx++) { pusch_vars->ulsch_power[aarx] /= num_dmrs; pusch_vars->ulsch_power_tot += pusch_vars->ulsch_power[aarx]; pusch_vars->ulsch_noise_power[aarx] /= num_dmrs; @@ -1063,80 +1139,33 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N start_meas(&gNB->rx_srs_stats); + uint8_t N_symb_SRS = 1 << srs->srs_pdu.num_symbols; + uint8_t N_ap = 1 << srs->srs_pdu.num_ant_ports; + int16_t snr_per_rb[srs->srs_pdu.bwp_size]; nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; - uint8_t N_symb_SRS = 1 << srs_pdu->num_symbols; - c16_t srs_received_signal[ant][symb_sz * N_symb_SRS]; - c16_t srs_received_noise[ant][symb_sz * N_symb_SRS]; - c16_t srs_estimated_channel_freq[ant][1 << srs_pdu->num_ant_ports][symb_sz * N_symb_SRS] __attribute__((aligned(32))); - c16_t srs_estimated_channel_time[ant][1 << srs_pdu->num_ant_ports][symb_sz] __attribute__((aligned(32))); - c16_t srs_estimated_channel_time_shifted[ant][1 << srs_pdu->num_ant_ports][symb_sz]; - int16_t snr_per_rb[srs_pdu->bwp_size]; + int srs_est; - start_meas(&gNB->generate_srs_stats); + c16_t srs_estimated_channel_freq[nb_antennas_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); + c16_t srs_estimated_channel_time[nb_antennas_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); - if (check_and_configure_srs_info(srs_pdu, gNB->nr_srs_info[i])) { - generate_srs_nr(frame_parms, - gNB->nr_srs_info[i]->srs_generated_signal, - 0, - srs_pdu->bwp_start, - gNB->nr_srs_info[i], - AMP, - frame_rx, - slot_rx); - } - stop_meas(&gNB->generate_srs_stats); - c16_t **rxdataF = gNB->common_vars.rxdataF[srs->beam_nb]; - start_meas(&gNB->get_srs_signal_stats); - int srs_est = - nr_get_srs_signal(gNB, rxdataF, frame_rx, slot_rx, srs_pdu, gNB->nr_srs_info[i], srs_received_signal, srs_received_noise); - stop_meas(&gNB->get_srs_signal_stats); - - if (srs_est >= 0) { - start_meas(&gNB->srs_channel_estimation_stats); - nr_srs_channel_estimation(gNB, - frame_rx, - slot_rx, - srs_pdu, - gNB->nr_srs_info[i], - (const c16_t **)gNB->nr_srs_info[i]->srs_generated_signal, - srs_received_signal, - srs_received_noise, - srs_estimated_channel_freq, - srs_estimated_channel_time, - srs_estimated_channel_time_shifted, - snr_per_rb, - &gNB->srs->snr); - stop_meas(&gNB->srs_channel_estimation_stats); - } + nr_srs_rx_procedures(gNB, + frame_rx, + slot_rx, + nb_antennas_rx, + N_ap, + N_symb_SRS, + ofdm_symbol_size, + srs, + gNB->nr_srs_info[i], + &srs_est, + srs_estimated_channel_freq, + srs_estimated_channel_time, + snr_per_rb); if ((gNB->srs->snr * 10) < gNB->srs_thres) { srs_est = -1; } - T(T_GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE, - T_INT(0), - T_INT(srs_pdu->rnti), - T_INT(frame_rx), - T_INT(0), - T_INT(0), - T_BUFFER(srs_estimated_channel_freq[0][0], symb_sz * sizeof(int32_t))); - - T(T_GNB_PHY_UL_TIME_CHANNEL_ESTIMATE, - T_INT(0), - T_INT(srs_pdu->rnti), - T_INT(frame_rx), - T_INT(0), - T_INT(0), - T_BUFFER(srs_estimated_channel_time_shifted[0][0], symb_sz * sizeof(int32_t))); - - T(T_GNB_PHY_UL_SNR_ESTIMATE, - T_INT(0), - T_INT(srs_pdu->rnti), - T_INT(frame_rx), - T_INT(0), - T_INT(0), - T_BUFFER(snr_per_rb, srs_pdu->bwp_size * sizeof(int16_t))); - UL_INFO->srs_ind.sfn = frame_rx; UL_INFO->srs_ind.slot = slot_rx; @@ -1234,7 +1263,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N srs_pdu, gNB->nr_srs_info[i], srs_pdu->srs_parameters_v4.iq_representation, - ant, + nb_antennas_rx, srs_pdu->srs_parameters_v4.num_total_ue_antennas, srs_pdu->srs_parameters_v4.prg_size, srs_pdu->srs_parameters_v4.srs_bandwidth_size / srs_pdu->srs_parameters_v4.prg_size, @@ -1306,7 +1335,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N T(T_GNB_PHY_PUCCH_PUSCH_IQ, T_INT(frame_rx), T_INT(slot_rx), - T_BUFFER(&gNB->common_vars.rxdataF[0][0][0], nb_symb * symb_sz * 4)); + T_BUFFER(&gNB->common_vars.rxdataF[0][0][0], nb_symb * ofdm_symbol_size * 4)); } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX,0); From 5803e2037e725c00178d14eb61fb0ef90c67b5b0 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Fri, 17 Oct 2025 18:16:44 +0530 Subject: [PATCH 16/53] bugfix to avoid error after enabling DEBUG_CH --- openair1/SIMULATION/TOOLS/multipath_channel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SIMULATION/TOOLS/multipath_channel.c b/openair1/SIMULATION/TOOLS/multipath_channel.c index f17c2166a3..aeaa4f811f 100644 --- a/openair1/SIMULATION/TOOLS/multipath_channel.c +++ b/openair1/SIMULATION/TOOLS/multipath_channel.c @@ -68,7 +68,7 @@ void __attribute__ ((no_sanitize_address)) multipath_channel(channel_desc_t *des #ifdef DEBUG_CH - for (l = 0; l<(int)desc->channel_length; l++) { + for (int l = 0; l<(int)desc->channel_length; l++) { printf("%p (%f,%f) ",desc->ch[0],desc->ch[0][l].x,desc->ch[0][l].y); } @@ -168,7 +168,7 @@ void __attribute__ ((no_sanitize_address)) multipath_channel(channel_desc_t *des } #ifdef DEBUG_CH - for (l = 0; l<(int)desc->channel_length; l++) { + for (int l = 0; l<(int)desc->channel_length; l++) { printf("ch[%i] = (%f, %f)\n", l, desc->ch[0][l].r, desc->ch[0][l].i); } #endif From 3d68a44da068cc0a2490bcbd6e74d1a74a6d27d7 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Fri, 17 Oct 2025 18:25:18 +0530 Subject: [PATCH 17/53] Introduce SRS physical simulator --- CMakeLists.txt | 15 +- cmake_targets/build_oai | 2 +- .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 2 + openair1/SIMULATION/NR_PHY/srssim.c | 706 ++++++++++++++++++ 4 files changed, 723 insertions(+), 2 deletions(-) create mode 100644 openair1/SIMULATION/NR_PHY/srssim.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 2730c510e0..14d90a4c3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2037,6 +2037,19 @@ target_link_libraries(nr_ulsim PRIVATE ) target_link_libraries(nr_ulsim PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs) +add_executable(nr_srssim + ${OPENAIR1_DIR}/SIMULATION/NR_PHY/srssim.c + ${OPENAIR_DIR}/executables/softmodem-common.c + ${NFAPI_USER_DIR}/nfapi.c + ${NFAPI_USER_DIR}/gnb_ind_vars.c + ${PHY_INTERFACE_DIR}/queue_t.c + ) + +target_link_libraries(nr_srssim PRIVATE + -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_UE_NR MAC_NR_COMMON nr_rrc L2_NR -lz -Wl,--end-group + m pthread ITTI dl nr_ue_phy_meas physim_common + ) + # these simulators do not compile: # dlsim_tm7 pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim foreach(myExe dlsim ulsim) @@ -2085,7 +2098,7 @@ if (${T_TRACER}) nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim - nr_ulschsim ldpctest polartest smallblocktest + nr_ulschsim ldpctest polartest smallblocktest nr_srssim #all "add_library" definitions ITTI lte_rrc nr_rrc s1ap x2ap m2ap m3ap f1ap params_libconfig diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 6f61196e7e..0e4d092916 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -300,7 +300,7 @@ function main() { SIMUS_PHY=1 CMAKE_CMD="$CMAKE_CMD -DENABLE_PHYSIM_TESTS=ON" # TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim - TARGET_LIST="$TARGET_LIST dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim" + TARGET_LIST="$TARGET_LIST dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim nr_srssim" echo_info "Will compile dlsim, ulsim, ..." shift;; -V | --vcd) diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c index a1fde35b00..f48e1101eb 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -59,6 +59,8 @@ int nr_est_timing_advance_srs(const NR_DL_FRAME_PARMS *frame_parms, timing_advance = timing_advance - frame_parms->ofdm_symbol_size; } + LOG_I(NR_PHY, "Estimated SRS ToA %d\n", timing_advance); + // Scale the 16 factor in N_TA calculation in 38.213 section 4.2 according to the used FFT size const uint16_t bw_scaling = frame_parms->ofdm_symbol_size >> 7; diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c new file mode 100644 index 0000000000..9f89d29b1d --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -0,0 +1,706 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#include +#include +#include "common/utils/nr/nr_common.h" +#include "common/utils/var_array.h" +#define inMicroS(a) (((double)(a)) / (get_cpu_freq_GHz() * 1000.0)) +#include "SIMULATION/LTE_PHY/common_sim.h" +#include "common/utils/assertions.h" +#include "PHY/INIT/nr_phy_init.h" +#include "PHY/MODULATION/nr_modulation.h" +#include "PHY/MODULATION/modulation_common.h" +#include "PHY/NR_REFSIG/ul_ref_seq_nr.h" +#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h" +#include "PHY/NR_TRANSPORT/nr_transport_proto.h" +#include "PHY/NR_UE_TRANSPORT/nr_transport_ue.h" +#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h" +#include "PHY/NR_ESTIMATION/nr_ul_estimation.h" +#include "PHY/phy_vars_nr_ue.h" +#include "e1ap_messages_types.h" +#include "executables/nr-uesoftmodem.h" +#include "SIMULATION/NR_PHY/nr_unitary_defs.h" +#include "SIMULATION/TOOLS/sim.h" +#include "common/ran_context.h" +#include "time_meas.h" +#include "SCHED_NR/phy_frame_config_nr.h" + +PHY_VARS_gNB *gNB; +PHY_VARS_NR_UE *UE; +RAN_CONTEXT_t RC; +char *uecap_file = NULL; +int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; + +double cpuf; +uint64_t downlink_frequency[MAX_NUM_CCs][4]; +uint64_t uplink_frequency[MAX_NUM_CCs][4]; +THREAD_STRUCT thread_struct; + +// needed for some functions +uint16_t n_rnti = 0x1234; +openair0_config_t openair0_cfg[MAX_CARDS]; +nrUE_params_t nrUE_params; + +nrUE_params_t *get_nrUE_params(void) +{ + return &nrUE_params; +} + +channel_desc_t *UE2gNB[MAX_MOBILES_PER_GNB][NUMBER_OF_gNB_MAX]; +configmodule_interface_t *uniqCfg = NULL; + +void e1_bearer_context_setup(const e1ap_bearer_setup_req_t *req) +{ + abort(); +} +void e1_bearer_context_modif(const e1ap_bearer_mod_req_t *req) +{ + abort(); +} +void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd) +{ + abort(); +} + +int main(int argc, char *argv[]) +{ + stop = false; + __attribute__((unused)) struct sigaction oldaction; + sigaction(SIGINT, &sigint_action, &oldaction); + + double SNR, snr0 = 0, snr1 = 20.0; + double sum_srs_snr = 0; + double sigma, sigma_dB; + double snr_step = 5; + uint8_t snr1set = 0; + double **s_re, **s_im, **r_re, **r_im; + int trial, n_trials = 1, delay = 0; + double maxDoppler = 0.0; + uint8_t n_tx = 1, n_rx = 1; + channel_desc_t *UE2gNB; + uint8_t extended_prefix_flag = 0; + SCM_t channel_model = AWGN; + corr_level_t corr_level = CORR_LEVEL_LOW; + uint16_t N_RB_DL = 106, N_RB_UL = 106, mu = 1; + int srs_start_symbol = 13; + int srs_comb_size = 0; + int srs_comb_offset = 0; + int srs_cyclic_shift = 0; + int nb_symb_srs = 0; + int32_t txlev_sum = 0, atxlev[4]; + int i; + int loglvl = OAILOG_WARNING; + int print_perf = 0; + int slot = 8; + int frame = 1; + cpuf = get_cpu_freq_GHz(); + double DS_TDL = .03; + int threequarter_fs = 0; + uint64_t SSB_positions = 0x01; + uint16_t Nid_cell = 0; + + if ((uniqCfg = load_configmodule(argc, argv, CONFIG_ENABLECMDLINEONLY)) == 0) { + exit_fun("[NR_SRSSIM] Error, configuration module init failed\n"); + } + + randominit(); + + /* initialize the sin-cos table */ + InitSinLUT(); + + int c; + while ((c = getopt(argc, argv, "--:O:a:b:c:d:e:f:g:h:i:k:l:m:n:p:s:u:y:z:A:B:C:H:PR:S:L:")) != -1) { + /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */ + /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ + if (c == 1 || c == '-' || c == 'O') + continue; + + printf("handling optarg %c\n", c); + switch (c) { + case 'a': + srs_start_symbol = atoi(optarg); + AssertFatal(srs_start_symbol >= 8 && srs_start_symbol <= 13, "start_symbol %d is not in 8..13\n", srs_start_symbol); + break; + + case 'b': + nb_symb_srs = atoi(optarg); + AssertFatal(nb_symb_srs == 1 || nb_symb_srs == 2 || nb_symb_srs == 4, + "number of srs symbols %d is not 1,2,4\n", + nb_symb_srs); + nb_symb_srs >>= 2; // Value: 0 = 1 symbol, 1 = 2 symbols, 2 = 4 symbols + break; + + case 'c': + n_rnti = atoi(optarg); + AssertFatal(n_rnti > 0 && n_rnti <= 65535, "Illegal n_rnti %x\n", n_rnti); + break; + + case 'd': + delay = atoi(optarg); + break; + + case 'e': + srs_comb_size = atoi(optarg); + AssertFatal(srs_comb_size >= 0 && srs_comb_size < 2, "comb_size %d is not in 0 or 1\n", srs_comb_size); + break; + + case 'f': + srs_comb_offset = atoi(optarg); + if (srs_comb_size == 0) { + AssertFatal(srs_comb_offset >= 0 && srs_comb_offset <= 1, "comb_offset %d is not in 0...1\n", srs_comb_offset); + } else if (srs_comb_size == 1) { + AssertFatal(srs_comb_offset >= 0 && srs_comb_offset <= 3, "comb_offset %d is not in 0...3\n", srs_comb_offset); + } + break; + + case 'g': + + switch ((char)*optarg) { + case 'A': + channel_model = TDL_A; + DS_TDL = 0.030; // 30 ns + printf("Channel model: TDLA30\n"); + break; + case 'B': + channel_model = TDL_B; + DS_TDL = 0.100; // 100ns + printf("Channel model: TDLB100\n"); + break; + case 'C': + channel_model = TDL_C; + DS_TDL = 0.300; // 300 ns + printf("Channel model: TDLC300\n"); + break; + default: + printf("Unsupported channel model!\n"); + exit(-1); + } + + if (optarg[1] == ',') { + switch (optarg[2]) { + case 'l': + corr_level = CORR_LEVEL_LOW; + break; + case 'm': + corr_level = CORR_LEVEL_MEDIUM; + break; + case 'h': + corr_level = CORR_LEVEL_HIGH; + break; + default: + printf("Invalid correlation level!\n"); + } + } + + if (optarg[3] == ',') { + maxDoppler = atoi(&optarg[4]); + printf("Maximum Doppler Frequency: %.0f Hz\n", maxDoppler); + } + break; + + case 'i': + srs_cyclic_shift = atoi(optarg); + if (srs_comb_size == 0) { + AssertFatal(srs_cyclic_shift >= 0 && srs_cyclic_shift <= 7, "comb_shift %d is not in 0...7\n", srs_cyclic_shift); + } else if (srs_comb_size == 1) { + AssertFatal(srs_cyclic_shift >= 0 && srs_cyclic_shift <= 11, "comb_shift %d is not in 0...11\n", srs_cyclic_shift); + } + break; + + case 'k': + printf("Setting threequarter_fs_flag\n"); + threequarter_fs = 1; + break; + + case 'n': + n_trials = atoi(optarg); + break; + + case 'p': + extended_prefix_flag = 1; + break; + + case 's': + snr0 = atof(optarg); + printf("Setting SNR0 to %f\n", snr0); + break; + + case 'u': + mu = atoi(optarg); + break; + + case 'y': + n_tx = atoi(optarg); + if ((n_tx == 0) || (n_tx > 4)) { + printf("Unsupported number of tx antennas %d\n", n_tx); + exit(-1); + } + break; + + case 'z': + n_rx = atoi(optarg); + if ((n_rx == 0) || (n_rx > 8)) { + printf("Unsupported number of rx antennas %d\n", n_rx); + exit(-1); + } + break; + + case 'H': + slot = atoi(optarg); + break; + + case 'R': + N_RB_DL = atoi(optarg); + N_RB_UL = N_RB_DL; + break; + + case 'S': + snr1 = atof(optarg); + snr1set = 1; + printf("Setting SNR1 to %f\n", snr1); + break; + + case 'P': + print_perf = 1; + cpu_meas_enabled = 1; + break; + + case 'L': + loglvl = atoi(optarg); + break; + + default: + case 'h': + printf("%s -h(elp)\n", argv[0]); + printf("-a SRS starting symbol (8 .. 13)\n"); + printf("-b SRS number of symbols (1, 2, 4)\n"); + printf("-c RNTI\n"); + printf("-d Introduce delay in terms of number of samples\n"); + printf("-e SRS comb size, 0 (comb size 2), 1 (comb size 4) \n"); + printf("-f SRS comb offset, 0 .. 1 (comb size 2), 0 .. 3 (comb size 4) \n"); + printf( + "-g Channel model configuration. Arguments list: Number of arguments = 3, {Channel model: [A] TDLA30, [B] TDLB100, [C] " + "TDLC300}, {Correlation: [l] Low, [m] Medium, [h] High}, {Maximum Doppler shift} e.g. -g A,l,10\n"); + printf("-h This message\n"); + printf("-i SRS cyclic shift, 0 .. 7 (comb size 2), 0 .. 11 (comb size 4) \n"); + printf("-k 3/4 sampling\n"); + printf("-n Number of trials to simulate\n"); + printf("-p Use extended prefix mode\n"); + printf("-s Starting SNR, runs from SNR0 to SNR0 + 10 dB if ending SNR isn't given\n"); + printf("-S Ending SNR, runs from SNR0 to SNR1\n"); + printf("-u Set the numerology\n"); + printf("-y Number of TX antennas used at UE\n"); + printf("-z Number of RX antennas used at gNB\n"); + printf("-H Slot number\n"); + printf("-L \n"); + printf("-P Print SRS performances\n"); + printf("-R Maximum number of available resorce blocks (N_RB_DL)\n"); + exit(-1); + break; + } + } + + logInit(); + set_glog(loglvl); + + int ret = 1; + + if (snr1set == 0) + snr1 = snr0 + 10; + + double sampling_rate, tx_bandwidth, rx_bandwidth; + uint32_t samples; + get_samplerate_and_bw(mu, N_RB_DL, threequarter_fs, &sampling_rate, &samples, &tx_bandwidth, &rx_bandwidth); + + // Initialize gNB + gNB = calloc_or_fail(1, sizeof(PHY_VARS_gNB)); + gNB->ofdm_offset_divisor = UINT_MAX; + gNB->RU_list[0] = calloc_or_fail(1, sizeof(**gNB->RU_list)); + gNB->RU_list[0]->rfdevice.openair0_cfg = openair0_cfg; + + NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; + fp->N_RB_DL = N_RB_DL; + fp->N_RB_UL = N_RB_UL; + fp->Ncp = extended_prefix_flag ? EXTENDED : NORMAL; + fp->nb_antennas_tx = n_tx; + fp->nb_antennas_rx = n_rx; + fp->threequarter_fs = threequarter_fs; + nr_phy_config_request_sim(gNB, N_RB_UL, N_RB_UL, mu, Nid_cell, SSB_positions); + printf("dl freq %" PRIu64 " , ul freq %" PRIu64 " \n", fp->dl_CarrierFreq, fp->ul_CarrierFreq); + do_tdd_config_sim(gNB, mu); + phy_init_nr_gNB(gNB); + + // Initialize UE + UE = calloc_or_fail(1, sizeof(PHY_VARS_NR_UE)); + memcpy(&UE->frame_parms, fp, sizeof(NR_DL_FRAME_PARMS)); // setting same frame parameters as gNB + + /* RU handles rxdataF, and gNB just has a pointer. Here, we don't have an RU, + * so we need to allocate that memory as well. First index in rxdataF[0] index refers to beams*/ + for (i = 0; i < n_rx; i++) + gNB->common_vars.rxdataF[0][i] = malloc16_clear(fp->samples_per_frame_wCP * sizeof(int32_t)); + + /* no RU: need to have rxdata */ + c16_t **rxdata; + rxdata = malloc_or_fail(n_rx * sizeof(*rxdata)); + for (i = 0; i < n_rx; i++) + rxdata[i] = malloc16_clear(fp->samples_per_frame * sizeof(c16_t)); + + /* no memory allocated for UE common_vars: need to have txdata and txdataF */ + c16_t **txdata; + txdata = malloc_or_fail(n_tx * sizeof(*txdata)); + for (i = 0; i < n_tx; i++) + txdata[i] = malloc16_clear(fp->samples_per_frame * sizeof(c16_t)); + + c16_t **txdataF; + txdataF = malloc_or_fail(n_tx * sizeof(*txdataF)); + for (i = 0; i < n_tx; i++) + txdataF[i] = malloc16_clear(fp->samples_per_frame_wCP * sizeof(c16_t)); + + // Configure channel model + UE2gNB = new_channel_desc_scm(n_tx, + n_rx, + channel_model, + sampling_rate / 1e6, + fp->ul_CarrierFreq, + tx_bandwidth, + DS_TDL, + maxDoppler, + corr_level, + 0, + delay, + 0, + 0); + + if (UE2gNB == NULL) { + printf("Problem generating channel model. Exiting.\n"); + exit(-1); + } + + // Allocate memory to intermediate variables to apply channel + int slot_length = get_samples_per_slot(slot, fp); + + s_re = malloc_or_fail(n_tx * sizeof(double *)); + s_im = malloc_or_fail(n_tx * sizeof(double *)); + r_re = malloc_or_fail(n_rx * sizeof(double *)); + r_im = malloc_or_fail(n_rx * sizeof(double *)); + + for (int aatx = 0; aatx < n_tx; aatx++) { + s_re[aatx] = calloc_or_fail(1, slot_length * sizeof(double)); + s_im[aatx] = calloc_or_fail(1, slot_length * sizeof(double)); + } + + for (int aarx = 0; aarx < n_rx; aarx++) { + r_re[aarx] = calloc_or_fail(1, slot_length * sizeof(double)); + r_im[aarx] = calloc_or_fail(1, slot_length * sizeof(double)); + } + + //----------- configure SRS ---------------------------- + long locationAndBandwidth = PRBalloc_to_locationandbandwidth(N_RB_DL, 0); + + // Configure SRS parameters at gNB + const uint16_t m_SRS[64] = {4, 8, 12, 16, 16, 20, 24, 24, 28, 32, 36, 40, 48, 48, 52, 56, + 60, 64, 72, 72, 76, 80, 88, 96, 96, 104, 112, 120, 120, 120, 128, 128, + 128, 132, 136, 144, 144, 144, 144, 152, 160, 160, 160, 168, 176, 184, 192, 192, + 192, 192, 208, 216, 224, 240, 240, 240, 240, 256, 256, 256, 264, 272, 272, 272}; + nfapi_nr_srs_pdu_t srs_pdu = {.rnti = n_rnti, + .bwp_size = NRRIV2BW(locationAndBandwidth, 275), + .bwp_start = NRRIV2PRBOFFSET(locationAndBandwidth, 275), + .subcarrier_spacing = fp->numerology_index, + .cyclic_prefix = extended_prefix_flag, + .num_ant_ports = n_tx == 4 ? 2 + : n_tx == 2 ? 1 + : 0, + .num_symbols = nb_symb_srs, + .num_repetitions = 0, // Value: 0 = 1, 1 = 2, 2 = 4 + .time_start_position = fp->symbols_per_slot - 1 - srs_start_symbol, + .bandwidth_index = 0, + .config_index = rrc_get_max_nr_csrs(srs_pdu.bwp_size, srs_pdu.bandwidth_index), + .sequence_id = 40, + .comb_size = srs_comb_size, + .comb_offset = srs_comb_offset, + .cyclic_shift = srs_cyclic_shift, + .frequency_position = 0, + .frequency_shift = 0, + .frequency_hopping = 0, + .group_or_sequence_hopping = 0, + .resource_type = NR_SRS_Resource__resourceType_PR_periodic, + .t_srs = 1, + .t_offset = 0, + .srs_parameters_v4.srs_bandwidth_size = m_SRS[srs_pdu.config_index], + .srs_parameters_v4.usage = 1 << NR_SRS_ResourceSet__usage_codebook, + .srs_parameters_v4.report_type[0] = 1, + .srs_parameters_v4.iq_representation = 1, + .srs_parameters_v4.prg_size = 1, + .srs_parameters_v4.num_total_ue_antennas = 1 << srs_pdu.num_ant_ports, + .beamforming.num_prgs = m_SRS[srs_pdu.config_index], + .beamforming.prg_size = 1}; + + gNB->srs->srs_pdu = srs_pdu; + gNB->srs->active = true; + gNB->srs->beam_nb = 0; + gNB->srs->frame = frame; + gNB->srs->slot = slot; + + // Configure SRS parameters at UE + fapi_nr_ul_config_srs_pdu srs_config_pdu = {.rnti = srs_pdu.rnti, + .bwp_size = srs_pdu.bwp_size, + .bwp_start = srs_pdu.bwp_start, + .subcarrier_spacing = srs_pdu.subcarrier_spacing, + .cyclic_prefix = srs_pdu.cyclic_prefix, + .num_ant_ports = srs_pdu.num_ant_ports, + .num_symbols = srs_pdu.num_symbols, + .num_repetitions = srs_pdu.num_repetitions, + .time_start_position = srs_pdu.time_start_position, + .bandwidth_index = srs_pdu.bandwidth_index, + .config_index = srs_pdu.config_index, + .sequence_id = srs_pdu.sequence_id, + .comb_size = srs_pdu.comb_size, + .comb_offset = srs_pdu.comb_offset, + .cyclic_shift = srs_pdu.cyclic_shift, + .frequency_position = srs_pdu.frequency_position, + .frequency_shift = srs_pdu.frequency_shift, + .frequency_hopping = srs_pdu.frequency_hopping, + .group_or_sequence_hopping = srs_pdu.group_or_sequence_hopping, + .resource_type = srs_pdu.resource_type, + .t_srs = srs_pdu.t_srs, + .t_offset = srs_pdu.t_offset, + .beamforming.num_prgs = srs_pdu.beamforming.num_prgs, + .beamforming.prg_size = srs_pdu.beamforming.prg_size}; + + nr_phy_data_tx_t phy_data = {0}; + phy_data.srs_vars.active = true; + phy_data.srs_vars.srs_config_pdu = srs_config_pdu; + UE->nr_srs_info = malloc16_clear(sizeof(nr_srs_info_t)); + + //----------- UE TX SRS procedures --------------------- + + UE_nr_rxtx_proc_t proc; + proc.frame_rx = frame; + proc.frame_tx = frame; + proc.nr_slot_tx = slot; + proc.nr_slot_rx = slot; + bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT] = {0}; + int slot_offset = get_samples_slot_timestamp(fp, slot); + uint16_t ofdm_symbol_size = fp->ofdm_symbol_size; + int slot_offsetF = (slot % RU_RX_SLOT_DEPTH) * NR_SYMBOLS_PER_SLOT * ofdm_symbol_size; + + c16_t *txF[fp->nb_antennas_tx]; + for (i = 0; i < fp->nb_antennas_tx; i++) + txF[i] = txdataF[i] + slot_offsetF; + + ue_srs_procedures_nr(UE, &proc, (c16_t **)txF, &phy_data, was_symbol_used); + + //------------ TX rotation and OFDM Modulation -------------------------- + + for (int aa = 0; aa < fp->nb_antennas_tx; aa++) { + apply_nr_rotation_TX(fp, &txF[aa][0], fp->symbol_rotation[1], slot, fp->N_RB_UL, 0, fp->Ncp == EXTENDED ? 12 : 14); + if (srs_pdu.cyclic_prefix == 1) { + for (i = 0; i < NR_NUMBER_OF_SYMBOLS_PER_SLOT_EXTENDED_CP; i++) { + if (was_symbol_used[i] == true) { + PHY_ofdm_mod((int *)&txF[aa][0], + (int *)&txdata[aa][slot_offset + (ofdm_symbol_size + fp->nb_prefix_samples) * i], + ofdm_symbol_size, + 1, + fp->nb_prefix_samples, + CYCLIC_PREFIX); + } + } + } else { + nr_normal_prefix_mod(&txF[aa][0], &txdata[aa][slot_offset], fp->symbols_per_slot, fp, slot, was_symbol_used); + } + } + + //----------- Apply propagation channel and add noise ---------------------------- + + double ts = 1.0 / (fp->subcarrier_spacing * ofdm_symbol_size); + + for (i = 0; i < slot_length; i++) { + for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { + s_re[aa][i] = (double)txdata[aa][slot_offset + i].r; + s_im[aa][i] = (double)txdata[aa][slot_offset + i].i; + } + } + + // Compute SRS symbol offset + int symbol_offset = slot_offset; + int abs_first_symbol = slot * fp->symbols_per_slot; + int idx_sym; + for (idx_sym = abs_first_symbol; idx_sym < abs_first_symbol + srs_pdu.time_start_position; idx_sym++) + symbol_offset += (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0; + + symbol_offset += ofdm_symbol_size * srs_pdu.time_start_position; + + // Compute transmitter level + txlev_sum = 0; + for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { + atxlev[aa] = signal_energy( + (int32_t *)&txdata[aa][symbol_offset], + ofdm_symbol_size + (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0); + + txlev_sum += atxlev[aa]; + + if (n_trials == 1) + printf("txlev[%d] = %d (%f dB) txlev_sum %d\n", aa, atxlev[aa], 10 * log10((double)atxlev[aa]), txlev_sum); + } + + for (SNR = snr0; SNR <= snr1 && !stop; SNR += snr_step) { + varArray_t *table_rx = initVarArray(1000, sizeof(double)); + reset_meas(&gNB->rx_srs_stats); + reset_meas(&gNB->generate_srs_stats); + reset_meas(&gNB->get_srs_signal_stats); + reset_meas(&gNB->srs_channel_estimation_stats); + reset_meas(&gNB->srs_timing_advance_stats); + + sum_srs_snr = 0; + for (trial = 0; trial < n_trials && !stop; trial++) { + // Estimate noise power from the transmitter level and SNR + sigma_dB = 10 * log10(((double)txlev_sum) * ((double)ofdm_symbol_size / (12 * srs_pdu.bwp_size))) - SNR; + sigma = pow(10, sigma_dB / 10); + + if (n_trials == 1) + printf("sigma %f (%f dB), txlev_sum %f (factor %f)\n", + sigma, + sigma_dB, + 10 * log10((double)txlev_sum), + (double)(double)ofdm_symbol_size / (12 * srs_pdu.bwp_size)); + + //----------- Apply propagation channel ---------------------------- + multipath_channel(UE2gNB, s_re, s_im, r_re, r_im, slot_length, 0, (n_trials == 1) ? 1 : 0); + + //----------- Add noise ---------------------------- + add_noise(rxdata, + (const double **)r_re, + (const double **)r_im, + sigma, + slot_length, + slot_offset, + ts, + 0, // delay + 0, // pdu_bit_map + 0, // PTRS_BITMAP, + fp->nb_antennas_rx); + + //----------- OFDM Demodulation and RX rotation-------------------------- + + for (uint8_t symbol = 0; symbol < (fp->Ncp == EXTENDED ? 12 : 14); symbol++) { + for (int aa = 0; aa < fp->nb_antennas_rx; aa++) + nr_slot_fep_ul(fp, (int32_t *)&rxdata[aa][0], (int32_t *)&gNB->common_vars.rxdataF[0][aa][slot_offsetF], symbol, slot, 0); + } + + for (int aa = 0; aa < fp->nb_antennas_rx; aa++) { + for (uint8_t symbol = 0; symbol < fp->symbols_per_slot; symbol++) { + if (was_symbol_used[symbol] == true) { + apply_nr_rotation_symbol_RX(fp, + &gNB->common_vars.rxdataF[0][aa][slot_offsetF + symbol * fp->ofdm_symbol_size], + fp->symbol_rotation[1], + fp->N_RB_UL, + slot, + symbol); + } + } + } + + //----------- UE RX SRS procedures --------------------- + + start_meas(&gNB->rx_srs_stats); + NR_gNB_SRS_t *srs = &gNB->srs[0]; + uint8_t N_symb_SRS = 1 << srs->srs_pdu.num_symbols; + uint8_t N_ap = 1 << srs->srs_pdu.num_ant_ports; + uint8_t nb_antennas_rx = fp->nb_antennas_rx; + int16_t snr_per_rb[srs->srs_pdu.bwp_size]; + int srs_est; + c16_t srs_estimated_channel_freq[nb_antennas_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); + c16_t srs_estimated_channel_time[nb_antennas_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); + + nr_srs_rx_procedures(gNB, + frame, + slot, + nb_antennas_rx, + N_ap, + N_symb_SRS, + ofdm_symbol_size, + srs, + gNB->nr_srs_info[0], + &srs_est, + srs_estimated_channel_freq, + srs_estimated_channel_time, + snr_per_rb); + + start_meas(&gNB->srs_timing_advance_stats); + nr_est_timing_advance_srs(fp, srs_estimated_channel_time[0]); + stop_meas(&gNB->srs_timing_advance_stats); + sum_srs_snr += pow(10, (double)gNB->srs->snr / 10.0); + stop_meas(&gNB->rx_srs_stats); + } // trail loop + sum_srs_snr /= n_trials; + printf("Actual SNR : %f, Estimated SNR from SRS %f (dB)\n", SNR, 10 * log10(sum_srs_snr)); + + if (print_perf == 1) { + printf("\ngNB RX\n"); + printDistribution(&gNB->rx_srs_stats, table_rx, "RX SRS time"); + printStatIndent(&gNB->generate_srs_stats, "Generate SRS sequence time"); + printStatIndent(&gNB->get_srs_signal_stats, "Get SRS signal time"); + printStatIndent(&gNB->srs_channel_estimation_stats, "SRS channel estimation time"); + printStatIndent(&gNB->srs_timing_advance_stats, "SRS timing advance estimation time"); + printf("\n"); + } + + } // SNR loop + + // free memory + + for (i = 0; i < n_tx; i++) { + free(s_re[i]); + free(s_im[i]); + } + for (i = 0; i < n_rx; i++) { + free(r_re[i]); + free(r_im[i]); + } + + free(s_re); + free(s_im); + free(r_re); + free(r_im); + + for (i = 0; i < n_rx; i++) { + free(rxdata[i]); + } + free(rxdata); + + for (i = 0; i < n_tx; i++) { + free(txdata[i]); + } + free(txdata); + + for (i = 0; i < n_tx; i++) { + free(txdataF[i]); + } + free(txdataF); + + phy_free_nr_gNB(gNB); + free_and_zero(UE->nr_srs_info); + free(gNB->RU_list[0]); + free(UE); + + return ret; +} From 1ffb1cfe169abd4ee4fa1b04c16ab2bf9df639ee Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 22 Oct 2025 16:48:20 +0530 Subject: [PATCH 18/53] Adding testcases to test nr_srssim --- openair1/SIMULATION/tests/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/openair1/SIMULATION/tests/CMakeLists.txt b/openair1/SIMULATION/tests/CMakeLists.txt index 566028234d..a9fbfec228 100644 --- a/openair1/SIMULATION/tests/CMakeLists.txt +++ b/openair1/SIMULATION/tests/CMakeLists.txt @@ -341,6 +341,21 @@ add_physim_test(physim.5g.nr_prachsim.test8 "15kHz SCS, 25 PRBs" nr_prachsim -a add_physim_test(physim.5g.nr_psbchsim.test1 "SLSS Search" nr_psbchsim -I) add_physim_test(physim.5g.nr_psbchsim.test2 "PSBCH TxRx" nr_psbchsim -n 30) +#################################################################################### +###### nr_srssim unit test ###### +#################################################################################### + +add_physim_test(physim.5g.nr_srssim.test1 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 2" nr_srssim -n300 -R106 -y2 -z2 -d 24) +add_physim_test(physim.5g.nr_srssim.test2 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 15, Combsize 2, Threequarter sampling" nr_srssim -n300 -R106 -y2 -z2 -d 15 -k) +add_physim_test(physim.5g.nr_srssim.test3 "SRS: 30KHz SCS, 217 PRBs, SNR 20 dB, ToA 8, Combsize 2" nr_srssim -n300 -R217 -y2 -z2 -d 8) +add_physim_test(physim.5g.nr_srssim.test4 "SRS: 30KHz SCS, 273 PRBs, SNR 20 dB, TOA 30, Combsize 2" nr_srssim -n300 -R273 -y2 -z2 -d 30) +add_physim_test(physim.5g.nr_srssim.test5 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 16, Combsize 2, Cyclic shift 3" nr_srssim -n300 -R106 -y2 -z2 -d 16 -i 1) +add_physim_test(physim.5g.nr_srssim.test6 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 23, Combsize 2, Comb offset 1" nr_srssim -n300 -R106 -y2 -z2 -d 23 -f 1) +add_physim_test(physim.5g.nr_srssim.test7 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 8, Combsize 2, Symbol start 9" nr_srssim -n300 -R106 -y2 -z2 -d 8 -a 9) +add_physim_test(physim.5g.nr_srssim.test8 "SRS: 120KHz SCS, 32 PRBs, SNR 20 dB, ToA 19, Combsize 2" nr_srssim -n300 -R32 -y2 -z2 -d 19 -u 3) +add_physim_test(physim.5g.nr_srssim.test9 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 11, Combsize 4" nr_srssim -n300 -R106 -y2 -z2 -d 11 -e 1) +add_physim_test(physim.5g.nr_srssim.test10 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 7, Combsize 4, Comb offset 1" nr_srssim -n300 -R106 -y2 -z2 -d 7 -e 1 -f 1) + #################################################################################### ###### offload-specific tests ###### #################################################################################### From a5a09676adf3317f70b37e9e852c80aac79e14a7 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 22 Oct 2025 18:52:36 +0530 Subject: [PATCH 19/53] rewrite nr_srs_channel_estimation() to loop over rx antennas and antenna ports to be able to parallelize --- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 170 ++++++++---------- openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h | 31 ++-- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 51 ++++-- 3 files changed, 132 insertions(+), 120 deletions(-) diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index d73a315354..ae91f637fb 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -769,21 +769,22 @@ void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB, } // Antenna loop } -int nr_srs_channel_estimation( - const PHY_VARS_gNB *gNB, - const int frame, - const int slot, - const nfapi_nr_srs_pdu_t *srs_pdu, - const nr_srs_info_t *nr_srs_info, - const c16_t **srs_generated_signal, - c16_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_received_noise[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_freq[][1 << srs_pdu->num_ant_ports] - [gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_time[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size], - c16_t srs_estimated_channel_time_shifted[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size], - int16_t *snr_per_rb, - int8_t *snr) +int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, + const int frame, + const int slot, + const int ant, + const int p_index, + const nfapi_nr_srs_pdu_t *srs_pdu, + const nr_srs_info_t *nr_srs_info, + const c16_t *srs_generated_signal, + c16_t srs_received_signal[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], + c16_t srs_received_noise[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], + c16_t srs_estimated_channel_freq[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], + c16_t srs_estimated_channel_time[gNB->frame_parms.ofdm_symbol_size], + c16_t srs_estimated_channel_time_shifted[gNB->frame_parms.ofdm_symbol_size], + uint32_t *signal_power, + uint32_t *noise_power, + int16_t *noise_power_per_rb) { #ifdef SRS_DEBUG LOG_I(NR_PHY, "Calling %s function\n", __FUNCTION__); @@ -802,7 +803,7 @@ int nr_srs_channel_estimation( } c16_t srs_ls_estimated_channel[frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols)]; - uint8_t mem_offset = ((16 - ((intptr_t)&srs_estimated_channel_freq[0][0][subcarrier_offset + nr_srs_info->k_0_p[0][0]])) & 0xF) + uint8_t mem_offset = ((16 - ((intptr_t)&srs_estimated_channel_freq[subcarrier_offset + nr_srs_info->k_0_p[p_index][0]])) & 0xF) >> 2; // >> 2 <=> /sizeof(int32_t) // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} @@ -812,8 +813,6 @@ int nr_srs_channel_estimation( c16_t srs_est[frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols) + mem_offset + 8] __attribute__((aligned(32))); c16_t ls_estimated = {0}; - for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++) { - for (int p_index = 0; p_index < N_ap; p_index++) { memset(srs_ls_estimated_channel, 0, frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols) * sizeof(c16_t)); memset(srs_est, 0, (frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols) + mem_offset) * sizeof(c16_t)); @@ -834,8 +833,8 @@ int nr_srs_channel_estimation( uint16_t subcarrier_cdm = subcarrier; for (int cdm_idx = 0; cdm_idx < fd_cdm; cdm_idx++) { - c16_t generated_srs = srs_generated_signal[p_index][subcarrier_cdm]; - c16_t received_srs = srs_received_signal[ant][subcarrier_cdm]; + c16_t generated_srs = srs_generated_signal[subcarrier_cdm]; + c16_t received_srs = srs_received_signal[subcarrier_cdm]; // We know that nr_srs_info->srs_generated_signal_bits bits are enough to represent the real and imaginary parts of // generated_srs. So we only need a nr_srs_info->srs_generated_signal_bits shift to ensure that the result fits into 16 // bits. @@ -863,10 +862,10 @@ int nr_srs_channel_estimation( LOG_I(NR_PHY, "(%4i) %6i\t%6i | %6i\t%6i | %6i\t%6i\n", subcarrier_log, - srs_generated_signal[p_index][subcarrier].r, - srs_generated_signal[p_index][subcarrier].i, - srs_received_signal[ant][subcarrier].r, - srs_received_signal[ant][subcarrier].i, + srs_generated_signal[subcarrier].r, + srs_generated_signal[subcarrier].i, + srs_received_signal[subcarrier].r, + srs_received_signal[subcarrier].i, ls_estimated.r, ls_estimated.i); #endif @@ -923,7 +922,7 @@ int nr_srs_channel_estimation( } // for (int k = 0; k < M_sc_b_SRS; k++) - memcpy(srs_estimated_channel_freq[ant][p_index], + memcpy(srs_estimated_channel_freq, &srs_est[mem_offset], (frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols)) * sizeof(c16_t)); @@ -949,10 +948,10 @@ int nr_srs_channel_estimation( subcarrier_log, srs_ls_estimated_channel[subcarrier].r, srs_ls_estimated_channel[subcarrier].i, - srs_estimated_channel_freq[ant][p_index][subcarrier].r, - srs_estimated_channel_freq[ant][p_index][subcarrier].i, - srs_received_noise[ant][subcarrier].r, - srs_received_noise[ant][subcarrier].i); + srs_estimated_channel_freq[subcarrier].r, + srs_estimated_channel_freq[subcarrier].i, + srs_received_noise[subcarrier].r, + srs_received_noise[subcarrier].i); // Subcarrier increment subcarrier++; @@ -963,83 +962,70 @@ int nr_srs_channel_estimation( #endif // Convert to time domain - freq2time(gNB->frame_parms.ofdm_symbol_size, - (int16_t *)srs_estimated_channel_freq[ant][p_index], - (int16_t *)srs_estimated_channel_time[ant][p_index]); + freq2time(gNB->frame_parms.ofdm_symbol_size, (int16_t *)srs_estimated_channel_freq, (int16_t *)srs_estimated_channel_time); - memcpy(srs_estimated_channel_time_shifted[ant][p_index], - &srs_estimated_channel_time[ant][p_index][gNB->frame_parms.ofdm_symbol_size >> 1], + memcpy(srs_estimated_channel_time_shifted, + &srs_estimated_channel_time[gNB->frame_parms.ofdm_symbol_size >> 1], (gNB->frame_parms.ofdm_symbol_size >> 1) * sizeof(c16_t)); - memcpy(&srs_estimated_channel_time_shifted[ant][p_index][gNB->frame_parms.ofdm_symbol_size >> 1], - srs_estimated_channel_time[ant][p_index], + memcpy(&srs_estimated_channel_time_shifted[gNB->frame_parms.ofdm_symbol_size >> 1], + srs_estimated_channel_time, (gNB->frame_parms.ofdm_symbol_size >> 1) * sizeof(c16_t)); - } // for (int p_index = 0; p_index < N_ap; p_index++) - } // for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++) - - // Compute wideband SNR - int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; - uint32_t signal_power = 0; - uint32_t noise_power = 0; - for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++) { - for (int p_index = 0; p_index < N_ap; p_index++) { - uint16_t subcarrier0 = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier0 >= frame_parms->ofdm_symbol_size) { - subcarrier0 -= frame_parms->ofdm_symbol_size; + // Compute wideband SNR + int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; + if (subcarrier >= frame_parms->ofdm_symbol_size) { + subcarrier -= frame_parms->ofdm_symbol_size; } - if (subcarrier0 + tot_subcarriers < frame_parms->ofdm_symbol_size) { - signal_power += signal_energy_nodc(&srs_estimated_channel_freq[ant][p_index][subcarrier0], tot_subcarriers); - if (p_index == 0) - noise_power += signal_energy_nodc(&srs_received_noise[ant][subcarrier0], tot_subcarriers); - } else { - int size1 = frame_parms->ofdm_symbol_size - subcarrier0; - int size2 = tot_subcarriers - size1; - uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[ant][p_index][subcarrier0], size1) * size1; - uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[ant][p_index][0], size2) * size2; - signal_power += (signal_power_p1 + signal_power_p2) / tot_subcarriers; + if (subcarrier + tot_subcarriers < frame_parms->ofdm_symbol_size) { + *signal_power = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], tot_subcarriers) / tot_subcarriers; if (p_index == 0) { - uint64_t noise_power_p1 = signal_energy_nodc(&srs_received_noise[ant][subcarrier0], size1) * size1; - uint64_t noise_power_p2 = signal_energy_nodc(&srs_received_noise[ant][0], size2) * size2; - noise_power += (noise_power_p1 + noise_power_p2) / tot_subcarriers; + *noise_power = signal_energy_nodc(&srs_received_noise[subcarrier], tot_subcarriers) / tot_subcarriers; } - } - } - } - signal_power = max(signal_power / (frame_parms->nb_antennas_rx * N_ap), 1); - noise_power = max(noise_power / (frame_parms->nb_antennas_rx), 1); - if (signal_power == 0) { - LOG_W(NR_PHY, "Received SRS signal power is 0\n"); - return -1; - } - *snr = dB_fixed(signal_power) - dB_fixed(noise_power); - - // Compute SNR per RB - uint16_t subcarrier = subcarrier_offset + nr_srs_info->k_0_p[0][0]; - for (int rb = 0; rb < m_SRS_b; rb++) { - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; - } - uint32_t noise_power_per_rb = 0; - for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++) { - if (subcarrier + NR_NB_SC_PER_RB < frame_parms->ofdm_symbol_size) { - noise_power_per_rb += signal_energy_nodc(&srs_received_noise[ant][subcarrier], NR_NB_SC_PER_RB); } else { int size1 = frame_parms->ofdm_symbol_size - subcarrier; - int size2 = NR_NB_SC_PER_RB - size1; - uint32_t noise_power_per_rb1 = signal_energy_nodc(&srs_received_noise[ant][subcarrier], size1) * size1; - uint32_t noise_power_per_rb2 = signal_energy_nodc(&srs_received_noise[ant][0], size2) * size2; - noise_power_per_rb += (noise_power_per_rb1 + noise_power_per_rb2) / NR_NB_SC_PER_RB; + int size2 = tot_subcarriers - size1; + uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], size1) * size1; + uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[0], size2) * size2; + *signal_power = (signal_power_p1 + signal_power_p2) / tot_subcarriers; + if (p_index == 0) { + uint64_t noise_power_p1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; + uint64_t noise_power_p2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; + *noise_power = (noise_power_p1 + noise_power_p2) / tot_subcarriers; + } } - } - noise_power_per_rb = max(noise_power_per_rb / (frame_parms->nb_antennas_rx), 1); - snr_per_rb[rb] = dB_fixed(signal_power) - dB_fixed(noise_power_per_rb); - subcarrier += NR_NB_SC_PER_RB; + + *signal_power = max(*signal_power, 1); + if (*signal_power == 0) { + LOG_W(NR_PHY, "Received SRS signal power is 0\n"); + return -1; + } + + // Compute SNR per RB for port 0 + if (p_index == 0) { + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; + for (int rb = 0; rb < m_SRS_b; rb++) { + if (subcarrier >= frame_parms->ofdm_symbol_size) { + subcarrier -= frame_parms->ofdm_symbol_size; + } + if (subcarrier + NR_NB_SC_PER_RB < frame_parms->ofdm_symbol_size) { + noise_power_per_rb[rb] += signal_energy_nodc(&srs_received_noise[subcarrier], NR_NB_SC_PER_RB); + } else { + int size1 = frame_parms->ofdm_symbol_size - subcarrier; + int size2 = NR_NB_SC_PER_RB - size1; + uint32_t noise_power_per_rb1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; + uint32_t noise_power_per_rb2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; + noise_power_per_rb[rb] += (noise_power_per_rb1 + noise_power_per_rb2) / NR_NB_SC_PER_RB; + } + noise_power_per_rb[rb] = max(noise_power_per_rb[rb], 1); + subcarrier += NR_NB_SC_PER_RB; #ifdef SRS_DEBUG - LOG_I(NR_PHY, "[RB %3i] noise_power_per_rb = %i, snr_per_rb = %i dB\n", rb, noise_power_per_rb, snr_per_rb[rb]); + LOG_I(NR_PHY, "[RB %3i] noise_power_per_rb = %i, snr_per_rb = %i dB\n", rb, noise_power_per_rb, snr_per_rb[rb]); #endif - } + } + } #ifdef SRS_DEBUG LOG_I(NR_PHY, "signal_power = %i dB, noise_power = %i dB, SNR = %i dB\n", dB_fixed(signal_power), dB_fixed(noise_power), *snr); diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h index 7e0a2a97bd..e503bcf116 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h @@ -70,21 +70,22 @@ void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB, unsigned char symbol, uint32_t nb_re_pusch); -int nr_srs_channel_estimation( - const PHY_VARS_gNB *gNB, - const int frame, - const int slot, - const nfapi_nr_srs_pdu_t *srs_pdu, - const nr_srs_info_t *nr_srs_info, - const c16_t **srs_generated_signal, - c16_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_received_noise[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_freq[][1 << srs_pdu->num_ant_ports] - [gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_time[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size], - c16_t srs_estimated_channel_time_shifted[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size], - int16_t *snr_per_rb, - int8_t *snr); +int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, + const int frame, + const int slot, + const int ant, + const int p_index, + const nfapi_nr_srs_pdu_t *srs_pdu, + const nr_srs_info_t *nr_srs_info, + const c16_t *srs_generated_signal, + c16_t srs_received_signal[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], + c16_t srs_received_noise[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], + c16_t srs_estimated_channel_freq[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], + c16_t srs_estimated_channel_time[gNB->frame_parms.ofdm_symbol_size], + c16_t srs_estimated_channel_time_shifted[gNB->frame_parms.ofdm_symbol_size], + uint32_t *signal_power, + uint32_t *noise_power, + int16_t *noise_power_per_rb); void nr_freq_equalization(NR_DL_FRAME_PARMS *frame_parms, c16_t *rxdataF_comp, diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 69dc6ad3e7..0a4d73df96 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -889,21 +889,46 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, *srs_est = nr_get_srs_signal(gNB, rxdataF, frame_rx, slot_rx, srs_pdu, nr_srs_info, srs_received_signal, srs_received_noise); stop_meas(&gNB->get_srs_signal_stats); + uint32_t signal_power_avg = 0; + uint32_t noise_power_avg = 0; + int16_t noise_power_per_rb[srs_pdu->bwp_size]; + memset(noise_power_per_rb, 0, srs_pdu->bwp_size * sizeof(int16_t)); + if (*srs_est >= 0) { start_meas(&gNB->srs_channel_estimation_stats); - nr_srs_channel_estimation(gNB, - frame_rx, - slot_rx, - srs_pdu, - nr_srs_info, - (const c16_t **)nr_srs_info->srs_generated_signal, - srs_received_signal, - srs_received_noise, - srs_estimated_channel_freq, - srs_estimated_channel_time, - srs_estimated_channel_time_shifted, - snr_per_rb, - &gNB->srs->snr); + for (int ant_rx_ind = 0; ant_rx_ind < nb_antennas_rx; ant_rx_ind++) { + uint32_t noise_power = 0; + for (int p_ind = 0; p_ind < N_ap; p_ind++) { + uint32_t signal_power = 0; + nr_srs_channel_estimation(gNB, + frame_rx, + slot_rx, + ant_rx_ind, + p_ind, + srs_pdu, + nr_srs_info, + nr_srs_info->srs_generated_signal[p_ind], + srs_received_signal[ant_rx_ind], + srs_received_noise[ant_rx_ind], + srs_estimated_channel_freq[ant_rx_ind][p_ind], + srs_estimated_channel_time[ant_rx_ind][p_ind], + srs_estimated_channel_time_shifted[ant_rx_ind][p_ind], + &signal_power, + &noise_power, + noise_power_per_rb); + signal_power_avg += signal_power; + } + noise_power_avg += noise_power; + } + signal_power_avg /= (nb_antennas_rx * N_ap); + noise_power_avg /= nb_antennas_rx; + signal_power_avg = max(signal_power_avg, 1); + gNB->srs->snr = dB_fixed(signal_power_avg) - dB_fixed(max(noise_power_avg, 1)); + + const uint16_t m_SRS_b = get_m_srs(srs_pdu->config_index, srs_pdu->bandwidth_index); + for (int rb = 0; rb < m_SRS_b; rb++) { + snr_per_rb[rb] = dB_fixed(signal_power_avg) - dB_fixed(max(noise_power_per_rb[rb] / nb_antennas_rx, 1)); + } stop_meas(&gNB->srs_channel_estimation_stats); } From 7846d83b076e9fd3168834df5e285f45fcbb47df Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 22 Oct 2025 19:11:58 +0530 Subject: [PATCH 20/53] use intermediate variables to improve readability and avoid additional computations --- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 89 +++++++++---------- openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h | 20 ++--- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 12 +-- 3 files changed, 59 insertions(+), 62 deletions(-) diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index ae91f637fb..5cb60f28b3 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -769,19 +769,19 @@ void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB, } // Antenna loop } -int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, - const int frame, - const int slot, - const int ant, - const int p_index, +int nr_srs_channel_estimation(int ant, + int p_index, + uint16_t ofdm_symbol_size, + uint16_t first_carrier_offset, + uint8_t N_symb_SRS, const nfapi_nr_srs_pdu_t *srs_pdu, const nr_srs_info_t *nr_srs_info, const c16_t *srs_generated_signal, - c16_t srs_received_signal[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_received_noise[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_freq[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_time[gNB->frame_parms.ofdm_symbol_size], - c16_t srs_estimated_channel_time_shifted[gNB->frame_parms.ofdm_symbol_size], + c16_t srs_received_signal[ofdm_symbol_size * N_symb_SRS], + c16_t srs_received_noise[ofdm_symbol_size * N_symb_SRS], + c16_t srs_estimated_channel_freq[ofdm_symbol_size * N_symb_SRS], + c16_t srs_estimated_channel_time[ofdm_symbol_size], + c16_t srs_estimated_channel_time_shifted[ofdm_symbol_size], uint32_t *signal_power, uint32_t *noise_power, int16_t *noise_power_per_rb) @@ -790,8 +790,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, LOG_I(NR_PHY, "Calling %s function\n", __FUNCTION__); #endif - const NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; - const uint64_t subcarrier_offset = frame_parms->first_carrier_offset + srs_pdu->bwp_start * NR_NB_SC_PER_RB; + const uint64_t subcarrier_offset = first_carrier_offset + srs_pdu->bwp_start * NR_NB_SC_PER_RB; const uint8_t N_ap = 1 << srs_pdu->num_ant_ports; const uint8_t K_TC = 2 << srs_pdu->comb_size; @@ -802,7 +801,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, fd_cdm = 2; } - c16_t srs_ls_estimated_channel[frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols)]; + c16_t srs_ls_estimated_channel[ofdm_symbol_size * N_symb_SRS]; uint8_t mem_offset = ((16 - ((intptr_t)&srs_estimated_channel_freq[subcarrier_offset + nr_srs_info->k_0_p[p_index][0]])) & 0xF) >> 2; // >> 2 <=> /sizeof(int32_t) @@ -810,19 +809,19 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, // The End of OFDM symbol corresponds to the position of last 16384 in the filter // The c16multaddVectRealComplex applies the remaining 8 zeros of filter, therefore, to avoid a buffer overflow, // we added 8 in the array size - c16_t srs_est[frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols) + mem_offset + 8] __attribute__((aligned(32))); + c16_t srs_est[ofdm_symbol_size * N_symb_SRS + mem_offset + 8] __attribute__((aligned(32))); c16_t ls_estimated = {0}; - memset(srs_ls_estimated_channel, 0, frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols) * sizeof(c16_t)); - memset(srs_est, 0, (frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols) + mem_offset) * sizeof(c16_t)); + memset(srs_ls_estimated_channel, 0, ofdm_symbol_size * N_symb_SRS * sizeof(c16_t)); + memset(srs_est, 0, (ofdm_symbol_size * N_symb_SRS + mem_offset) * sizeof(c16_t)); #ifdef SRS_DEBUG LOG_I(NR_PHY, "====================== UE port %d --> gNB Rx antenna %i ======================\n", p_index, ant); #endif uint16_t subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } c16_t *srs_estimated_channel16 = &srs_est[subcarrier + mem_offset]; @@ -842,8 +841,8 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, // Subcarrier increment subcarrier_cdm += K_TC; - if (subcarrier_cdm >= frame_parms->ofdm_symbol_size) { - subcarrier_cdm = subcarrier_cdm - frame_parms->ofdm_symbol_size; + if (subcarrier_cdm >= ofdm_symbol_size) { + subcarrier_cdm = subcarrier_cdm - ofdm_symbol_size; } } } @@ -853,7 +852,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, #ifdef SRS_DEBUG int subcarrier_log = subcarrier - subcarrier_offset; if (subcarrier_log < 0) { - subcarrier_log = subcarrier_log + frame_parms->ofdm_symbol_size; + subcarrier_log = subcarrier_log + ofdm_symbol_size; } if (subcarrier_log % 12 == 0) { LOG_I(NR_PHY, "------------------------------------ %d ------------------------------------\n", subcarrier_log / 12); @@ -882,7 +881,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, srs_estimated_channel16 = &srs_est[subcarrier]; const short *filter = mem_offset == 0 ? filt8_start : filt8_start_shift2; c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); - } else if ((subcarrier + K_TC) >= frame_parms->ofdm_symbol_size + } else if ((subcarrier + K_TC) >= ofdm_symbol_size || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases // filt8_end is {4096,8192,12288,16384,0,0,0,0} const short *filter = mem_offset == 0 || k == (M_sc_b_SRS - 1) ? filt8_end : filt8_end_shift2; @@ -903,7 +902,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, srs_estimated_channel16 = &srs_est[sc_offset]; // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); - } else if ((subcarrier + K_TC) >= frame_parms->ofdm_symbol_size + } else if ((subcarrier + K_TC) >= ofdm_symbol_size || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} c16multaddVectRealComplex(filt16_end, &ls_estimated, srs_estimated_channel16, 16); @@ -916,26 +915,24 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, // Subcarrier increment subcarrier += K_TC; - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } } // for (int k = 0; k < M_sc_b_SRS; k++) - memcpy(srs_estimated_channel_freq, - &srs_est[mem_offset], - (frame_parms->ofdm_symbol_size * (1 << srs_pdu->num_symbols)) * sizeof(c16_t)); + memcpy(srs_estimated_channel_freq, &srs_est[mem_offset], (ofdm_symbol_size * N_symb_SRS) * sizeof(c16_t)); #ifdef SRS_DEBUG subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } for (int k = 0; k < K_TC * M_sc_b_SRS; k++) { int subcarrier_log = subcarrier - subcarrier_offset; if (subcarrier_log < 0) { - subcarrier_log = subcarrier_log + frame_parms->ofdm_symbol_size; + subcarrier_log = subcarrier_log + ofdm_symbol_size; } if (subcarrier_log % 12 == 0) { @@ -955,36 +952,36 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, // Subcarrier increment subcarrier++; - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } } #endif // Convert to time domain - freq2time(gNB->frame_parms.ofdm_symbol_size, (int16_t *)srs_estimated_channel_freq, (int16_t *)srs_estimated_channel_time); + freq2time(ofdm_symbol_size, (int16_t *)srs_estimated_channel_freq, (int16_t *)srs_estimated_channel_time); memcpy(srs_estimated_channel_time_shifted, - &srs_estimated_channel_time[gNB->frame_parms.ofdm_symbol_size >> 1], - (gNB->frame_parms.ofdm_symbol_size >> 1) * sizeof(c16_t)); + &srs_estimated_channel_time[ofdm_symbol_size >> 1], + (ofdm_symbol_size >> 1) * sizeof(c16_t)); - memcpy(&srs_estimated_channel_time_shifted[gNB->frame_parms.ofdm_symbol_size >> 1], + memcpy(&srs_estimated_channel_time_shifted[ofdm_symbol_size >> 1], srs_estimated_channel_time, - (gNB->frame_parms.ofdm_symbol_size >> 1) * sizeof(c16_t)); + (ofdm_symbol_size >> 1) * sizeof(c16_t)); // Compute wideband SNR int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } - if (subcarrier + tot_subcarriers < frame_parms->ofdm_symbol_size) { + if (subcarrier + tot_subcarriers < ofdm_symbol_size) { *signal_power = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], tot_subcarriers) / tot_subcarriers; if (p_index == 0) { *noise_power = signal_energy_nodc(&srs_received_noise[subcarrier], tot_subcarriers) / tot_subcarriers; } } else { - int size1 = frame_parms->ofdm_symbol_size - subcarrier; + int size1 = ofdm_symbol_size - subcarrier; int size2 = tot_subcarriers - size1; uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], size1) * size1; uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[0], size2) * size2; @@ -1006,13 +1003,13 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, if (p_index == 0) { subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; for (int rb = 0; rb < m_SRS_b; rb++) { - if (subcarrier >= frame_parms->ofdm_symbol_size) { - subcarrier -= frame_parms->ofdm_symbol_size; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } - if (subcarrier + NR_NB_SC_PER_RB < frame_parms->ofdm_symbol_size) { + if (subcarrier + NR_NB_SC_PER_RB < ofdm_symbol_size) { noise_power_per_rb[rb] += signal_energy_nodc(&srs_received_noise[subcarrier], NR_NB_SC_PER_RB); } else { - int size1 = frame_parms->ofdm_symbol_size - subcarrier; + int size1 = ofdm_symbol_size - subcarrier; int size2 = NR_NB_SC_PER_RB - size1; uint32_t noise_power_per_rb1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; uint32_t noise_power_per_rb2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h index e503bcf116..4df2b47a17 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h @@ -70,19 +70,19 @@ void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB, unsigned char symbol, uint32_t nb_re_pusch); -int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB, - const int frame, - const int slot, - const int ant, - const int p_index, +int nr_srs_channel_estimation(int ant, + int p_index, + uint16_t ofdm_symbol_size, + uint16_t first_carrier_offset, + uint8_t N_symb_SRS, const nfapi_nr_srs_pdu_t *srs_pdu, const nr_srs_info_t *nr_srs_info, const c16_t *srs_generated_signal, - c16_t srs_received_signal[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_received_noise[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_freq[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)], - c16_t srs_estimated_channel_time[gNB->frame_parms.ofdm_symbol_size], - c16_t srs_estimated_channel_time_shifted[gNB->frame_parms.ofdm_symbol_size], + c16_t srs_received_signal[ofdm_symbol_size * N_symb_SRS], + c16_t srs_received_noise[ofdm_symbol_size * N_symb_SRS], + c16_t srs_estimated_channel_freq[ofdm_symbol_size * N_symb_SRS], + c16_t srs_estimated_channel_time[ofdm_symbol_size], + c16_t srs_estimated_channel_time_shifted[ofdm_symbol_size], uint32_t *signal_power, uint32_t *noise_power, int16_t *noise_power_per_rb); diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 0a4d73df96..d25d8aace6 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -900,11 +900,11 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, uint32_t noise_power = 0; for (int p_ind = 0; p_ind < N_ap; p_ind++) { uint32_t signal_power = 0; - nr_srs_channel_estimation(gNB, - frame_rx, - slot_rx, - ant_rx_ind, + nr_srs_channel_estimation(ant_rx_ind, p_ind, + ofdm_symbol_size, + frame_parms->first_carrier_offset, + N_symb_SRS, srs_pdu, nr_srs_info, nr_srs_info->srs_generated_signal[p_ind], @@ -1247,10 +1247,10 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N start_meas(&gNB->srs_beam_report_stats); nfapi_nr_srs_beamforming_report_t nr_srs_bf_report; nr_srs_bf_report.prg_size = srs_pdu->beamforming.prg_size; - nr_srs_bf_report.num_symbols = 1 << srs_pdu->num_symbols; + nr_srs_bf_report.num_symbols = N_symb_SRS; nr_srs_bf_report.wide_band_snr = srs_est >= 0 ? (gNB->srs->snr + 64) << 1 : 0xFF; // 0xFF will be set if this field is invalid - nr_srs_bf_report.num_reported_symbols = 1 << srs_pdu->num_symbols; + nr_srs_bf_report.num_reported_symbols = N_symb_SRS; AssertFatal(nr_srs_bf_report.num_reported_symbols == 1, "nr_srs_bf_report.num_reported_symbols %i not handled yet!\n", nr_srs_bf_report.num_reported_symbols); From b378acf2e0f6cf2352fb8619610daae7de5b5dde Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 22 Oct 2025 19:35:21 +0530 Subject: [PATCH 21/53] Introduce SRS oversampling for better accuracy in estimating nanoseconds --- .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 9 +++--- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 30 +++++++++++++------ openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h | 9 +++--- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 2 +- openair1/PHY/defs_gNB.h | 1 + openair1/SCHED_NR/phy_procedures_nr_gNB.c | 9 +++--- 6 files changed, 38 insertions(+), 22 deletions(-) diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c index f48e1101eb..7541d14436 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -37,12 +37,12 @@ #define I0_SKIP_DC 1 int nr_est_timing_advance_srs(const NR_DL_FRAME_PARMS *frame_parms, - const c16_t srs_estimated_channel_time[][frame_parms->ofdm_symbol_size]) + const c16_t srs_estimated_channel_time[][NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size]) { int timing_advance = 0; int max_val = 0; - for (int i = 0; i < frame_parms->ofdm_symbol_size; i++) { + for (int i = 0; i < NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size; i++) { int temp = 0; for (int aa = 0; aa < frame_parms->nb_antennas_rx; aa++) { int Re = ((c16_t*)srs_estimated_channel_time[aa])[i].r; @@ -55,9 +55,10 @@ int nr_est_timing_advance_srs(const NR_DL_FRAME_PARMS *frame_parms, } } - if (timing_advance > frame_parms->ofdm_symbol_size/2) { - timing_advance = timing_advance - frame_parms->ofdm_symbol_size; + if (timing_advance > (NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size) / 2) { + timing_advance = timing_advance - (NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size); } + timing_advance = timing_advance / NR_SRS_IDFT_OVERSAMP_FACTOR; LOG_I(NR_PHY, "Estimated SRS ToA %d\n", timing_advance); diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index 5cb60f28b3..0906321e87 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -780,8 +780,8 @@ int nr_srs_channel_estimation(int ant, c16_t srs_received_signal[ofdm_symbol_size * N_symb_SRS], c16_t srs_received_noise[ofdm_symbol_size * N_symb_SRS], c16_t srs_estimated_channel_freq[ofdm_symbol_size * N_symb_SRS], - c16_t srs_estimated_channel_time[ofdm_symbol_size], - c16_t srs_estimated_channel_time_shifted[ofdm_symbol_size], + c16_t srs_estimated_channel_time[NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], + c16_t srs_estimated_channel_time_shifted[NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], uint32_t *signal_power, uint32_t *noise_power, int16_t *noise_power_per_rb) @@ -959,15 +959,27 @@ int nr_srs_channel_estimation(int ant, #endif // Convert to time domain - freq2time(ofdm_symbol_size, (int16_t *)srs_estimated_channel_freq, (int16_t *)srs_estimated_channel_time); + int16_t ofdm_symbol_size_half = ofdm_symbol_size >> 1; + int16_t ofdm_os_size = NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size; + int16_t ofdm_os_size_half = ofdm_os_size >> 1; + int16_t start_offset = ofdm_os_size - ofdm_symbol_size_half; - memcpy(srs_estimated_channel_time_shifted, - &srs_estimated_channel_time[ofdm_symbol_size >> 1], - (ofdm_symbol_size >> 1) * sizeof(c16_t)); + c16_t chF_interpol[ofdm_os_size] __attribute__((aligned(32))); + memset(chF_interpol, 0, sizeof(chF_interpol)); - memcpy(&srs_estimated_channel_time_shifted[ofdm_symbol_size >> 1], - srs_estimated_channel_time, - (ofdm_symbol_size >> 1) * sizeof(c16_t)); + // Place SRS channel estimates in FFT shifted format for oversampling + memcpy(&chF_interpol[0], &srs_estimated_channel_freq[0], ofdm_symbol_size_half * sizeof(c16_t)); + memcpy(&chF_interpol[start_offset], + &srs_estimated_channel_freq[ofdm_symbol_size_half], + ofdm_symbol_size_half * sizeof(c16_t)); + + // Convert to time domain oversampled + freq2time(ofdm_os_size, (int16_t *)chF_interpol, (int16_t *)srs_estimated_channel_time); + + // Do FFT shift + memcpy(srs_estimated_channel_time_shifted, &srs_estimated_channel_time[ofdm_os_size_half], ofdm_os_size_half * sizeof(c16_t)); + + memcpy(&srs_estimated_channel_time_shifted[ofdm_os_size_half], srs_estimated_channel_time, ofdm_os_size_half * sizeof(c16_t)); // Compute wideband SNR int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h index 4df2b47a17..f04fde7b1b 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h @@ -59,8 +59,9 @@ void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB); void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_symb, uint32_t rb_mask_ul[14][9]); -int nr_est_timing_advance_srs(const NR_DL_FRAME_PARMS *frame_parms, - const c16_t srs_estimated_channel_time[][frame_parms->ofdm_symbol_size]); +int nr_est_timing_advance_srs( + const NR_DL_FRAME_PARMS *frame_parms, + const c16_t srs_estimated_channel_time[][NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size]); void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB, NR_DL_FRAME_PARMS *frame_parms, @@ -81,8 +82,8 @@ int nr_srs_channel_estimation(int ant, c16_t srs_received_signal[ofdm_symbol_size * N_symb_SRS], c16_t srs_received_noise[ofdm_symbol_size * N_symb_SRS], c16_t srs_estimated_channel_freq[ofdm_symbol_size * N_symb_SRS], - c16_t srs_estimated_channel_time[ofdm_symbol_size], - c16_t srs_estimated_channel_time_shifted[ofdm_symbol_size], + c16_t srs_estimated_channel_time[NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], + c16_t srs_estimated_channel_time_shifted[NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], uint32_t *signal_power, uint32_t *noise_power, int16_t *noise_power_per_rb); diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h index 1a0fabf14e..b01361ec8d 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h @@ -242,7 +242,7 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, nr_srs_info_t *nr_srs_info, int *srs_est, c16_t srs_estimated_channel_freq[][N_ap][ofdm_symbol_size * N_symb_SRS], - c16_t srs_estimated_channel_time[][N_ap][ofdm_symbol_size], + c16_t srs_estimated_channel_time[][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], int16_t *snr_per_rb); int get_nr_prach_duration(uint8_t prach_format); diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index abc700f9d2..5710b24105 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -46,6 +46,7 @@ #define MAX_NUM_RU_PER_gNB 8 #define MAX_PUCCH0_NID 8 +#define NR_SRS_IDFT_OVERSAMP_FACTOR 2 typedef struct { int nb_id; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index d25d8aace6..1b04f63950 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -868,14 +868,14 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, nr_srs_info_t *nr_srs_info, int *srs_est, c16_t srs_estimated_channel_freq[][N_ap][ofdm_symbol_size * N_symb_SRS], - c16_t srs_estimated_channel_time[][N_ap][ofdm_symbol_size], + c16_t srs_estimated_channel_time[][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], int16_t *snr_per_rb) { NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; c16_t srs_received_signal[nb_antennas_rx][ofdm_symbol_size * N_symb_SRS]; c16_t srs_received_noise[nb_antennas_rx][ofdm_symbol_size * N_symb_SRS]; - c16_t srs_estimated_channel_time_shifted[nb_antennas_rx][N_ap][ofdm_symbol_size]; + c16_t srs_estimated_channel_time_shifted[nb_antennas_rx][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size]; start_meas(&gNB->generate_srs_stats); @@ -946,7 +946,7 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, T_INT(frame_rx), T_INT(0), T_INT(0), - T_BUFFER(srs_estimated_channel_time_shifted[0][0], ofdm_symbol_size * sizeof(int32_t))); + T_BUFFER(srs_estimated_channel_time_shifted[0][0], NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size * sizeof(int32_t))); T(T_GNB_PHY_UL_SNR_ESTIMATE, T_INT(0), @@ -1171,7 +1171,8 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N int srs_est; c16_t srs_estimated_channel_freq[nb_antennas_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); - c16_t srs_estimated_channel_time[nb_antennas_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); + c16_t srs_estimated_channel_time[nb_antennas_rx][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size] + __attribute__((aligned(32))); nr_srs_rx_procedures(gNB, frame_rx, From 1b974c6ab233b5ce50a16f42338bb0a1c2b859fb Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 22 Oct 2025 20:45:06 +0530 Subject: [PATCH 22/53] merge timing_advance_offset and timing_advance_offset_ns computation --- common/utils/nr/nr_common.h | 1 + .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 91 ++++++++++++------- openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h | 10 +- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 4 +- openair1/PHY/defs_gNB.h | 1 + openair1/SCHED_NR/phy_procedures_nr_gNB.c | 32 +++++-- openair1/SIMULATION/NR_PHY/srssim.c | 51 +++++++++-- 7 files changed, 132 insertions(+), 58 deletions(-) diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h index 52eb305824..1e2f8164bd 100644 --- a/common/utils/nr/nr_common.h +++ b/common/utils/nr/nr_common.h @@ -346,6 +346,7 @@ float get_beta_dmrs(int num_cdm_groups_no_data, bool is_type2); #define CEILIDIV(a,b) ((a+b-1)/b) #define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1)) +#define BOUNDED_EVAL(a, b, c) (min(c, max(a, b))) static const char *const duplex_mode_txt[] = {"FDD", "TDD"}; diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c index 7541d14436..89aba954e9 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -36,52 +36,73 @@ #define I0_SKIP_DC 1 -int nr_est_timing_advance_srs(const NR_DL_FRAME_PARMS *frame_parms, - const c16_t srs_estimated_channel_time[][NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size]) +void nr_est_srs_timing_advance_offset(uint16_t ofdm_symbol_size, + const c16_t srs_estimated_channel_time[][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], + uint8_t ant, + uint8_t N_ap, + uint32_t samples_per_frame, + uint16_t *ta_offset, + int16_t *ta_offset_nsec) { - int timing_advance = 0; - int max_val = 0; - - for (int i = 0; i < NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size; i++) { - int temp = 0; - for (int aa = 0; aa < frame_parms->nb_antennas_rx; aa++) { - int Re = ((c16_t*)srs_estimated_channel_time[aa])[i].r; - int Im = ((c16_t*)srs_estimated_channel_time[aa])[i].i; - temp += (Re*Re/2) + (Im*Im/2); + int64_t mean_val = 0; + int64_t max_val = 0; + int32_t max_idx = 0; + int16_t srs_toa = 0; + int16_t ofdm_os_size = NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size; + for (int k = 0; k < ofdm_os_size; k++) { + int64_t abs_val = 0; + for (int p_index = 0; p_index < N_ap; p_index++) { + abs_val += squaredMod(srs_estimated_channel_time[p_index][k]); } - if (temp > max_val) { - timing_advance = i; - max_val = temp; + mean_val += abs_val; + if (abs_val > max_val) { + max_val = abs_val; + max_idx = k; } } + max_val = max_val / N_ap; + mean_val = mean_val / (N_ap * ofdm_os_size); - if (timing_advance > (NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size) / 2) { - timing_advance = timing_advance - (NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size); - } - timing_advance = timing_advance / NR_SRS_IDFT_OVERSAMP_FACTOR; + if (max_idx > ofdm_os_size >> 1) + max_idx = max_idx - ofdm_os_size; - LOG_I(NR_PHY, "Estimated SRS ToA %d\n", timing_advance); + // Check for detection threshold + if ((mean_val != 0) && (max_val / mean_val > NR_SRS_DETECTION_THRESHOLD)) { + srs_toa = max_idx / NR_SRS_IDFT_OVERSAMP_FACTOR; - // Scale the 16 factor in N_TA calculation in 38.213 section 4.2 according to the used FFT size - const uint16_t bw_scaling = frame_parms->ofdm_symbol_size >> 7; + // restrict the computation of ta_offset to antenna 0 + if (ant == 0) { + // Scale the 16 factor in N_TA calculation in 38.213 section 4.2 according to the used FFT size + const uint16_t bw_scaling = ofdm_symbol_size >> 7; - // do some integer rounding to improve TA accuracy - int sync_pos_rounded; - if (timing_advance > 0) { - sync_pos_rounded = timing_advance + (bw_scaling >> 1) - 1; + // do some integer rounding to improve TA accuracy + int sync_pos_rounded; + if (srs_toa > 0) { + sync_pos_rounded = srs_toa + (bw_scaling >> 1) - 1; + } else { + sync_pos_rounded = srs_toa - (bw_scaling >> 1) + 1; + } + + *ta_offset = sync_pos_rounded / bw_scaling; + + // put timing advance command in 0..63 range + *ta_offset = BOUNDED_EVAL(0, *ta_offset + 31, 63); + } + *ta_offset_nsec = (max_idx * 1e9) / (NR_SRS_IDFT_OVERSAMP_FACTOR * samples_per_frame * 100); } else { - sync_pos_rounded = timing_advance - (bw_scaling >> 1) + 1; + *ta_offset = 0xFFFF; + *ta_offset_nsec = 0x8000; } - int timing_advance_update = sync_pos_rounded / bw_scaling; - - // put timing advance command in 0..63 range - timing_advance_update += 31; - - if (timing_advance_update < 0) timing_advance_update = 0; - if (timing_advance_update > 63) timing_advance_update = 63; - - return timing_advance_update; + LOG_D(NR_PHY, + "SRS estimatd ToA %d [RX ant %d]: TA offset %d, TA offset ns %d (max_val %ld, mean_val %ld, max_idx %d)\n", + srs_toa, + ant, + *ta_offset, + *ta_offset_nsec, + max_val, + mean_val, + max_idx); } void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB) { diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h index f04fde7b1b..21ecb39427 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h @@ -59,9 +59,13 @@ void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB); void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_symb, uint32_t rb_mask_ul[14][9]); -int nr_est_timing_advance_srs( - const NR_DL_FRAME_PARMS *frame_parms, - const c16_t srs_estimated_channel_time[][NR_SRS_IDFT_OVERSAMP_FACTOR * frame_parms->ofdm_symbol_size]); +void nr_est_srs_timing_advance_offset(uint16_t ofdm_symbol_size, + const c16_t srs_estimated_channel_time[][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], + uint8_t ant, + uint8_t N_ap, + uint32_t samples_per_frame, + uint16_t *timing_advance_offset, + int16_t *timing_advance_offset_nsec); void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB, NR_DL_FRAME_PARMS *frame_parms, diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h index b01361ec8d..29ae5bb612 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h @@ -243,7 +243,9 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, int *srs_est, c16_t srs_estimated_channel_freq[][N_ap][ofdm_symbol_size * N_symb_SRS], c16_t srs_estimated_channel_time[][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], - int16_t *snr_per_rb); + int16_t *snr_per_rb, + uint16_t *timing_advance_offset, + int16_t *timing_advance_offset_nsec); int get_nr_prach_duration(uint8_t prach_format); diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 5710b24105..f3350d707e 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -47,6 +47,7 @@ #define MAX_NUM_RU_PER_gNB 8 #define MAX_PUCCH0_NID 8 #define NR_SRS_IDFT_OVERSAMP_FACTOR 2 +#define NR_SRS_DETECTION_THRESHOLD 10 typedef struct { int nb_id; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 1b04f63950..36dc8a3b5a 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -869,7 +869,9 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, int *srs_est, c16_t srs_estimated_channel_freq[][N_ap][ofdm_symbol_size * N_symb_SRS], c16_t srs_estimated_channel_time[][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size], - int16_t *snr_per_rb) + int16_t *snr_per_rb, + uint16_t *timing_advance_offset, + int16_t *timing_advance_offset_nsec) { NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; @@ -930,6 +932,18 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, snr_per_rb[rb] = dB_fixed(signal_power_avg) - dB_fixed(max(noise_power_per_rb[rb] / nb_antennas_rx, 1)); } stop_meas(&gNB->srs_channel_estimation_stats); + + start_meas(&gNB->srs_timing_advance_stats); + for (int ant_rx_ind = 0; ant_rx_ind < nb_antennas_rx; ant_rx_ind++) { + nr_est_srs_timing_advance_offset(ofdm_symbol_size, + srs_estimated_channel_time[ant_rx_ind], + ant_rx_ind, + N_ap, + frame_parms->samples_per_frame, + timing_advance_offset, + &timing_advance_offset_nsec[ant_rx_ind]); + } + stop_meas(&gNB->srs_timing_advance_stats); } T(T_GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE, @@ -1168,6 +1182,8 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N uint8_t N_ap = 1 << srs->srs_pdu.num_ant_ports; int16_t snr_per_rb[srs->srs_pdu.bwp_size]; nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; + uint16_t timing_advance_offset; + int16_t timing_advance_offset_nsec[nb_antennas_rx]; int srs_est; c16_t srs_estimated_channel_freq[nb_antennas_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); @@ -1186,7 +1202,9 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N &srs_est, srs_estimated_channel_freq, srs_estimated_channel_time, - snr_per_rb); + snr_per_rb, + &timing_advance_offset, + timing_advance_offset_nsec); if ((gNB->srs->snr * 10) < gNB->srs_thres) { srs_est = -1; @@ -1200,13 +1218,9 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N nfapi_nr_srs_indication_pdu_t *srs_indication = UL_INFO->srs_pdu_list + UL_INFO->srs_ind.number_of_pdus++; srs_indication->handle = srs_pdu->handle; srs_indication->rnti = srs_pdu->rnti; - start_meas(&gNB->srs_timing_advance_stats); - srs_indication->timing_advance_offset = - srs_est >= 0 ? nr_est_timing_advance_srs(frame_parms, srs_estimated_channel_time[0]) : 0xFFFF; - stop_meas(&gNB->srs_timing_advance_stats); - srs_indication->timing_advance_offset_nsec = - srs_est >= 0 ? (int16_t)((((int32_t)srs_indication->timing_advance_offset - 31) * ((int32_t)TC_NSEC_x32768)) >> 15) - : 0xFFFF; + srs_indication->timing_advance_offset = srs_est >= 0 ? timing_advance_offset : 0xFFFF; + // TODO: currently we fill timing_advance_offset_nsec for antenna 0. Need to extend it for other antennas + srs_indication->timing_advance_offset_nsec = srs_est >= 0 ? timing_advance_offset_nsec[0] : 0x8000; switch (srs_pdu->srs_parameters_v4.usage) { case 0: LOG_W(NR_PHY, "SRS report was not requested by MAC\n"); diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index 9f89d29b1d..f83da5941e 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -88,9 +88,8 @@ int main(int argc, char *argv[]) sigaction(SIGINT, &sigint_action, &oldaction); double SNR, snr0 = 0, snr1 = 20.0; - double sum_srs_snr = 0; double sigma, sigma_dB; - double snr_step = 5; + double snr_step = 1; uint8_t snr1set = 0; double **s_re, **s_im, **r_re, **r_im; int trial, n_trials = 1, delay = 0; @@ -128,7 +127,7 @@ int main(int argc, char *argv[]) InitSinLUT(); int c; - while ((c = getopt(argc, argv, "--:O:a:b:c:d:e:f:g:h:i:k:l:m:n:p:s:u:y:z:A:B:C:H:PR:S:L:")) != -1) { + while ((c = getopt(argc, argv, "--:O:a:b:c:d:e:f:g:h:i:kl:m:n:p:s:u:y:z:A:B:C:H:PR:S:L:")) != -1) { /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ if (c == 1 || c == '-' || c == 'O') @@ -570,7 +569,8 @@ int main(int argc, char *argv[]) reset_meas(&gNB->srs_channel_estimation_stats); reset_meas(&gNB->srs_timing_advance_stats); - sum_srs_snr = 0; + double sum_srs_snr = 0; + int tao_ns_count = 0; for (trial = 0; trial < n_trials && !stop; trial++) { // Estimate noise power from the transmitter level and SNR sigma_dB = 10 * log10(((double)txlev_sum) * ((double)ofdm_symbol_size / (12 * srs_pdu.bwp_size))) - SNR; @@ -627,6 +627,8 @@ int main(int argc, char *argv[]) uint8_t N_ap = 1 << srs->srs_pdu.num_ant_ports; uint8_t nb_antennas_rx = fp->nb_antennas_rx; int16_t snr_per_rb[srs->srs_pdu.bwp_size]; + uint16_t timing_advance_offset; + int16_t timing_advance_offset_nsec[nb_antennas_rx]; int srs_est; c16_t srs_estimated_channel_freq[nb_antennas_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); c16_t srs_estimated_channel_time[nb_antennas_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); @@ -643,16 +645,41 @@ int main(int argc, char *argv[]) &srs_est, srs_estimated_channel_freq, srs_estimated_channel_time, - snr_per_rb); + snr_per_rb, + &timing_advance_offset, + timing_advance_offset_nsec); - start_meas(&gNB->srs_timing_advance_stats); - nr_est_timing_advance_srs(fp, srs_estimated_channel_time[0]); - stop_meas(&gNB->srs_timing_advance_stats); sum_srs_snr += pow(10, (double)gNB->srs->snr / 10.0); + + int16_t delay_ns = delay * 1e9 / (fp->samples_per_frame * 100); + for (int ant_idx = 0; ant_idx < nb_antennas_rx; ant_idx++) { + if (n_trials == 1) + printf("[RX ant %d] SRS estimated: TA offset %d, TA offset ns %d \n", + ant_idx, + timing_advance_offset, + timing_advance_offset_nsec[ant_idx]); + if (timing_advance_offset_nsec[ant_idx] == delay_ns) + tao_ns_count++; + } stop_meas(&gNB->rx_srs_stats); } // trail loop - sum_srs_snr /= n_trials; - printf("Actual SNR : %f, Estimated SNR from SRS %f (dB)\n", SNR, 10 * log10(sum_srs_snr)); + float tao_ns_rate = (float)tao_ns_count / (n_trials * n_rx); + float SRS_SNR_dB = 10 * log10(sum_srs_snr / n_trials); + printf("Actual SNR : %f, Estimated SNR from SRS %f (dB), TA offset success rate %f %%\n", SNR, SRS_SNR_dB, tao_ns_rate * 100); + + int srs_ret = 1; + if (SNR > 30 && SRS_SNR_dB > 30) { + srs_ret = 0; + } else if (SNR >= SRS_SNR_dB) { + srs_ret = SRS_SNR_dB >= 0.7 * SNR ? 0 : 1; + } else if (SRS_SNR_dB > SNR) { + srs_ret = SNR >= 0.7 * SRS_SNR_dB ? 0 : 1; + } + + if (tao_ns_rate > 0.9 && srs_ret == 0) { + ret = 0; + break; + } if (print_perf == 1) { printf("\ngNB RX\n"); @@ -666,6 +693,10 @@ int main(int argc, char *argv[]) } // SNR loop + printf("*************\n"); + printf("SRS test %s\n", ret == 0 ? "OK" : "FAILED"); + printf("*************\n"); + // free memory for (i = 0; i < n_tx; i++) { From 9a0a89fa8897c506bb87f045e038cd9a1d21a9fd Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Thu, 23 Oct 2025 19:34:47 +0530 Subject: [PATCH 23/53] fix nr_phy_config_request_sim that overwrites threequarter sampling rate parameter --- openair1/PHY/INIT/nr_init.c | 43 ++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 58ad0f2449..ad92ae6c34 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -295,8 +295,8 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB, { NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; nfapi_nr_config_request_scf_t *gNB_config = &gNB->gNB_config; - //overwrite for new NR parameters + // overwrite with new NR parameters uint64_t rev_burst=0; for (int i=0; i<64; i++) rev_burst |= (((position_in_burst>>(63-i))&0x01)<carrier_config.num_tx_ant.value = fp->nb_antennas_tx; gNB_config->carrier_config.num_rx_ant.value = fp->nb_antennas_rx; - gNB_config->tdd_table.tdd_period.value = 0; - //gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED; - - if (mu==0) { - fp->dl_CarrierFreq = 2600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value); - fp->ul_CarrierFreq = 2600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000); - fp->nr_band = 38; - // fp->threequarter_fs= 0; - } else if (mu==1) { - fp->dl_CarrierFreq = 3600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value); - fp->ul_CarrierFreq = 3600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000); - fp->nr_band = 78; - // fp->threequarter_fs= 0; - } else if (mu==3) { - fp->dl_CarrierFreq = 27524520000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value); - fp->ul_CarrierFreq = 27524520000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000); - fp->nr_band = 261; - // fp->threequarter_fs= 0; + switch (mu) { + case 0: + gNB->gNB_config.tdd_table.tdd_period.value = 7; + fp->dl_CarrierFreq = 2600000000; + fp->ul_CarrierFreq = 2600000000; + fp->nr_band = 38; + break; + case 1: + gNB->gNB_config.tdd_table.tdd_period.value = 6; + fp->dl_CarrierFreq = 3600000000; + fp->ul_CarrierFreq = 3600000000; + fp->nr_band = 78; + break; + case 3: + gNB->gNB_config.tdd_table.tdd_period.value = 3; + fp->dl_CarrierFreq = 27524520000; + fp->ul_CarrierFreq = 27524520000; + fp->nr_band = 261; + break; + default: + printf("unsupported numerology %d\n", mu); + exit(-1); } - fp->threequarter_fs = 0; frequency_range_t frequency_range = get_freq_range_from_band(fp->nr_band); int bw_index = get_supported_band_index(mu, frequency_range, N_RB_DL); gNB_config->carrier_config.dl_bandwidth.value = get_supported_bw_mhz(frequency_range, bw_index); From 14cfbbf425c54acfe2faf2f14315153b26b5642a Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Thu, 23 Oct 2025 19:36:53 +0530 Subject: [PATCH 24/53] fix do_tdd_config_sim() while filling uplink slots --- openair1/SCHED_NR/phy_frame_config_nr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/SCHED_NR/phy_frame_config_nr.c b/openair1/SCHED_NR/phy_frame_config_nr.c index 9479e960a8..0806bd6286 100644 --- a/openair1/SCHED_NR/phy_frame_config_nr.c +++ b/openair1/SCHED_NR/phy_frame_config_nr.c @@ -226,7 +226,7 @@ void do_tdd_config_sim(PHY_VARS_gNB *gNB, int mu) pc->tdd_slot_bitmap[i].num_dl_symbols = 6; pc->tdd_slot_bitmap[i].num_ul_symbols = 4; } - for (int i = pc->num_ul_slots; i < fs.numb_slots_period; i++) { + for (int i = fs.numb_slots_period - pc->num_ul_slots; i < fs.numb_slots_period; i++) { pc->tdd_slot_bitmap[i].slot_type = TDD_NR_UPLINK_SLOT; pc->tdd_slot_bitmap[i].num_dl_symbols = 0; pc->tdd_slot_bitmap[i].num_ul_symbols = 0; From 729dc02b880d84c7023ac8149963857002c9fa59 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Tue, 28 Oct 2025 19:50:40 +0530 Subject: [PATCH 25/53] Split the code in the SNR loop as functions for readability - Introduce signal energy and noise variance functions - Combine rotation and OFDM modulation RX as a function - Harmonize the use of number of antennas across the code - Rename nr_ue_pusch_common_procedures() to nr_tx_rotation_and_ofdm_mod() to decribe the functionality better --- openair1/PHY/MODULATION/nr_modulation.h | 11 ++- openair1/PHY/MODULATION/ofdm_mod.c | 1 - openair1/PHY/MODULATION/slot_fep_nr.c | 26 ++++- .../NR_UE_TRANSPORT/nr_transport_proto_ue.h | 17 ++-- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 17 ++-- openair1/PHY/TOOLS/signal_energy.c | 29 ++++++ openair1/PHY/TOOLS/tools_defs.h | 3 + openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 17 ++-- .../SCHED_NR_UE/phy_procedures_nr_ue_sl.c | 17 ++-- openair1/SIMULATION/NR_PHY/srssim.c | 99 ++++++------------- openair1/SIMULATION/NR_PHY/ulsim.c | 30 +++--- 11 files changed, 139 insertions(+), 128 deletions(-) diff --git a/openair1/PHY/MODULATION/nr_modulation.h b/openair1/PHY/MODULATION/nr_modulation.h index 996a66b343..3fc1da8301 100644 --- a/openair1/PHY/MODULATION/nr_modulation.h +++ b/openair1/PHY/MODULATION/nr_modulation.h @@ -78,7 +78,7 @@ void nr_ue_layer_mapping(const c16_t *mod_symbs, const int n_layers, const int n \param sample_offset offset within rxdata (points to beginning of subframe) */ -int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms, +int nr_slot_fep_ul(const NR_DL_FRAME_PARMS *frame_parms, int32_t *rxdata, int32_t *rxdataF, unsigned char symbol, @@ -111,6 +111,15 @@ void apply_nr_rotation_TX(const NR_DL_FRAME_PARMS *fp, int first_symbol, int nsymb); +void nr_ofdm_demod_and_rx_rotation(c16_t **rxdata, + c16_t **rxdataF, + const NR_DL_FRAME_PARMS *fp, + int nb_antennas, + int slot, + int slot_offsetF, + enum nr_Link linktype, + bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT]); + void perform_symbol_rotation(NR_DL_FRAME_PARMS *fp, double f0, c16_t *symbol_rotation); void init_symbol_rotation(NR_DL_FRAME_PARMS *fp); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 6cc8cbe7c5..c3311fb78a 100644 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -326,4 +326,3 @@ void apply_nr_rotation_TX(const NR_DL_FRAME_PARMS *fp, } } } - diff --git a/openair1/PHY/MODULATION/slot_fep_nr.c b/openair1/PHY/MODULATION/slot_fep_nr.c index 58e47fc13a..c012d39d82 100644 --- a/openair1/PHY/MODULATION/slot_fep_nr.c +++ b/openair1/PHY/MODULATION/slot_fep_nr.c @@ -135,7 +135,7 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue, return 0; } -int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms, +int nr_slot_fep_ul(const NR_DL_FRAME_PARMS *frame_parms, int32_t *rxdata, int32_t *rxdataF, unsigned char symbol, @@ -237,3 +237,27 @@ void apply_nr_rotation_symbol_RX(const NR_DL_FRAME_PARMS *frame_parms, 15); } } + +void nr_ofdm_demod_and_rx_rotation(c16_t **rxdata, + c16_t **rxdataF, + const NR_DL_FRAME_PARMS *fp, + int nb_antennas, + int slot, + int slot_offsetF, + enum nr_Link linktype, + bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT]) +{ + for (int aa = 0; aa < nb_antennas; aa++) { + for (uint8_t symbol = 0; symbol < fp->symbols_per_slot; symbol++) { + if (was_symbol_used[symbol] == true) { + nr_slot_fep_ul(fp, (int32_t *)&rxdata[aa][0], (int32_t *)&rxdataF[aa][slot_offsetF], symbol, slot, 0); + apply_nr_rotation_symbol_RX(fp, + &rxdataF[aa][slot_offsetF + symbol * fp->ofdm_symbol_size], + fp->symbol_rotation[linktype], + fp->N_RB_UL, + slot, + symbol); + } + } + } +} diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h index ab51d118ff..68904f1fa2 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -168,15 +168,14 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, /** \brief This function does IFFT for PUSCH */ -uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, - const uint8_t slot, - const NR_DL_FRAME_PARMS *frame_parms, - const uint8_t n_antenna_ports, - c16_t **txdataF, - c16_t **txdata, - uint32_t linktype, - bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT], - bool no_phase_pre_comp); +uint8_t nr_tx_rotation_and_ofdm_mod(const uint8_t slot, + const NR_DL_FRAME_PARMS *frame_parms, + const uint8_t n_antenna_ports, + c16_t **txdataF, + c16_t **txdata, + uint32_t linktype, + bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT], + bool no_phase_pre_comp); bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 310fa7dc5f..8251f278ad 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -1502,15 +1502,14 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, stop_meas_nr_ue_phy(UE, PUSCH_PROC_STATS); } -uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, - const uint8_t slot, - const NR_DL_FRAME_PARMS *frame_parms, - const uint8_t n_antenna_ports, - c16_t **txdataF, - c16_t **txdata, - uint32_t linktype, - bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT], - bool no_phase_pre_comp) +uint8_t nr_tx_rotation_and_ofdm_mod(const uint8_t slot, + const NR_DL_FRAME_PARMS *frame_parms, + const uint8_t n_antenna_ports, + c16_t **txdataF, + c16_t **txdata, + uint32_t linktype, + bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT], + bool no_phase_pre_comp) { int N_RB = (linktype == link_type_sl) ? frame_parms->N_RB_SL : frame_parms->N_RB_UL; diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c index a7c314dd44..9b50b947c3 100644 --- a/openair1/PHY/TOOLS/signal_energy.c +++ b/openair1/PHY/TOOLS/signal_energy.c @@ -180,3 +180,32 @@ int32_t interference_power(int32_t *input, uint32_t length) return temp; } +// Computes transmitter energy level +double compute_tx_energy_level(c16_t **txdata, int nb_antennas, int offset, int length, int n_trials) +{ + double txlev_sum = 0, atxlev[nb_antennas]; + for (int aa = 0; aa < nb_antennas; aa++) { + atxlev[aa] = signal_energy((int32_t *)&txdata[aa][offset], length); + + txlev_sum += atxlev[aa]; + + if (n_trials == 1) + printf("txlev[%d] = %f (%f dB) txlev_sum %f\n", aa, atxlev[aa], 10 * log10(atxlev[aa]), txlev_sum); + } + return txlev_sum; +} + +// Computes noise variance from the input transmit energy and SNR +double compute_noise_variance(double txlev_sum, uint16_t ofdm_symbol_size, int N_RB, double SNR, int n_trials) +{ + double sigma_dB = 10 * log10(txlev_sum * ((double)ofdm_symbol_size / (12 * N_RB))) - SNR; + double sigma = pow(10, sigma_dB / 10); + + if (n_trials == 1) + printf("sigma %f (%f dB), txlev_sum %f (factor %f)\n", + sigma, + sigma_dB, + 10 * log10(txlev_sum), + (double)(double)ofdm_symbol_size / (12 * N_RB)); + return sigma; +} diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index c5a8ab13b7..2f7bd438d6 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -927,6 +927,9 @@ double signal_energy_fp(double *s_re[2], double *s_im[2], uint32_t nb_antennas, */ double signal_energy_fp2(struct complexd *s, uint32_t length); +double compute_tx_energy_level(c16_t **txdata, int nb_antennas, int offset, int length, int n_trials); + +double compute_noise_variance(double txlev_sum, uint16_t ofdm_symbol_size, int N_RB, double SNR, int n_trials); int32_t iSqrt(int32_t value); uint8_t log2_approx(uint32_t); diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 745f4961bf..bc2a803de8 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -400,15 +400,14 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, n const NR_UE_PRACH *prach_var = ue->prach_vars[proc->gNB_id]; if (!prach_var->active) { start_meas_nr_ue_phy(ue, OFDM_MOD_STATS); - nr_ue_pusch_common_procedures(ue, - proc->nr_slot_tx, - &ue->frame_parms, - ue->frame_parms.nb_antennas_tx, - (c16_t **)txdataF, - txp, - link_type_ul, - was_symbol_used, - ue->no_phase_pre_comp); + nr_tx_rotation_and_ofdm_mod(proc->nr_slot_tx, + &ue->frame_parms, + ue->frame_parms.nb_antennas_tx, + (c16_t **)txdataF, + txp, + link_type_ul, + was_symbol_used, + ue->no_phase_pre_comp); stop_meas_nr_ue_phy(ue, OFDM_MOD_STATS); } diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c index d1bbb7ae99..40f3a8256b 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c @@ -315,15 +315,14 @@ void phy_procedures_nrUE_SL_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc was_symbol_used[i] = true; if (tx_action) { LOG_D(NR_PHY, "Sending Uplink data \n"); - nr_ue_pusch_common_procedures(ue, - proc->nr_slot_tx, - fp, - fp->nb_antennas_tx, - txdataF, - txp, - link_type_sl, - was_symbol_used, - ue->no_phase_pre_comp); + nr_tx_rotation_and_ofdm_mod(proc->nr_slot_tx, + fp, + fp->nb_antennas_tx, + txdataF, + txp, + link_type_sl, + was_symbol_used, + ue->no_phase_pre_comp); } LOG_D(NR_PHY, "****** end Sidelink TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, slot_tx); diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index f83da5941e..6ce6d3b897 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -88,7 +88,6 @@ int main(int argc, char *argv[]) sigaction(SIGINT, &sigint_action, &oldaction); double SNR, snr0 = 0, snr1 = 20.0; - double sigma, sigma_dB; double snr_step = 1; uint8_t snr1set = 0; double **s_re, **s_im, **r_re, **r_im; @@ -105,7 +104,6 @@ int main(int argc, char *argv[]) int srs_comb_offset = 0; int srs_cyclic_shift = 0; int nb_symb_srs = 0; - int32_t txlev_sum = 0, atxlev[4]; int i; int loglvl = OAILOG_WARNING; int print_perf = 0; @@ -502,44 +500,31 @@ int main(int argc, char *argv[]) uint16_t ofdm_symbol_size = fp->ofdm_symbol_size; int slot_offsetF = (slot % RU_RX_SLOT_DEPTH) * NR_SYMBOLS_PER_SLOT * ofdm_symbol_size; - c16_t *txF[fp->nb_antennas_tx]; - for (i = 0; i < fp->nb_antennas_tx; i++) + c16_t *txF[n_tx]; + for (i = 0; i < n_tx; i++) txF[i] = txdataF[i] + slot_offsetF; + c16_t *txd[n_tx]; + for (i = 0; i < n_tx; i++) + txd[i] = txdata[i] + slot_offset; + ue_srs_procedures_nr(UE, &proc, (c16_t **)txF, &phy_data, was_symbol_used); //------------ TX rotation and OFDM Modulation -------------------------- - - for (int aa = 0; aa < fp->nb_antennas_tx; aa++) { - apply_nr_rotation_TX(fp, &txF[aa][0], fp->symbol_rotation[1], slot, fp->N_RB_UL, 0, fp->Ncp == EXTENDED ? 12 : 14); - if (srs_pdu.cyclic_prefix == 1) { - for (i = 0; i < NR_NUMBER_OF_SYMBOLS_PER_SLOT_EXTENDED_CP; i++) { - if (was_symbol_used[i] == true) { - PHY_ofdm_mod((int *)&txF[aa][0], - (int *)&txdata[aa][slot_offset + (ofdm_symbol_size + fp->nb_prefix_samples) * i], - ofdm_symbol_size, - 1, - fp->nb_prefix_samples, - CYCLIC_PREFIX); - } - } - } else { - nr_normal_prefix_mod(&txF[aa][0], &txdata[aa][slot_offset], fp->symbols_per_slot, fp, slot, was_symbol_used); - } - } + nr_tx_rotation_and_ofdm_mod(slot, fp, n_tx, txF, txd, link_type_ul, was_symbol_used, false); //----------- Apply propagation channel and add noise ---------------------------- double ts = 1.0 / (fp->subcarrier_spacing * ofdm_symbol_size); for (i = 0; i < slot_length; i++) { - for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { + for (int aa = 0; aa < n_tx; aa++) { s_re[aa][i] = (double)txdata[aa][slot_offset + i].r; s_im[aa][i] = (double)txdata[aa][slot_offset + i].i; } } - // Compute SRS symbol offset + // Compute SRS symbol offset and length int symbol_offset = slot_offset; int abs_first_symbol = slot * fp->symbols_per_slot; int idx_sym; @@ -547,19 +532,10 @@ int main(int argc, char *argv[]) symbol_offset += (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0; symbol_offset += ofdm_symbol_size * srs_pdu.time_start_position; + int symbol_length = ofdm_symbol_size + (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0; - // Compute transmitter level - txlev_sum = 0; - for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { - atxlev[aa] = signal_energy( - (int32_t *)&txdata[aa][symbol_offset], - ofdm_symbol_size + (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0); - - txlev_sum += atxlev[aa]; - - if (n_trials == 1) - printf("txlev[%d] = %d (%f dB) txlev_sum %d\n", aa, atxlev[aa], 10 * log10((double)atxlev[aa]), txlev_sum); - } + // Compute transmitter energy level + double txlev_sum = compute_tx_energy_level(txdata, n_tx, symbol_offset, symbol_length, n_trials); for (SNR = snr0; SNR <= snr1 && !stop; SNR += snr_step) { varArray_t *table_rx = initVarArray(1000, sizeof(double)); @@ -573,15 +549,7 @@ int main(int argc, char *argv[]) int tao_ns_count = 0; for (trial = 0; trial < n_trials && !stop; trial++) { // Estimate noise power from the transmitter level and SNR - sigma_dB = 10 * log10(((double)txlev_sum) * ((double)ofdm_symbol_size / (12 * srs_pdu.bwp_size))) - SNR; - sigma = pow(10, sigma_dB / 10); - - if (n_trials == 1) - printf("sigma %f (%f dB), txlev_sum %f (factor %f)\n", - sigma, - sigma_dB, - 10 * log10((double)txlev_sum), - (double)(double)ofdm_symbol_size / (12 * srs_pdu.bwp_size)); + double sigma = compute_noise_variance(txlev_sum, ofdm_symbol_size, srs_pdu.bwp_size, SNR, n_trials); //----------- Apply propagation channel ---------------------------- multipath_channel(UE2gNB, s_re, s_im, r_re, r_im, slot_length, 0, (n_trials == 1) ? 1 : 0); @@ -590,34 +558,24 @@ int main(int argc, char *argv[]) add_noise(rxdata, (const double **)r_re, (const double **)r_im, - sigma, + sigma, // noise power slot_length, slot_offset, ts, 0, // delay 0, // pdu_bit_map 0, // PTRS_BITMAP, - fp->nb_antennas_rx); + n_rx); //----------- OFDM Demodulation and RX rotation-------------------------- - - for (uint8_t symbol = 0; symbol < (fp->Ncp == EXTENDED ? 12 : 14); symbol++) { - for (int aa = 0; aa < fp->nb_antennas_rx; aa++) - nr_slot_fep_ul(fp, (int32_t *)&rxdata[aa][0], (int32_t *)&gNB->common_vars.rxdataF[0][aa][slot_offsetF], symbol, slot, 0); - } - - for (int aa = 0; aa < fp->nb_antennas_rx; aa++) { - for (uint8_t symbol = 0; symbol < fp->symbols_per_slot; symbol++) { - if (was_symbol_used[symbol] == true) { - apply_nr_rotation_symbol_RX(fp, - &gNB->common_vars.rxdataF[0][aa][slot_offsetF + symbol * fp->ofdm_symbol_size], - fp->symbol_rotation[1], - fp->N_RB_UL, - slot, - symbol); - } - } - } + nr_ofdm_demod_and_rx_rotation(rxdata, + gNB->common_vars.rxdataF[0], + fp, + n_rx, + slot, + slot_offsetF, + link_type_ul, + was_symbol_used); //----------- UE RX SRS procedures --------------------- @@ -625,18 +583,17 @@ int main(int argc, char *argv[]) NR_gNB_SRS_t *srs = &gNB->srs[0]; uint8_t N_symb_SRS = 1 << srs->srs_pdu.num_symbols; uint8_t N_ap = 1 << srs->srs_pdu.num_ant_ports; - uint8_t nb_antennas_rx = fp->nb_antennas_rx; int16_t snr_per_rb[srs->srs_pdu.bwp_size]; uint16_t timing_advance_offset; - int16_t timing_advance_offset_nsec[nb_antennas_rx]; + int16_t timing_advance_offset_nsec[n_rx]; int srs_est; - c16_t srs_estimated_channel_freq[nb_antennas_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); - c16_t srs_estimated_channel_time[nb_antennas_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); + c16_t srs_estimated_channel_freq[n_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); + c16_t srs_estimated_channel_time[n_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); nr_srs_rx_procedures(gNB, frame, slot, - nb_antennas_rx, + n_rx, N_ap, N_symb_SRS, ofdm_symbol_size, @@ -652,7 +609,7 @@ int main(int argc, char *argv[]) sum_srs_snr += pow(10, (double)gNB->srs->snr / 10.0); int16_t delay_ns = delay * 1e9 / (fp->samples_per_frame * 100); - for (int ant_idx = 0; ant_idx < nb_antennas_rx; ant_idx++) { + for (int ant_idx = 0; ant_idx < n_rx; ant_idx++) { if (n_trials == 1) printf("[RX ant %d] SRS estimated: TA offset %d, TA offset ns %d \n", ant_idx, diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index 18f6f3f605..c6e91d78aa 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -1460,26 +1460,20 @@ int main(int argc, char *argv[]) UL_INFO.crc_ind.number_crcs = 0; UL_INFO.srs_ind.number_of_pdus = 0; - for(uint8_t symbol = 0; symbol < (gNB->frame_parms.Ncp == EXTENDED ? 12 : 14); symbol++) { - for (int aa = 0; aa < gNB->frame_parms.nb_antennas_rx; aa++) - nr_slot_fep_ul(&gNB->frame_parms, - (int32_t *)rxdata[aa], - (int32_t *)gNB->common_vars.rxdataF[0][aa], - symbol, - slot, - 0); - } + //----------- OFDM Demodulation and RX rotation-------------------------- + bool was_symbol_used[14] = {0}; int offset = (slot & 3) * gNB->frame_parms.symbols_per_slot * gNB->frame_parms.ofdm_symbol_size; - for (int aa = 0; aa < gNB->frame_parms.nb_antennas_rx; aa++) { - const unsigned int max_symb = (gNB->frame_parms.Ncp == EXTENDED) ? 12 : 14; - for (int sym = 0; sym < max_symb; sym++) - apply_nr_rotation_symbol_RX(&gNB->frame_parms, - gNB->common_vars.rxdataF[0][aa] + offset + sym * gNB->frame_parms.ofdm_symbol_size, - gNB->frame_parms.symbol_rotation[1], - gNB->frame_parms.N_RB_UL, - slot, - sym); + for (int i = 0; i < 14; i++) { + was_symbol_used[i] = true; } + nr_ofdm_demod_and_rx_rotation(rxdata, + gNB->common_vars.rxdataF[0], + &gNB->frame_parms, + gNB->frame_parms.nb_antennas_rx, + slot, + offset, + link_type_ul, + was_symbol_used); ul_proc_error = phy_procedures_gNB_uespec_RX(gNB, frame, slot, &UL_INFO); From 0b0dce9995fc5237e7871686c50f029a62f62a78 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 29 Oct 2025 13:59:16 +0530 Subject: [PATCH 26/53] Update T traces to record toa in ns and SRS time/frequency channel over multiple rx antennas and ports --- common/utils/T/T_messages.txt | 8 +++- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 58 +++++++++++++---------- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index cd81deda2b..d2405f9033 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -138,11 +138,11 @@ ID = GNB_PHY_UL_PAYLOAD_RX_BITS ID = GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE DESC = gNodeB channel estimation in the frequency domain GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB - FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : buffer,chest_t + FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : int,port : buffer,chest_f ID = GNB_PHY_UL_TIME_CHANNEL_ESTIMATE DESC = gNodeB channel estimation in the time domain GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB - FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : buffer,chest_t + FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : int,port : buffer,chest_t ID = GNB_PHY_UL_SNR_ESTIMATE DESC = gNodeB SNR estimation based on SRS GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB @@ -155,6 +155,10 @@ ID = GNB_PHY_DL_OUTPUT_SIGNAL DESC = gNodeB output data in the freq domain for slots GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB FORMAT = int,gNB_ID : int,frame : int,slot : int,antenna : buffer,txdata +ID = GNB_PHY_UL_SRS_TOA_NS + DESC = gNB ToA estimate from SRS (in ns) + GROUP = ALL:PHY:GNB + FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : buffer,toa_ns #MAC logs ID = ENB_MAC_UE_DL_SDU diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 36dc8a3b5a..67fad3cc2f 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -918,7 +918,26 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, &signal_power, &noise_power, noise_power_per_rb); + signal_power_avg += signal_power; + + T(T_GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE, + T_INT(gNB->Mod_id), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(slot_rx), + T_INT(ant_rx_ind), + T_INT(p_ind), + T_BUFFER(srs_estimated_channel_freq[ant_rx_ind][p_ind], ofdm_symbol_size * sizeof(c16_t))); + + T(T_GNB_PHY_UL_TIME_CHANNEL_ESTIMATE, + T_INT(gNB->Mod_id), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(slot_rx), + T_INT(ant_rx_ind), + T_INT(p_ind), + T_BUFFER(srs_estimated_channel_time_shifted[ant_rx_ind][p_ind], ofdm_symbol_size * sizeof(c16_t))); } noise_power_avg += noise_power; } @@ -944,31 +963,22 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, &timing_advance_offset_nsec[ant_rx_ind]); } stop_meas(&gNB->srs_timing_advance_stats); + + T(T_GNB_PHY_UL_SNR_ESTIMATE, + T_INT(0), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(0), + T_INT(0), + T_BUFFER(snr_per_rb, srs_pdu->bwp_size * sizeof(int16_t))); + + T(T_GNB_PHY_UL_SRS_TOA_NS, + T_INT(gNB->Mod_id), + T_INT(srs_pdu->rnti), + T_INT(frame_rx), + T_INT(slot_rx), + T_BUFFER(timing_advance_offset_nsec, nb_antennas_rx * sizeof(int16_t))); } - - T(T_GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE, - T_INT(0), - T_INT(srs_pdu->rnti), - T_INT(frame_rx), - T_INT(0), - T_INT(0), - T_BUFFER(srs_estimated_channel_freq[0][0], ofdm_symbol_size * sizeof(int32_t))); - - T(T_GNB_PHY_UL_TIME_CHANNEL_ESTIMATE, - T_INT(0), - T_INT(srs_pdu->rnti), - T_INT(frame_rx), - T_INT(0), - T_INT(0), - T_BUFFER(srs_estimated_channel_time_shifted[0][0], NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size * sizeof(int32_t))); - - T(T_GNB_PHY_UL_SNR_ESTIMATE, - T_INT(0), - T_INT(srs_pdu->rnti), - T_INT(frame_rx), - T_INT(0), - T_INT(0), - T_BUFFER(snr_per_rb, srs_pdu->bwp_size * sizeof(int16_t))); } int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, NR_UL_IND_t *UL_INFO) From 0b197891ccd5c9304873261764ea5a26ec215656 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Fri, 31 Oct 2025 12:14:18 +0530 Subject: [PATCH 27/53] Introduce SRS multi-symbol channel estimation --- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 444 ++++++++++-------- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 2 +- openair1/SIMULATION/NR_PHY/srssim.c | 2 +- openair1/SIMULATION/tests/CMakeLists.txt | 5 + 4 files changed, 245 insertions(+), 208 deletions(-) diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index 0906321e87..c3a13e94a2 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -800,244 +800,276 @@ int nr_srs_channel_estimation(int ant, if (N_ap == 4 && ((K_TC == 2 && srs_pdu->cyclic_shift >= 4) || (K_TC == 4 && srs_pdu->cyclic_shift >= 6))) { fd_cdm = 2; } + uint16_t subcarrier; c16_t srs_ls_estimated_channel[ofdm_symbol_size * N_symb_SRS]; - uint8_t mem_offset = ((16 - ((intptr_t)&srs_estimated_channel_freq[subcarrier_offset + nr_srs_info->k_0_p[p_index][0]])) & 0xF) - >> 2; // >> 2 <=> /sizeof(int32_t) - - // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} - // The End of OFDM symbol corresponds to the position of last 16384 in the filter - // The c16multaddVectRealComplex applies the remaining 8 zeros of filter, therefore, to avoid a buffer overflow, - // we added 8 in the array size - c16_t srs_est[ofdm_symbol_size * N_symb_SRS + mem_offset + 8] __attribute__((aligned(32))); - c16_t ls_estimated = {0}; - + c16_t srs_estimated_channel_freq_avg[ofdm_symbol_size]; memset(srs_ls_estimated_channel, 0, ofdm_symbol_size * N_symb_SRS * sizeof(c16_t)); - memset(srs_est, 0, (ofdm_symbol_size * N_symb_SRS + mem_offset) * sizeof(c16_t)); + memset(srs_estimated_channel_freq_avg, 0, ofdm_symbol_size * sizeof(c16_t)); + + for (int srs_symb = 0; srs_symb < N_symb_SRS; srs_symb++) { + uint16_t srs_symbol_offset = srs_symb * ofdm_symbol_size; + + uint8_t mem_offset = + ((16 + - ((intptr_t)&srs_estimated_channel_freq[srs_symbol_offset + subcarrier_offset + nr_srs_info->k_0_p[p_index][srs_symb]])) + & 0xF) + >> 2; // >> 2 <=> /sizeof(int32_t) + + // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} + // The End of OFDM symbol corresponds to the position of last 16384 in the filter + // The c16multaddVectRealComplex applies the remaining 8 zeros of filter, therefore, to avoid a buffer overflow, + // we added 8 in the array size + c16_t srs_est[ofdm_symbol_size + mem_offset + 8] __attribute__((aligned(32))); + c16_t ls_estimated = {0}; + + memset(srs_est, 0, (ofdm_symbol_size + mem_offset + 8) * sizeof(c16_t)); #ifdef SRS_DEBUG - LOG_I(NR_PHY, "====================== UE port %d --> gNB Rx antenna %i ======================\n", p_index, ant); + LOG_I(NR_PHY, "====================== UE port %d --> gNB Rx antenna %i ======================\n", p_index, ant); + LOG_I(NR_PHY, "============================== SRS symbol index %d ===========================\n", srs_symb); #endif - uint16_t subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier >= ofdm_symbol_size) { - subcarrier -= ofdm_symbol_size; - } + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][srs_symb]; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; + } - c16_t *srs_estimated_channel16 = &srs_est[subcarrier + mem_offset]; + c16_t *srs_estimated_channel16 = &srs_est[subcarrier + mem_offset]; - for (int k = 0; k < M_sc_b_SRS; k++) { - if (k % fd_cdm == 0) { - ls_estimated = (c16_t){0, 0}; - uint16_t subcarrier_cdm = subcarrier; + for (int k = 0; k < M_sc_b_SRS; k++) { + if (k % fd_cdm == 0) { + ls_estimated = (c16_t){0, 0}; + uint16_t subcarrier_cdm = subcarrier; - for (int cdm_idx = 0; cdm_idx < fd_cdm; cdm_idx++) { - c16_t generated_srs = srs_generated_signal[subcarrier_cdm]; - c16_t received_srs = srs_received_signal[subcarrier_cdm]; - // We know that nr_srs_info->srs_generated_signal_bits bits are enough to represent the real and imaginary parts of - // generated_srs. So we only need a nr_srs_info->srs_generated_signal_bits shift to ensure that the result fits into 16 - // bits. - ls_estimated = c16maddConjShift(generated_srs, received_srs, ls_estimated, nr_srs_info->srs_generated_signal_bits); + for (int cdm_idx = 0; cdm_idx < fd_cdm; cdm_idx++) { + c16_t generated_srs = srs_generated_signal[srs_symbol_offset + subcarrier_cdm]; + c16_t received_srs = srs_received_signal[srs_symbol_offset + subcarrier_cdm]; + // We know that nr_srs_info->srs_generated_signal_bits bits are enough to represent the real and imaginary parts of + // generated_srs. So we only need a nr_srs_info->srs_generated_signal_bits shift to ensure that the result fits into 16 + // bits. + ls_estimated = c16maddConjShift(generated_srs, received_srs, ls_estimated, nr_srs_info->srs_generated_signal_bits); - // Subcarrier increment - subcarrier_cdm += K_TC; - if (subcarrier_cdm >= ofdm_symbol_size) { - subcarrier_cdm = subcarrier_cdm - ofdm_symbol_size; - } + // Subcarrier increment + subcarrier_cdm += K_TC; + if (subcarrier_cdm >= ofdm_symbol_size) { + subcarrier_cdm = subcarrier_cdm - ofdm_symbol_size; } } + } - srs_ls_estimated_channel[subcarrier] = ls_estimated; + srs_ls_estimated_channel[srs_symbol_offset + subcarrier] = ls_estimated; #ifdef SRS_DEBUG - int subcarrier_log = subcarrier - subcarrier_offset; - if (subcarrier_log < 0) { - subcarrier_log = subcarrier_log + ofdm_symbol_size; - } - if (subcarrier_log % 12 == 0) { - LOG_I(NR_PHY, "------------------------------------ %d ------------------------------------\n", subcarrier_log / 12); - LOG_I(NR_PHY, "\t __genRe________genIm__|____rxRe_________rxIm__|____lsRe________lsIm_\n"); - } - LOG_I(NR_PHY, - "(%4i) %6i\t%6i | %6i\t%6i | %6i\t%6i\n", - subcarrier_log, - srs_generated_signal[subcarrier].r, - srs_generated_signal[subcarrier].i, - srs_received_signal[subcarrier].r, - srs_received_signal[subcarrier].i, - ls_estimated.r, - ls_estimated.i); + int subcarrier_log = subcarrier - subcarrier_offset; + if (subcarrier_log < 0) { + subcarrier_log = subcarrier_log + ofdm_symbol_size; + } + if (subcarrier_log % 12 == 0) { + LOG_I(NR_PHY, "------------------------------------ %d ------------------------------------\n", subcarrier_log / 12); + LOG_I(NR_PHY, "\t __genRe________genIm__|____rxRe_________rxIm__|____lsRe________lsIm_\n"); + } + LOG_I(NR_PHY, + "(%4i) %6i\t%6i | %6i\t%6i | %6i\t%6i\n", + subcarrier_log, + srs_generated_signal[srs_symbol_offset + subcarrier].r, + srs_generated_signal[srs_symbol_offset + subcarrier].i, + srs_received_signal[srs_symbol_offset + subcarrier].r, + srs_received_signal[srs_symbol_offset + subcarrier].i, + ls_estimated.r, + ls_estimated.i); #endif - const uint16_t sc_offset = subcarrier + mem_offset; + const uint16_t sc_offset = subcarrier + mem_offset; - // Channel interpolation - if (srs_pdu->comb_size == 0) { - if (k == 0) { // First subcarrier case - // filt8_start is {12288,8192,4096,0,0,0,0,0} - c16multaddVectRealComplex(filt8_start, &ls_estimated, srs_estimated_channel16, 8); - } else if (subcarrier < K_TC) { // Start of OFDM symbol case - // filt8_start is {12288,8192,4096,0,0,0,0,0} - srs_estimated_channel16 = &srs_est[subcarrier]; - const short *filter = mem_offset == 0 ? filt8_start : filt8_start_shift2; - c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); - } else if ((subcarrier + K_TC) >= ofdm_symbol_size - || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases - // filt8_end is {4096,8192,12288,16384,0,0,0,0} - const short *filter = mem_offset == 0 || k == (M_sc_b_SRS - 1) ? filt8_end : filt8_end_shift2; - c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); - } else if (k % 2 == 1) { // 1st middle case - // filt8_middle2 is {4096,8192,8192,8192,4096,0,0,0} - c16multaddVectRealComplex(filt8_middle2, &ls_estimated, srs_estimated_channel16, 8); - } else if (k % 2 == 0) { // 2nd middle case - // filt8_middle4 is {0,0,4096,8192,8192,8192,4096,0} - c16multaddVectRealComplex(filt8_middle4, &ls_estimated, srs_estimated_channel16, 8); - srs_estimated_channel16 = &srs_est[sc_offset]; - } - } else { - if (k == 0) { // First subcarrier case - // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} - c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); - } else if (subcarrier < K_TC) { // Start of OFDM symbol case - srs_estimated_channel16 = &srs_est[sc_offset]; - // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} - c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); - } else if ((subcarrier + K_TC) >= ofdm_symbol_size - || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases - // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} - c16multaddVectRealComplex(filt16_end, &ls_estimated, srs_estimated_channel16, 16); - } else { // Middle case - // filt16_middle4 is {4096,8192,8192,8192,8192,8192,8192,8192,4096,0,0,0,0,0,0,0} - c16multaddVectRealComplex(filt16_middle4, &ls_estimated, srs_estimated_channel16, 16); - srs_estimated_channel16 = &srs_est[sc_offset]; - } - } - - // Subcarrier increment - subcarrier += K_TC; - if (subcarrier >= ofdm_symbol_size) { - subcarrier -= ofdm_symbol_size; - } - - } // for (int k = 0; k < M_sc_b_SRS; k++) - - memcpy(srs_estimated_channel_freq, &srs_est[mem_offset], (ofdm_symbol_size * N_symb_SRS) * sizeof(c16_t)); - -#ifdef SRS_DEBUG - subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier >= ofdm_symbol_size) { - subcarrier -= ofdm_symbol_size; - } - - for (int k = 0; k < K_TC * M_sc_b_SRS; k++) { - int subcarrier_log = subcarrier - subcarrier_offset; - if (subcarrier_log < 0) { - subcarrier_log = subcarrier_log + ofdm_symbol_size; - } - - if (subcarrier_log % 12 == 0) { - LOG_I(NR_PHY, "------------------------------------- %d -------------------------------------\n", subcarrier_log / 12); - LOG_I(NR_PHY, "\t __lsRe__________lsIm__|____intRe_______intIm__|____noiRe_______noiIm__\n"); - } - - LOG_I(NR_PHY, - "(%4i) %6i\t%6i | %6i\t%6i | %6i\t%6i\n", - subcarrier_log, - srs_ls_estimated_channel[subcarrier].r, - srs_ls_estimated_channel[subcarrier].i, - srs_estimated_channel_freq[subcarrier].r, - srs_estimated_channel_freq[subcarrier].i, - srs_received_noise[subcarrier].r, - srs_received_noise[subcarrier].i); - - // Subcarrier increment - subcarrier++; - if (subcarrier >= ofdm_symbol_size) { - subcarrier -= ofdm_symbol_size; - } - } -#endif - - // Convert to time domain - int16_t ofdm_symbol_size_half = ofdm_symbol_size >> 1; - int16_t ofdm_os_size = NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size; - int16_t ofdm_os_size_half = ofdm_os_size >> 1; - int16_t start_offset = ofdm_os_size - ofdm_symbol_size_half; - - c16_t chF_interpol[ofdm_os_size] __attribute__((aligned(32))); - memset(chF_interpol, 0, sizeof(chF_interpol)); - - // Place SRS channel estimates in FFT shifted format for oversampling - memcpy(&chF_interpol[0], &srs_estimated_channel_freq[0], ofdm_symbol_size_half * sizeof(c16_t)); - memcpy(&chF_interpol[start_offset], - &srs_estimated_channel_freq[ofdm_symbol_size_half], - ofdm_symbol_size_half * sizeof(c16_t)); - - // Convert to time domain oversampled - freq2time(ofdm_os_size, (int16_t *)chF_interpol, (int16_t *)srs_estimated_channel_time); - - // Do FFT shift - memcpy(srs_estimated_channel_time_shifted, &srs_estimated_channel_time[ofdm_os_size_half], ofdm_os_size_half * sizeof(c16_t)); - - memcpy(&srs_estimated_channel_time_shifted[ofdm_os_size_half], srs_estimated_channel_time, ofdm_os_size_half * sizeof(c16_t)); - - // Compute wideband SNR - int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; - subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - if (subcarrier >= ofdm_symbol_size) { - subcarrier -= ofdm_symbol_size; - } - if (subcarrier + tot_subcarriers < ofdm_symbol_size) { - *signal_power = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], tot_subcarriers) / tot_subcarriers; - if (p_index == 0) { - *noise_power = signal_energy_nodc(&srs_received_noise[subcarrier], tot_subcarriers) / tot_subcarriers; + // Channel interpolation + if (srs_pdu->comb_size == 0) { + if (k == 0) { // First subcarrier case + // filt8_start is {12288,8192,4096,0,0,0,0,0} + c16multaddVectRealComplex(filt8_start, &ls_estimated, srs_estimated_channel16, 8); + } else if (subcarrier < K_TC) { // Start of OFDM symbol case + // filt8_start is {12288,8192,4096,0,0,0,0,0} + srs_estimated_channel16 = &srs_est[subcarrier]; + const short *filter = mem_offset == 0 ? filt8_start : filt8_start_shift2; + c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); + } else if ((subcarrier + K_TC) >= ofdm_symbol_size + || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases + // filt8_end is {4096,8192,12288,16384,0,0,0,0} + const short *filter = mem_offset == 0 || k == (M_sc_b_SRS - 1) ? filt8_end : filt8_end_shift2; + c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); + } else if (k % 2 == 1) { // 1st middle case + // filt8_middle2 is {4096,8192,8192,8192,4096,0,0,0} + c16multaddVectRealComplex(filt8_middle2, &ls_estimated, srs_estimated_channel16, 8); + } else if (k % 2 == 0) { // 2nd middle case + // filt8_middle4 is {0,0,4096,8192,8192,8192,4096,0} + c16multaddVectRealComplex(filt8_middle4, &ls_estimated, srs_estimated_channel16, 8); + srs_estimated_channel16 = &srs_est[sc_offset]; } } else { - int size1 = ofdm_symbol_size - subcarrier; - int size2 = tot_subcarriers - size1; - uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], size1) * size1; - uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[0], size2) * size2; - *signal_power = (signal_power_p1 + signal_power_p2) / tot_subcarriers; - if (p_index == 0) { - uint64_t noise_power_p1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; - uint64_t noise_power_p2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; - *noise_power = (noise_power_p1 + noise_power_p2) / tot_subcarriers; + if (k == 0) { // First subcarrier case + // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} + c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); + } else if (subcarrier < K_TC) { // Start of OFDM symbol case + srs_estimated_channel16 = &srs_est[sc_offset]; + // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} + c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); + } else if ((subcarrier + K_TC) >= ofdm_symbol_size + || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases + // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} + c16multaddVectRealComplex(filt16_end, &ls_estimated, srs_estimated_channel16, 16); + } else { // Middle case + // filt16_middle4 is {4096,8192,8192,8192,8192,8192,8192,8192,4096,0,0,0,0,0,0,0} + c16multaddVectRealComplex(filt16_middle4, &ls_estimated, srs_estimated_channel16, 16); + srs_estimated_channel16 = &srs_est[sc_offset]; } } - *signal_power = max(*signal_power, 1); - if (*signal_power == 0) { - LOG_W(NR_PHY, "Received SRS signal power is 0\n"); - return -1; + // Subcarrier increment + subcarrier += K_TC; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } - // Compute SNR per RB for port 0 - if (p_index == 0) { - subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; - for (int rb = 0; rb < m_SRS_b; rb++) { - if (subcarrier >= ofdm_symbol_size) { - subcarrier -= ofdm_symbol_size; - } - if (subcarrier + NR_NB_SC_PER_RB < ofdm_symbol_size) { - noise_power_per_rb[rb] += signal_energy_nodc(&srs_received_noise[subcarrier], NR_NB_SC_PER_RB); - } else { - int size1 = ofdm_symbol_size - subcarrier; - int size2 = NR_NB_SC_PER_RB - size1; - uint32_t noise_power_per_rb1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; - uint32_t noise_power_per_rb2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; - noise_power_per_rb[rb] += (noise_power_per_rb1 + noise_power_per_rb2) / NR_NB_SC_PER_RB; - } - noise_power_per_rb[rb] = max(noise_power_per_rb[rb], 1); - subcarrier += NR_NB_SC_PER_RB; + } // for (int k = 0; k < M_sc_b_SRS; k++) + + memcpy(&srs_estimated_channel_freq[srs_symbol_offset], &srs_est[mem_offset], ofdm_symbol_size * sizeof(c16_t)); + + // Average srs channel estimates over multiple symbols + int16_t scale_factor = (1 << 15) / N_symb_SRS; + multadd_complex_vector_real_scalar(&srs_estimated_channel_freq[srs_symbol_offset], + scale_factor, + srs_estimated_channel_freq_avg, + ofdm_symbol_size); #ifdef SRS_DEBUG - LOG_I(NR_PHY, "[RB %3i] noise_power_per_rb = %i, snr_per_rb = %i dB\n", rb, noise_power_per_rb, snr_per_rb[rb]); + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][srs_symb]; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; + } + + for (int k = 0; k < K_TC * M_sc_b_SRS; k++) { + int subcarrier_log = subcarrier - subcarrier_offset; + if (subcarrier_log < 0) { + subcarrier_log = subcarrier_log + ofdm_symbol_size; + } + + if (subcarrier_log % 12 == 0) { + LOG_I(NR_PHY, + "---------------------------- PRB %d, symbol %d -------------------------------\n", + subcarrier_log / 12, + srs_symb); + LOG_I(NR_PHY, "\t __lsRe__________lsIm__|____intRe_______intIm__|____noiRe_______noiIm__\n"); + } + + LOG_I(NR_PHY, + "(%4i) %6i\t%6i | %6i\t%6i | %6i\t%6i\n", + subcarrier_log, + srs_ls_estimated_channel[srs_symbol_offset + subcarrier].r, + srs_ls_estimated_channel[srs_symbol_offset + subcarrier].i, + srs_estimated_channel_freq[srs_symbol_offset + subcarrier].r, + srs_estimated_channel_freq[srs_symbol_offset + subcarrier].i, + srs_received_noise[srs_symbol_offset + subcarrier].r, + srs_received_noise[srs_symbol_offset + subcarrier].i); + + // Subcarrier increment + subcarrier++; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; + } + } #endif - } + } + + // Convert to time domain + int16_t ofdm_symbol_size_half = ofdm_symbol_size >> 1; + int16_t ofdm_os_size = NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size; + int16_t ofdm_os_size_half = ofdm_os_size >> 1; + int16_t start_offset = ofdm_os_size - ofdm_symbol_size_half; + + c16_t chF_interpol[ofdm_os_size] __attribute__((aligned(32))); + memset(chF_interpol, 0, sizeof(chF_interpol)); + + // Place SRS channel estimates in FFT shifted format for oversampling + memcpy(&chF_interpol[0], &srs_estimated_channel_freq_avg[0], ofdm_symbol_size_half * sizeof(c16_t)); + memcpy(&chF_interpol[start_offset], + &srs_estimated_channel_freq_avg[ofdm_symbol_size_half], + ofdm_symbol_size_half * sizeof(c16_t)); + + // Convert to time domain oversampled + freq2time(ofdm_os_size, (int16_t *)chF_interpol, (int16_t *)srs_estimated_channel_time); + + // Do FFT shift + memcpy(srs_estimated_channel_time_shifted, &srs_estimated_channel_time[ofdm_os_size_half], ofdm_os_size_half * sizeof(c16_t)); + + memcpy(&srs_estimated_channel_time_shifted[ofdm_os_size_half], srs_estimated_channel_time, ofdm_os_size_half * sizeof(c16_t)); + + // Compute wideband SNR on the symbol 0 + int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; + } + if (subcarrier + tot_subcarriers < ofdm_symbol_size) { + *signal_power = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], tot_subcarriers) / tot_subcarriers; + if (p_index == 0) { + *noise_power = signal_energy_nodc(&srs_received_noise[subcarrier], tot_subcarriers) / tot_subcarriers; + } + } else { + int size1 = ofdm_symbol_size - subcarrier; + int size2 = tot_subcarriers - size1; + uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], size1) * size1; + uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[0], size2) * size2; + *signal_power = (signal_power_p1 + signal_power_p2) / tot_subcarriers; + if (p_index == 0) { + uint64_t noise_power_p1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; + uint64_t noise_power_p2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; + *noise_power = (noise_power_p1 + noise_power_p2) / tot_subcarriers; + } + } + + *signal_power = max(*signal_power, 1); + if (*signal_power == 0) { + LOG_W(NR_PHY, "Received SRS signal power is 0\n"); + return -1; + } + + // Compute SNR per RB for port 0 and symbol 0 + if (p_index == 0) { + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; + for (int rb = 0; rb < m_SRS_b; rb++) { + if (subcarrier >= ofdm_symbol_size) { + subcarrier -= ofdm_symbol_size; } + if (subcarrier + NR_NB_SC_PER_RB < ofdm_symbol_size) { + noise_power_per_rb[rb] += signal_energy_nodc(&srs_received_noise[subcarrier], NR_NB_SC_PER_RB); + } else { + int size1 = ofdm_symbol_size - subcarrier; + int size2 = NR_NB_SC_PER_RB - size1; + uint32_t noise_power_per_rb1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; + uint32_t noise_power_per_rb2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; + noise_power_per_rb[rb] += (noise_power_per_rb1 + noise_power_per_rb2) / NR_NB_SC_PER_RB; + } + noise_power_per_rb[rb] = max(noise_power_per_rb[rb], 1); + subcarrier += NR_NB_SC_PER_RB; #ifdef SRS_DEBUG - LOG_I(NR_PHY, "signal_power = %i dB, noise_power = %i dB, SNR = %i dB\n", dB_fixed(signal_power), dB_fixed(noise_power), *snr); + LOG_I(NR_PHY, + "[RB %3i] noise_power_per_rb = %i, SNR_per_rb = %i dB\n", + rb, + noise_power_per_rb[rb], + dB_fixed(*signal_power) - dB_fixed(noise_power_per_rb[rb])); +#endif + } + } + +#ifdef SRS_DEBUG + int32_t signal_power_dB = dB_fixed(*signal_power); + int32_t noise_power_dB = dB_fixed(*noise_power); + LOG_I(NR_PHY, + "signal_power = %i dB, noise_power = %i dB, SNR = %i dB\n", + signal_power_dB, + noise_power_dB, + signal_power_dB - noise_power_dB); #endif return 0; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 67fad3cc2f..020d33039e 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -928,7 +928,7 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, T_INT(slot_rx), T_INT(ant_rx_ind), T_INT(p_ind), - T_BUFFER(srs_estimated_channel_freq[ant_rx_ind][p_ind], ofdm_symbol_size * sizeof(c16_t))); + T_BUFFER(srs_estimated_channel_freq[ant_rx_ind][p_ind], N_symb_SRS * ofdm_symbol_size * sizeof(c16_t))); T(T_GNB_PHY_UL_TIME_CHANNEL_ESTIMATE, T_INT(gNB->Mod_id), diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index 6ce6d3b897..2b891361c6 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -143,7 +143,7 @@ int main(int argc, char *argv[]) AssertFatal(nb_symb_srs == 1 || nb_symb_srs == 2 || nb_symb_srs == 4, "number of srs symbols %d is not 1,2,4\n", nb_symb_srs); - nb_symb_srs >>= 2; // Value: 0 = 1 symbol, 1 = 2 symbols, 2 = 4 symbols + nb_symb_srs >>= 1; // Value: 0 = 1 symbol, 1 = 2 symbols, 2 = 4 symbols break; case 'c': diff --git a/openair1/SIMULATION/tests/CMakeLists.txt b/openair1/SIMULATION/tests/CMakeLists.txt index a9fbfec228..98c8a53604 100644 --- a/openair1/SIMULATION/tests/CMakeLists.txt +++ b/openair1/SIMULATION/tests/CMakeLists.txt @@ -355,6 +355,11 @@ add_physim_test(physim.5g.nr_srssim.test7 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, add_physim_test(physim.5g.nr_srssim.test8 "SRS: 120KHz SCS, 32 PRBs, SNR 20 dB, ToA 19, Combsize 2" nr_srssim -n300 -R32 -y2 -z2 -d 19 -u 3) add_physim_test(physim.5g.nr_srssim.test9 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 11, Combsize 4" nr_srssim -n300 -R106 -y2 -z2 -d 11 -e 1) add_physim_test(physim.5g.nr_srssim.test10 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 7, Combsize 4, Comb offset 1" nr_srssim -n300 -R106 -y2 -z2 -d 7 -e 1 -f 1) +add_physim_test(physim.5g.nr_srssim.test11 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 2, SRS symbols 2" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 2) +add_physim_test(physim.5g.nr_srssim.test12 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 2, SRS symbols 4" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 4) +add_physim_test(physim.5g.nr_srssim.test13 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 4, SRS symbols 2" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 2 -e1) +add_physim_test(physim.5g.nr_srssim.test14 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 4, SRS symbols 4" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 4 -e1) +add_physim_test(physim.5g.nr_srssim.test15 "SRS: 30KHz SCS, 217 PRBs, SNR 20 dB, ToA 8, Combsize 2, SRS symbols 4" nr_srssim -n300 -R217 -y2 -z2 -d 8 -b 4) #################################################################################### ###### offload-specific tests ###### From 4c48d915383de41bf0f8ec8579a2d08aaaf3d5ed Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 5 Nov 2025 18:08:19 +0530 Subject: [PATCH 28/53] Fix issues detected using address sanitizer --- openair1/SIMULATION/NR_PHY/srssim.c | 50 +++++++++++++---------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index 2b891361c6..0592bc42d1 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -588,7 +588,7 @@ int main(int argc, char *argv[]) int16_t timing_advance_offset_nsec[n_rx]; int srs_est; c16_t srs_estimated_channel_freq[n_rx][N_ap][ofdm_symbol_size * N_symb_SRS] __attribute__((aligned(32))); - c16_t srs_estimated_channel_time[n_rx][N_ap][ofdm_symbol_size] __attribute__((aligned(32))); + c16_t srs_estimated_channel_time[n_rx][N_ap][NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size] __attribute__((aligned(32))); nr_srs_rx_procedures(gNB, frame, @@ -624,6 +624,18 @@ int main(int argc, char *argv[]) float SRS_SNR_dB = 10 * log10(sum_srs_snr / n_trials); printf("Actual SNR : %f, Estimated SNR from SRS %f (dB), TA offset success rate %f %%\n", SNR, SRS_SNR_dB, tao_ns_rate * 100); + if (print_perf == 1) { + printf("\ngNB RX\n"); + printDistribution(&gNB->rx_srs_stats, table_rx, "RX SRS time"); + printStatIndent(&gNB->generate_srs_stats, "Generate SRS sequence time"); + printStatIndent(&gNB->get_srs_signal_stats, "Get SRS signal time"); + printStatIndent(&gNB->srs_channel_estimation_stats, "SRS channel estimation time"); + printStatIndent(&gNB->srs_timing_advance_stats, "SRS timing advance estimation time"); + printf("\n"); + } + + free(table_rx); + int srs_ret = 1; if (SNR > 30 && SRS_SNR_dB > 30) { srs_ret = 0; @@ -638,16 +650,6 @@ int main(int argc, char *argv[]) break; } - if (print_perf == 1) { - printf("\ngNB RX\n"); - printDistribution(&gNB->rx_srs_stats, table_rx, "RX SRS time"); - printStatIndent(&gNB->generate_srs_stats, "Generate SRS sequence time"); - printStatIndent(&gNB->get_srs_signal_stats, "Get SRS signal time"); - printStatIndent(&gNB->srs_channel_estimation_stats, "SRS channel estimation time"); - printStatIndent(&gNB->srs_timing_advance_stats, "SRS timing advance estimation time"); - printf("\n"); - } - } // SNR loop printf("*************\n"); @@ -659,33 +661,27 @@ int main(int argc, char *argv[]) for (i = 0; i < n_tx; i++) { free(s_re[i]); free(s_im[i]); + free(txdata[i]); + free(txdataF[i]); } + free(s_re); + free(s_im); + free(txdata); + free(txdataF); + for (i = 0; i < n_rx; i++) { free(r_re[i]); free(r_im[i]); + free(rxdata[i]); + free(gNB->common_vars.rxdataF[0][i]); } - free(s_re); - free(s_im); free(r_re); free(r_im); - - for (i = 0; i < n_rx; i++) { - free(rxdata[i]); - } free(rxdata); - for (i = 0; i < n_tx; i++) { - free(txdata[i]); - } - free(txdata); - - for (i = 0; i < n_tx; i++) { - free(txdataF[i]); - } - free(txdataF); - phy_free_nr_gNB(gNB); + free_channel_desc_scm(UE2gNB); free_and_zero(UE->nr_srs_info); free(gNB->RU_list[0]); free(UE); From bfb0c707febdbe1870c143de8654d72a161ab1e9 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Mon, 10 Nov 2025 20:30:30 +0530 Subject: [PATCH 29/53] Fix tdd pattern of phy_simulators for mu = 0, 3 --- openair1/SCHED_NR/phy_frame_config_nr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/SCHED_NR/phy_frame_config_nr.c b/openair1/SCHED_NR/phy_frame_config_nr.c index 0806bd6286..4c2c19847c 100644 --- a/openair1/SCHED_NR/phy_frame_config_nr.c +++ b/openair1/SCHED_NR/phy_frame_config_nr.c @@ -199,8 +199,8 @@ void do_tdd_config_sim(PHY_VARS_gNB *gNB, int mu) switch (mu) { case 0: - pc->num_dl_slots = 3; - pc->num_ul_slots = 1; + pc->num_dl_slots = 7; + pc->num_ul_slots = 2; break; case 1: @@ -209,8 +209,8 @@ void do_tdd_config_sim(PHY_VARS_gNB *gNB, int mu) break; case 3: - pc->num_dl_slots = 27; - pc->num_ul_slots = 12; + pc->num_dl_slots = 7; + pc->num_ul_slots = 2; break; default: From 7b698531a93462c7780650d8154dcb217bfd3394 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Mon, 10 Nov 2025 20:31:38 +0530 Subject: [PATCH 30/53] update phy_simulators testcases --- openair1/PHY/NR_TRANSPORT/srs_rx.c | 5 +-- .../PHY/nr_phy_common/src/nr_phy_common_srs.c | 5 +++ openair1/SCHED_NR/phy_procedures_nr_gNB.c | 3 +- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 10 +++--- openair1/SIMULATION/NR_PHY/srssim.c | 6 ++-- openair1/SIMULATION/NR_PHY/ulsim.c | 3 +- openair1/SIMULATION/tests/CMakeLists.txt | 31 ++++++++++--------- .../LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c | 5 +-- 8 files changed, 39 insertions(+), 29 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/srs_rx.c b/openair1/PHY/NR_TRANSPORT/srs_rx.c index d5731557a0..5d84c11c99 100644 --- a/openair1/PHY/NR_TRANSPORT/srs_rx.c +++ b/openair1/PHY/NR_TRANSPORT/srs_rx.c @@ -56,7 +56,8 @@ void nr_fill_srs(PHY_VARS_gNB *gNB, frame_t frame, slot_t slot, nfapi_nr_srs_pdu srs->active = true; srs->beam_nb = 0; if (gNB->common_vars.beam_id) { - int bitmap = SL_to_bitmap(srs_pdu->time_start_position, 1 << srs_pdu->num_symbols); + const uint8_t l0 = gNB->frame_parms.symbols_per_slot - 1 - srs_pdu->time_start_position; + int bitmap = SL_to_bitmap(l0, 1 << srs_pdu->num_symbols); int fapi_beam_idx = srs_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx; srs->beam_nb = beam_index_allocation(gNB->enable_analog_das, fapi_beam_idx, @@ -84,7 +85,7 @@ int nr_get_srs_signal(PHY_VARS_gNB *gNB, const NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms; const uint16_t n_symbols = (slot % RU_RX_SLOT_DEPTH) * frame_parms->symbols_per_slot; // number of symbols until this slot - const uint8_t l0 = srs_pdu->time_start_position; // starting symbol in this slot + const uint8_t l0 = frame_parms->symbols_per_slot - 1 - srs_pdu->time_start_position; // starting symbol in this slot const uint64_t symbol_offset = (n_symbols + l0) * frame_parms->ofdm_symbol_size; const uint64_t subcarrier_offset = frame_parms->first_carrier_offset + srs_pdu->bwp_start * NR_NB_SC_PER_RB; diff --git a/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c b/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c index 9d91986b50..95b3a86d91 100644 --- a/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c +++ b/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c @@ -180,6 +180,11 @@ bool generate_srs_nr(const NR_DL_FRAME_PARMS *frame_parms, LOG_I(NR_PHY,"M_sc_b_SRS = %i\n", M_sc_b_SRS); #endif + AssertFatal(l0 + nr_srs_info->N_symb_SRS - 1 < frame_parms->symbols_per_slot, + "last symbol index %d should be < %d\n", + l0 + nr_srs_info->N_symb_SRS, + frame_parms->symbols_per_slot - 1); + // Validation of SRS config parameters if (nr_srs_info->R == 0) { diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 020d33039e..7e47f422e8 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -717,9 +717,10 @@ static void fill_ul_rb_mask(PHY_VARS_gNB *gNB, if (!(srs && srs->active && srs->frame == frame_rx && srs->slot == slot_rx)) continue; nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; + const uint8_t l0 = gNB->frame_parms.symbols_per_slot - 1 - srs_pdu->time_start_position; for (int symbol = 0; symbol < (1 << srs_pdu->num_symbols); symbol++) { for (int rb = srs_pdu->bwp_start; rb < (srs_pdu->bwp_start + srs_pdu->bwp_size); rb++) { - rb_mask_ul[srs_pdu->time_start_position + symbol][rb >> 5] |= 1U << (rb & 31); + rb_mask_ul[l0 + symbol][rb >> 5] |= 1U << (rb & 31); } } } diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index bc2a803de8..b40a2ab063 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -314,12 +314,13 @@ bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, return false; } + NR_DL_FRAME_PARMS *frame_parms = &(ue->frame_parms); fapi_nr_ul_config_srs_pdu *srs_config_pdu = &phy_data->srs_vars.srs_config_pdu; - int first_srs_symbol = ue->frame_parms.symbols_per_slot - 1 - srs_config_pdu->time_start_position; + const uint8_t l0 = frame_parms->symbols_per_slot - 1 - srs_config_pdu->time_start_position; // Num consecutive SRS symbols according to 38.211 6.4.1.4.1 int num_srs_symbols[] = {1, 2, 4, 8, 12}; - int last_srs_symbol = first_srs_symbol + num_srs_symbols[srs_config_pdu->num_symbols] - 1; - for (int i = first_srs_symbol; i <= last_srs_symbol; i++) { + int last_srs_symbol = l0 + num_srs_symbols[srs_config_pdu->num_symbols] - 1; + for (int i = l0; i <= last_srs_symbol; i++) { was_symbol_used[i] = true; } @@ -351,8 +352,7 @@ bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, #endif configure_srs_info(srs_config_pdu, ue->nr_srs_info); - NR_DL_FRAME_PARMS *frame_parms = &(ue->frame_parms); - uint16_t symbol_offset = (frame_parms->symbols_per_slot - 1 - srs_config_pdu->time_start_position)*frame_parms->ofdm_symbol_size; + uint16_t symbol_offset = l0 * frame_parms->ofdm_symbol_size; bool generated = generate_srs_nr(frame_parms, txdataF, symbol_offset, diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index 0592bc42d1..fa7388498b 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -498,7 +498,7 @@ int main(int argc, char *argv[]) bool was_symbol_used[NR_NUMBER_OF_SYMBOLS_PER_SLOT] = {0}; int slot_offset = get_samples_slot_timestamp(fp, slot); uint16_t ofdm_symbol_size = fp->ofdm_symbol_size; - int slot_offsetF = (slot % RU_RX_SLOT_DEPTH) * NR_SYMBOLS_PER_SLOT * ofdm_symbol_size; + int slot_offsetF = (slot % RU_RX_SLOT_DEPTH) * fp->symbols_per_slot * ofdm_symbol_size; c16_t *txF[n_tx]; for (i = 0; i < n_tx; i++) @@ -528,10 +528,10 @@ int main(int argc, char *argv[]) int symbol_offset = slot_offset; int abs_first_symbol = slot * fp->symbols_per_slot; int idx_sym; - for (idx_sym = abs_first_symbol; idx_sym < abs_first_symbol + srs_pdu.time_start_position; idx_sym++) + for (idx_sym = abs_first_symbol; idx_sym < abs_first_symbol + srs_start_symbol; idx_sym++) symbol_offset += (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0; - symbol_offset += ofdm_symbol_size * srs_pdu.time_start_position; + symbol_offset += ofdm_symbol_size * srs_start_symbol; int symbol_length = ofdm_symbol_size + (idx_sym % (0x7 << fp->numerology_index)) ? fp->nb_prefix_samples : fp->nb_prefix_samples0; // Compute transmitter energy level diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index c6e91d78aa..444492b545 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -1273,7 +1273,7 @@ int main(int argc, char *argv[]) srs_pdu->subcarrier_spacing = gNB->frame_parms.subcarrier_spacing; srs_pdu->num_ant_ports = n_tx == 4 ? 2 : n_tx == 2 ? 1 : 0; srs_pdu->sequence_id = 40; - srs_pdu->time_start_position = gNB->frame_parms.symbols_per_slot - 1; + srs_pdu->time_start_position = 0; srs_pdu->config_index = rrc_get_max_nr_csrs(srs_pdu->bwp_size, srs_pdu->bandwidth_index); srs_pdu->resource_type = NR_SRS_Resource__resourceType_PR_periodic; srs_pdu->t_srs = 1; @@ -1371,6 +1371,7 @@ int main(int argc, char *argv[]) srs_config_pdu->sequence_id = 40; srs_config_pdu->resource_type = NR_SRS_Resource__resourceType_PR_periodic; srs_config_pdu->t_srs = 1; + srs_config_pdu->time_start_position = 0; } for (int i = 0; i < (TBS / 8); i++) diff --git a/openair1/SIMULATION/tests/CMakeLists.txt b/openair1/SIMULATION/tests/CMakeLists.txt index 98c8a53604..0c2ab8dd39 100644 --- a/openair1/SIMULATION/tests/CMakeLists.txt +++ b/openair1/SIMULATION/tests/CMakeLists.txt @@ -345,21 +345,22 @@ add_physim_test(physim.5g.nr_psbchsim.test2 "PSBCH TxRx" nr_psbchsim -n 30) ###### nr_srssim unit test ###### #################################################################################### -add_physim_test(physim.5g.nr_srssim.test1 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 2" nr_srssim -n300 -R106 -y2 -z2 -d 24) -add_physim_test(physim.5g.nr_srssim.test2 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 15, Combsize 2, Threequarter sampling" nr_srssim -n300 -R106 -y2 -z2 -d 15 -k) -add_physim_test(physim.5g.nr_srssim.test3 "SRS: 30KHz SCS, 217 PRBs, SNR 20 dB, ToA 8, Combsize 2" nr_srssim -n300 -R217 -y2 -z2 -d 8) -add_physim_test(physim.5g.nr_srssim.test4 "SRS: 30KHz SCS, 273 PRBs, SNR 20 dB, TOA 30, Combsize 2" nr_srssim -n300 -R273 -y2 -z2 -d 30) -add_physim_test(physim.5g.nr_srssim.test5 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 16, Combsize 2, Cyclic shift 3" nr_srssim -n300 -R106 -y2 -z2 -d 16 -i 1) -add_physim_test(physim.5g.nr_srssim.test6 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 23, Combsize 2, Comb offset 1" nr_srssim -n300 -R106 -y2 -z2 -d 23 -f 1) -add_physim_test(physim.5g.nr_srssim.test7 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 8, Combsize 2, Symbol start 9" nr_srssim -n300 -R106 -y2 -z2 -d 8 -a 9) -add_physim_test(physim.5g.nr_srssim.test8 "SRS: 120KHz SCS, 32 PRBs, SNR 20 dB, ToA 19, Combsize 2" nr_srssim -n300 -R32 -y2 -z2 -d 19 -u 3) -add_physim_test(physim.5g.nr_srssim.test9 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 11, Combsize 4" nr_srssim -n300 -R106 -y2 -z2 -d 11 -e 1) -add_physim_test(physim.5g.nr_srssim.test10 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 7, Combsize 4, Comb offset 1" nr_srssim -n300 -R106 -y2 -z2 -d 7 -e 1 -f 1) -add_physim_test(physim.5g.nr_srssim.test11 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 2, SRS symbols 2" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 2) -add_physim_test(physim.5g.nr_srssim.test12 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 2, SRS symbols 4" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 4) -add_physim_test(physim.5g.nr_srssim.test13 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 4, SRS symbols 2" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 2 -e1) -add_physim_test(physim.5g.nr_srssim.test14 "SRS: 30KHz SCS, 106 PRBs, SNR 20 dB, ToA 24, Combsize 4, SRS symbols 4" nr_srssim -n300 -R106 -y2 -z2 -d 24 -b 4 -e1) -add_physim_test(physim.5g.nr_srssim.test15 "SRS: 30KHz SCS, 217 PRBs, SNR 20 dB, ToA 8, Combsize 2, SRS symbols 4" nr_srssim -n300 -R217 -y2 -z2 -d 8 -b 4) +add_physim_test(physim.5g.nr_srssim.test1 "SRS: 30KHz SCS, 106 PRBs, ToA 24, Combsize 2" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 24) +add_physim_test(physim.5g.nr_srssim.test2 "SRS: 30KHz SCS, 106 PRBs, ToA 15, Combsize 2, Threequarter sampling" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 15 -k) +add_physim_test(physim.5g.nr_srssim.test3 "SRS: 30KHz SCS, 217 PRBs, ToA 8, Combsize 2" nr_srssim -n300 -R217 -s0 -S5 -y2 -z2 -d 8) +add_physim_test(physim.5g.nr_srssim.test4 "SRS: 30KHz SCS, 273 PRBs, TOA 30, Combsize 2" nr_srssim -n300 -R273 -s0 -S5 -y2 -z2 -d 30) +add_physim_test(physim.5g.nr_srssim.test5 "SRS: 30KHz SCS, 106 PRBs, ToA 16, Combsize 2, Cyclic shift 3" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 16 -i 1) +add_physim_test(physim.5g.nr_srssim.test6 "SRS: 30KHz SCS, 106 PRBs, ToA 23, Combsize 2, Comb offset 1" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 23 -f 1) +add_physim_test(physim.5g.nr_srssim.test7 "SRS: 30KHz SCS, 106 PRBs, ToA 8, Combsize 2, Symbol start 9" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 8 -a 9) +add_physim_test(physim.5g.nr_srssim.test8 "SRS: 120KHz SCS, 32 PRBs, ToA 19, Combsize 2" nr_srssim -n300 -R32 -s0 -S5 -y2 -z2 -d 19 -u 3) +add_physim_test(physim.5g.nr_srssim.test9 "SRS: 30KHz SCS, 106 PRBs, ToA 11, Combsize 4" nr_srssim -n300 -R106 -s5 -S10 -y2 -z2 -d 11 -e 1) +add_physim_test(physim.5g.nr_srssim.test10 "SRS: 30KHz SCS, 106 PRBs, ToA 7, Combsize 4, Comb offset 1" nr_srssim -n300 -R106 -s5 -S10 -y2 -z2 -d 7 -e 1 -f 1) +add_physim_test(physim.5g.nr_srssim.test11 "SRS: 30KHz SCS, 106 PRBs, ToA 24, Combsize 2, SRS symbols 2, SRS start symbol 8" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 24 -b 2 -a 8) +add_physim_test(physim.5g.nr_srssim.test12 "SRS: 30KHz SCS, 106 PRBs, ToA 24, Combsize 2, SRS symbols 4, SRS start symbol 8" nr_srssim -n300 -R106 -s0 -S5 -y2 -z2 -d 24 -b 4 -a 8) +add_physim_test(physim.5g.nr_srssim.test13 "SRS: 30KHz SCS, 106 PRBs, ToA 24, Combsize 4, SRS symbols 2, SRS start symbol 8" nr_srssim -n300 -R106 -s5 -S10 -y2 -z2 -d 24 -b 2 -e1 -a 8) +add_physim_test(physim.5g.nr_srssim.test14 "SRS: 30KHz SCS, 106 PRBs, ToA 24, Combsize 4, SRS symbols 4, SRS start symbol 8" nr_srssim -n300 -R106 -s5 -S10 -y2 -z2 -d 24 -b 4 -e1 -a 8) +add_physim_test(physim.5g.nr_srssim.test15 "SRS: 30KHz SCS, 217 PRBs, ToA 8, Combsize 2, SRS symbols 4, SRS start symbol 8" nr_srssim -n300 -R217 -s0 -S5 -y2 -z2 -d 8 -b 4 -a 8) +add_physim_test(physim.5g.nr_srssim.test16 "SRS: 30KHz SCS, 106 PRBs, SNR 2 dB to 30 dB in steps of 5 dB, ToA 24, Combsize 2" nr_srssim -n300 -R106 -s2 -S30 -y2 -z2 -d 24) #################################################################################### ###### offload-specific tests ###### diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c index 8c8a25e446..1afa2d1502 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c @@ -428,7 +428,7 @@ static void nr_configure_srs(gNB_MAC_INST *nrmac, srs_pdu->num_ant_ports = srs_resource->nrofSRS_Ports; srs_pdu->num_symbols = srs_resource->resourceMapping.nrofSymbols; srs_pdu->num_repetitions = srs_resource->resourceMapping.repetitionFactor; - srs_pdu->time_start_position = NR_NUMBER_OF_SYMBOLS_PER_SLOT - 1 - srs_resource->resourceMapping.startPosition; + srs_pdu->time_start_position = srs_resource->resourceMapping.startPosition; srs_pdu->config_index = srs_resource->freqHopping.c_SRS; srs_pdu->sequence_id = srs_resource->sequenceId; srs_pdu->bandwidth_index = srs_resource->freqHopping.b_SRS; @@ -479,7 +479,8 @@ static void nr_configure_srs(gNB_MAC_INST *nrmac, AssertFatal(beam.idx >= 0, "Cannot allocate SRS in any available beam\n"); uint16_t *vrb_map_UL = &nrmac->common_channels[CC_id].vrb_map_UL[beam.idx][buffer_index * MAX_BWP_SIZE]; uint16_t num = 1 << srs_pdu->num_symbols; // 0,1,2 means 1,2,4 symbols, see 222.10.04 table 3-105 - uint16_t mask = SL_to_bitmap(srs_pdu->time_start_position, num); + const uint8_t l0 = NR_NUMBER_OF_SYMBOLS_PER_SLOT - 1 - srs_pdu->time_start_position; + uint16_t mask = SL_to_bitmap(l0, num); DevAssert(mask != 0); for (int i = 0; i < srs_pdu->bwp_size; ++i) { int rb = i + srs_pdu->bwp_start; From be3ad2beba4152e6e22548253d5a5d4ed10943cc Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Thu, 20 Nov 2025 17:20:29 +0530 Subject: [PATCH 31/53] rewrite srs channel estimation to fix memory alignment in SRS channel estimation The memory alignment is required to use c16multaddVectRealComplex in SRS channel interpolation. With a change in SRS comb_offset, the existing algorithm was giving segmentation fault. The existing srs channel estimation required memory alignment at two stages. 1. When k = 0 (the first srs subcarrier), 2. When subcarrier < K_TC (wrapped around after ofdm_symbol_size). Thus two memory alignments are required leading to complications. The srs channel estimation is now simplified to do it linearly instead of wrapping around. This simplified the memory alignment required only when k = 0. --- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 103 ++++++++---------- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 3 +- 2 files changed, 50 insertions(+), 56 deletions(-) diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index c3a13e94a2..f9203f488f 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -791,6 +791,7 @@ int nr_srs_channel_estimation(int ant, #endif const uint64_t subcarrier_offset = first_carrier_offset + srs_pdu->bwp_start * NR_NB_SC_PER_RB; + const uint64_t first_subcarrier = (first_carrier_offset - (ofdm_symbol_size >> 1)) + srs_pdu->bwp_start * NR_NB_SC_PER_RB; const uint8_t N_ap = 1 << srs_pdu->num_ant_ports; const uint8_t K_TC = 2 << srs_pdu->comb_size; @@ -810,21 +811,17 @@ int nr_srs_channel_estimation(int ant, for (int srs_symb = 0; srs_symb < N_symb_SRS; srs_symb++) { uint16_t srs_symbol_offset = srs_symb * ofdm_symbol_size; - uint8_t mem_offset = - ((16 - - ((intptr_t)&srs_estimated_channel_freq[srs_symbol_offset + subcarrier_offset + nr_srs_info->k_0_p[p_index][srs_symb]])) - & 0xF) - >> 2; // >> 2 <=> /sizeof(int32_t) + // Additional 4 in the array size is needed to maintain 16 byte memory alignment required for AVX2 instructions in channel + // interpolation + c16_t srs_est[ofdm_symbol_size + 4] __attribute__((aligned(32))); + memset(srs_est, 0, (ofdm_symbol_size + 4) * sizeof(c16_t)); + + // Estimate 16 byte memory alignment offset for the first SRS subcarrier to use AVX2 instructions in channel interpolation + uint8_t mem_offset = (16 - (((intptr_t)&srs_est[first_subcarrier + nr_srs_info->k_0_p[p_index][srs_symb]]) & 0xF)) + >> 2; // >> 2 <=> /sizeof(int32_t) - // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} - // The End of OFDM symbol corresponds to the position of last 16384 in the filter - // The c16multaddVectRealComplex applies the remaining 8 zeros of filter, therefore, to avoid a buffer overflow, - // we added 8 in the array size - c16_t srs_est[ofdm_symbol_size + mem_offset + 8] __attribute__((aligned(32))); c16_t ls_estimated = {0}; - memset(srs_est, 0, (ofdm_symbol_size + mem_offset + 8) * sizeof(c16_t)); - #ifdef SRS_DEBUG LOG_I(NR_PHY, "====================== UE port %d --> gNB Rx antenna %i ======================\n", p_index, ant); LOG_I(NR_PHY, "============================== SRS symbol index %d ===========================\n", srs_symb); @@ -835,7 +832,8 @@ int nr_srs_channel_estimation(int ant, subcarrier -= ofdm_symbol_size; } - c16_t *srs_estimated_channel16 = &srs_est[subcarrier + mem_offset]; + uint16_t subcarrier_abs = mem_offset + first_subcarrier + nr_srs_info->k_0_p[p_index][srs_symb]; + c16_t *srs_estimated_channel16 = &srs_est[subcarrier_abs]; for (int k = 0; k < M_sc_b_SRS; k++) { if (k % fd_cdm == 0) { @@ -880,47 +878,33 @@ int nr_srs_channel_estimation(int ant, ls_estimated.i); #endif - const uint16_t sc_offset = subcarrier + mem_offset; - // Channel interpolation if (srs_pdu->comb_size == 0) { if (k == 0) { // First subcarrier case // filt8_start is {12288,8192,4096,0,0,0,0,0} c16multaddVectRealComplex(filt8_start, &ls_estimated, srs_estimated_channel16, 8); - } else if (subcarrier < K_TC) { // Start of OFDM symbol case - // filt8_start is {12288,8192,4096,0,0,0,0,0} - srs_estimated_channel16 = &srs_est[subcarrier]; - const short *filter = mem_offset == 0 ? filt8_start : filt8_start_shift2; - c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); - } else if ((subcarrier + K_TC) >= ofdm_symbol_size - || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases + } else if (k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases // filt8_end is {4096,8192,12288,16384,0,0,0,0} - const short *filter = mem_offset == 0 || k == (M_sc_b_SRS - 1) ? filt8_end : filt8_end_shift2; - c16multaddVectRealComplex(filter, &ls_estimated, srs_estimated_channel16, 8); + c16multaddVectRealComplex(filt8_end, &ls_estimated, srs_estimated_channel16, 8); } else if (k % 2 == 1) { // 1st middle case // filt8_middle2 is {4096,8192,8192,8192,4096,0,0,0} c16multaddVectRealComplex(filt8_middle2, &ls_estimated, srs_estimated_channel16, 8); } else if (k % 2 == 0) { // 2nd middle case // filt8_middle4 is {0,0,4096,8192,8192,8192,4096,0} c16multaddVectRealComplex(filt8_middle4, &ls_estimated, srs_estimated_channel16, 8); - srs_estimated_channel16 = &srs_est[sc_offset]; + srs_estimated_channel16 = &srs_est[subcarrier_abs]; } } else { if (k == 0) { // First subcarrier case // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); - } else if (subcarrier < K_TC) { // Start of OFDM symbol case - srs_estimated_channel16 = &srs_est[sc_offset]; - // filt16_start is {12288,8192,8192,8192,4096,0,0,0,0,0,0,0,0,0,0,0} - c16multaddVectRealComplex(filt16_start, &ls_estimated, srs_estimated_channel16, 16); - } else if ((subcarrier + K_TC) >= ofdm_symbol_size - || k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases + } else if (k == (M_sc_b_SRS - 1)) { // End of OFDM symbol or last subcarrier cases // filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0} c16multaddVectRealComplex(filt16_end, &ls_estimated, srs_estimated_channel16, 16); } else { // Middle case // filt16_middle4 is {4096,8192,8192,8192,8192,8192,8192,8192,4096,0,0,0,0,0,0,0} c16multaddVectRealComplex(filt16_middle4, &ls_estimated, srs_estimated_channel16, 16); - srs_estimated_channel16 = &srs_est[sc_offset]; + srs_estimated_channel16 = &srs_est[subcarrier_abs]; } } @@ -930,6 +914,8 @@ int nr_srs_channel_estimation(int ant, subcarrier -= ofdm_symbol_size; } + subcarrier_abs += K_TC; + } // for (int k = 0; k < M_sc_b_SRS; k++) memcpy(&srs_estimated_channel_freq[srs_symbol_offset], &srs_est[mem_offset], ofdm_symbol_size * sizeof(c16_t)); @@ -947,6 +933,8 @@ int nr_srs_channel_estimation(int ant, subcarrier -= ofdm_symbol_size; } + subcarrier_abs = first_subcarrier + nr_srs_info->k_0_p[p_index][srs_symb]; + for (int k = 0; k < K_TC * M_sc_b_SRS; k++) { int subcarrier_log = subcarrier - subcarrier_offset; if (subcarrier_log < 0) { @@ -966,8 +954,8 @@ int nr_srs_channel_estimation(int ant, subcarrier_log, srs_ls_estimated_channel[srs_symbol_offset + subcarrier].r, srs_ls_estimated_channel[srs_symbol_offset + subcarrier].i, - srs_estimated_channel_freq[srs_symbol_offset + subcarrier].r, - srs_estimated_channel_freq[srs_symbol_offset + subcarrier].i, + srs_estimated_channel_freq[srs_symbol_offset + subcarrier_abs].r, + srs_estimated_channel_freq[srs_symbol_offset + subcarrier_abs].i, srs_received_noise[srs_symbol_offset + subcarrier].r, srs_received_noise[srs_symbol_offset + subcarrier].i); @@ -976,6 +964,7 @@ int nr_srs_channel_estimation(int ant, if (subcarrier >= ofdm_symbol_size) { subcarrier -= ofdm_symbol_size; } + subcarrier_abs++; } #endif } @@ -990,10 +979,8 @@ int nr_srs_channel_estimation(int ant, memset(chF_interpol, 0, sizeof(chF_interpol)); // Place SRS channel estimates in FFT shifted format for oversampling - memcpy(&chF_interpol[0], &srs_estimated_channel_freq_avg[0], ofdm_symbol_size_half * sizeof(c16_t)); - memcpy(&chF_interpol[start_offset], - &srs_estimated_channel_freq_avg[ofdm_symbol_size_half], - ofdm_symbol_size_half * sizeof(c16_t)); + memcpy(&chF_interpol[0], &srs_estimated_channel_freq_avg[ofdm_symbol_size_half], ofdm_symbol_size_half * sizeof(c16_t)); + memcpy(&chF_interpol[start_offset], &srs_estimated_channel_freq_avg[0], ofdm_symbol_size_half * sizeof(c16_t)); // Convert to time domain oversampled freq2time(ofdm_os_size, (int16_t *)chF_interpol, (int16_t *)srs_estimated_channel_time); @@ -1005,34 +992,40 @@ int nr_srs_channel_estimation(int ant, // Compute wideband SNR on the symbol 0 int tot_subcarriers = m_SRS_b * NR_NB_SC_PER_RB; + + uint16_t subcarrier_abs = first_subcarrier + nr_srs_info->k_0_p[p_index][0]; + if (subcarrier_abs + tot_subcarriers < ofdm_symbol_size_half) { + *signal_power = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier_abs], tot_subcarriers) / tot_subcarriers; + } else { + int size1 = ofdm_symbol_size_half - subcarrier_abs; + int size2 = tot_subcarriers - size1; + uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier_abs], size1) * size1; + uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[ofdm_symbol_size_half], size2) * size2; + *signal_power = (signal_power_p1 + signal_power_p2) / tot_subcarriers; + } + + if (*signal_power == 0) { + LOG_W(NR_PHY, "Received SRS signal power is 0\n"); + return -1; + } + subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; if (subcarrier >= ofdm_symbol_size) { subcarrier -= ofdm_symbol_size; } - if (subcarrier + tot_subcarriers < ofdm_symbol_size) { - *signal_power = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], tot_subcarriers) / tot_subcarriers; - if (p_index == 0) { + + if (p_index == 0) { + if (subcarrier + tot_subcarriers < ofdm_symbol_size) { *noise_power = signal_energy_nodc(&srs_received_noise[subcarrier], tot_subcarriers) / tot_subcarriers; - } - } else { - int size1 = ofdm_symbol_size - subcarrier; - int size2 = tot_subcarriers - size1; - uint64_t signal_power_p1 = signal_energy_nodc(&srs_estimated_channel_freq[subcarrier], size1) * size1; - uint64_t signal_power_p2 = signal_energy_nodc(&srs_estimated_channel_freq[0], size2) * size2; - *signal_power = (signal_power_p1 + signal_power_p2) / tot_subcarriers; - if (p_index == 0) { + } else { + int size1 = ofdm_symbol_size - subcarrier; + int size2 = tot_subcarriers - size1; uint64_t noise_power_p1 = signal_energy_nodc(&srs_received_noise[subcarrier], size1) * size1; uint64_t noise_power_p2 = signal_energy_nodc(&srs_received_noise[0], size2) * size2; *noise_power = (noise_power_p1 + noise_power_p2) / tot_subcarriers; } } - *signal_power = max(*signal_power, 1); - if (*signal_power == 0) { - LOG_W(NR_PHY, "Received SRS signal power is 0\n"); - return -1; - } - // Compute SNR per RB for port 0 and symbol 0 if (p_index == 0) { subcarrier = subcarrier_offset + nr_srs_info->k_0_p[p_index][0]; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 7e47f422e8..292692540a 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -938,7 +938,8 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, T_INT(slot_rx), T_INT(ant_rx_ind), T_INT(p_ind), - T_BUFFER(srs_estimated_channel_time_shifted[ant_rx_ind][p_ind], ofdm_symbol_size * sizeof(c16_t))); + T_BUFFER(srs_estimated_channel_time_shifted[ant_rx_ind][p_ind], + NR_SRS_IDFT_OVERSAMP_FACTOR * ofdm_symbol_size * sizeof(c16_t))); } noise_power_avg += noise_power; } From dea4508f89bc5dcd2fb33fb14cfa757ca9a1b69e Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Mon, 24 Nov 2025 14:59:43 +0530 Subject: [PATCH 32/53] Update docker file to compile nr_srssim to fix tests in gracehopper --- ci-scripts/docker/Dockerfile.physim.ubuntu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/docker/Dockerfile.physim.ubuntu b/ci-scripts/docker/Dockerfile.physim.ubuntu index 8fe6d91c4a..c820c7fd7a 100644 --- a/ci-scripts/docker/Dockerfile.physim.ubuntu +++ b/ci-scripts/docker/Dockerfile.physim.ubuntu @@ -44,4 +44,4 @@ RUN cmake -GNinja -DENABLE_PHYSIM_TESTS=ON \ -DCMAKE_C_FLAGS=-Werror -DCMAKE_CXX_FLAGS=-Werror \ -DPHYSIM_CHECK_FILES="ThresholdsGracehopper.cmake" \ .. && \ - ninja ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim + ninja ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim nr_srssim From f84ed0bbcf3f6f926d1f7a84f2bdec8ba99b44cd Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Fri, 19 Dec 2025 18:35:11 +0530 Subject: [PATCH 33/53] Make nb_antenna as a input parameter to generate_srs_nr() - We use the same function at gNB and UE. - We always use nb_antennas_tx to check the max possible number of ports (which is wrong). - At gNB, we should use nb_antennas_rx and at the UE, we should use nb_antennas_tx. --- openair1/PHY/nr_phy_common/inc/nr_phy_common.h | 3 ++- openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c | 5 +++-- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 10 +++++++++- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 3 ++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/nr_phy_common/inc/nr_phy_common.h b/openair1/PHY/nr_phy_common/inc/nr_phy_common.h index a2011e1fa6..5b60f3bdf6 100644 --- a/openair1/PHY/nr_phy_common/inc/nr_phy_common.h +++ b/openair1/PHY/nr_phy_common/inc/nr_phy_common.h @@ -372,7 +372,8 @@ bool generate_srs_nr(const NR_DL_FRAME_PARMS *frame_parms, nr_srs_info_t *nr_srs_info, int16_t amp, frame_t frame_number, - slot_t slot_number); + slot_t slot_number, + uint8_t nb_antennas); void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms, const csi_mapping_parms_t *phy_csi_parms, const int16_t amp, diff --git a/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c b/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c index 95b3a86d91..f258b92205 100644 --- a/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c +++ b/openair1/PHY/nr_phy_common/src/nr_phy_common_srs.c @@ -146,11 +146,12 @@ bool generate_srs_nr(const NR_DL_FRAME_PARMS *frame_parms, nr_srs_info_t *nr_srs_info, int16_t amp, frame_t frame_number, - slot_t slot_number) + slot_t slot_number, + uint8_t nb_antennas) { uint8_t K_TC = 2 << nr_srs_info->comb_size; /* Number of antenna ports (M) can't be higher than number of physical antennas (N): M <= N */ - int N_ap = nr_srs_info->n_srs_ports > frame_parms->nb_antennas_tx ? frame_parms->nb_antennas_tx : nr_srs_info->n_srs_ports; + int N_ap = nr_srs_info->n_srs_ports > nb_antennas ? nb_antennas : nr_srs_info->n_srs_ports; uint8_t l0 = frame_parms->symbols_per_slot - 1 - nr_srs_info->l_offset; // Starting symbol position in the time domain uint8_t n_SRS_cs_max = srs_max_number_cs[nr_srs_info->comb_size]; int m_SRS_b = get_m_srs(nr_srs_info->C_SRS, nr_srs_info->B_SRS); // Number of resource blocks diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 292692540a..ff82310d29 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -883,7 +883,15 @@ void nr_srs_rx_procedures(PHY_VARS_gNB *gNB, start_meas(&gNB->generate_srs_stats); if (check_and_configure_srs_info(srs_pdu, nr_srs_info)) { - generate_srs_nr(frame_parms, nr_srs_info->srs_generated_signal, 0, srs_pdu->bwp_start, nr_srs_info, AMP, frame_rx, slot_rx); + generate_srs_nr(frame_parms, + nr_srs_info->srs_generated_signal, + 0, + srs_pdu->bwp_start, + nr_srs_info, + AMP, + frame_rx, + slot_rx, + nb_antennas_rx); } stop_meas(&gNB->generate_srs_stats); diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index b40a2ab063..c2aa0b4bd7 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -360,7 +360,8 @@ bool ue_srs_procedures_nr(PHY_VARS_NR_UE *ue, ue->nr_srs_info, AMP, proc->frame_tx, - proc->nr_slot_tx); + proc->nr_slot_tx, + frame_parms->nb_antennas_tx); return generated; } From a752f43ad60371b0d27dfa52fe5db39813ef7ea3 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 31 Dec 2025 16:38:02 +0530 Subject: [PATCH 34/53] Harmonize phy_simulators to use compute_tx_energy_level() and compute_noise_variance() --- openair1/PHY/TOOLS/signal_energy.c | 11 ++++++-- openair1/PHY/TOOLS/tools_defs.h | 7 ++++- openair1/SIMULATION/NR_PHY/dlsim.c | 25 ++++++++--------- openair1/SIMULATION/NR_PHY/prachsim.c | 11 ++------ openair1/SIMULATION/NR_PHY/pucchsim.c | 24 ++++++++++++----- openair1/SIMULATION/NR_PHY/srssim.c | 2 +- openair1/SIMULATION/NR_PHY/ulsim.c | 39 +++++++++------------------ 7 files changed, 58 insertions(+), 61 deletions(-) diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c index 9b50b947c3..4e29f0ab2b 100644 --- a/openair1/PHY/TOOLS/signal_energy.c +++ b/openair1/PHY/TOOLS/signal_energy.c @@ -196,9 +196,16 @@ double compute_tx_energy_level(c16_t **txdata, int nb_antennas, int offset, int } // Computes noise variance from the input transmit energy and SNR -double compute_noise_variance(double txlev_sum, uint16_t ofdm_symbol_size, int N_RB, double SNR, int n_trials) +double compute_noise_variance(double txlev_sum, + uint16_t ofdm_symbol_size, + int N_RB, + uint8_t precod_nbr_layers, + double SNR, + int n_trials) { - double sigma_dB = 10 * log10(txlev_sum * ((double)ofdm_symbol_size / (12 * N_RB))) - SNR; + // Justification of division by precod_nbr_layers: + // When the channel is the identity matrix, the results in terms of SNR should be almost equal for 2x2 and 4x4. + double sigma_dB = 10 * log10(txlev_sum / precod_nbr_layers * ((double)ofdm_symbol_size / (12 * N_RB))) - SNR; double sigma = pow(10, sigma_dB / 10); if (n_trials == 1) diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index 2f7bd438d6..36fc496545 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -929,7 +929,12 @@ double signal_energy_fp2(struct complexd *s, uint32_t length); double compute_tx_energy_level(c16_t **txdata, int nb_antennas, int offset, int length, int n_trials); -double compute_noise_variance(double txlev_sum, uint16_t ofdm_symbol_size, int N_RB, double SNR, int n_trials); +double compute_noise_variance(double txlev_sum, + uint16_t ofdm_symbol_size, + int N_RB, + uint8_t precod_nbr_layers, + double SNR, + int n_trials); int32_t iSqrt(int32_t value); uint8_t log2_approx(uint32_t); diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index f7c8752c76..40ad816d2c 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -324,7 +324,7 @@ int main(int argc, char **argv) setbuf(stdout, NULL); int c; int i,aa;//,l; - double sigma2, sigma2_dB=10, SNR, snr0=-2.0, snr1=2.0; + double SNR, snr0 = -2.0, snr1 = 2.0; uint8_t snr1set=0; double effRate; //float psnr; @@ -1172,15 +1172,12 @@ int main(int argc, char **argv) } } - int txlev[n_tx]; - int txlev_sum = 0; + // Compute transmitter energy level int l_ofdm = 6; - for (aa=0; aaofdm_symbol_size + (l_ofdm-1)*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0], - frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples); - txlev_sum += txlev[aa]; - if (n_trials==1) printf("txlev[%d] = %d (%f dB) txlev_sum %d\n",aa,txlev[aa],10*log10((double)txlev[aa]),txlev_sum); - } + int symbol_offset = slot_offset + l_ofdm * frame_parms->ofdm_symbol_size + (l_ofdm - 1) * frame_parms->nb_prefix_samples + + frame_parms->nb_prefix_samples0; + int symbol_length = frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples; + double txlev_sum = compute_tx_energy_level(txdata, n_tx, symbol_offset, symbol_length, n_trials); for (i = 0; i < slot_length; i++) { for (aa=0; aanb_antennas_tx; aa++) { @@ -1189,11 +1186,11 @@ int main(int argc, char **argv) } } - double ts = 1.0/(frame_parms->subcarrier_spacing * frame_parms->ofdm_symbol_size); - //Compute AWGN variance - sigma2_dB = 10 * log10((double)txlev_sum * ((double)UE->frame_parms.ofdm_symbol_size/(12*pdsch_pdu_rel15->rbSize))) - SNR; - sigma2 = pow(10, sigma2_dB/10); - if (n_trials==1) printf("sigma2 %f (%f dB), txlev_sum %f (factor %f)\n",sigma2,sigma2_dB,10*log10((double)txlev_sum),(double)(double)UE->frame_parms.ofdm_symbol_size/(12*pdsch_pdu_rel15->rbSize)); + double ts = 1.0/(frame_parms->subcarrier_spacing * frame_parms->ofdm_symbol_size); + + // Estimate noise power from the transmitter level and SNR + double sigma2 = + compute_noise_variance(txlev_sum, UE->frame_parms.ofdm_symbol_size, pdsch_pdu_rel15->rbSize, 1, SNR, n_trials); for (aa = 0; aa < n_rx; aa++) { bzero(r_re[aa], slot_length * sizeof(double)); diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c index f1a419d2a1..4dbac5dd7f 100644 --- a/openair1/SIMULATION/NR_PHY/prachsim.c +++ b/openair1/SIMULATION/NR_PHY/prachsim.c @@ -131,7 +131,7 @@ int main(int argc, char **argv){ sigaction(SIGINT, &sigint_action, &oldaction); get_softmodem_params()->sl_mode = 0; - double sigma2, sigma2_dB = 0, SNR, snr0 = -2.0, snr1 = 0.0, ue_speed0 = 0.0, ue_speed1 = 0.0; + double SNR, snr0 = -2.0, snr1 = 0.0, ue_speed0 = 0.0, ue_speed1 = 0.0; double **s_re, **s_im, **r_re, **r_im, iqim = 0.0, delay_avg = 0, ue_speed = 0, fs=-1, bw; int i, l, aa, aarx, trial, n_frames = 1, rx_prach_start; //, ntrials=1; c16_t **txdata; @@ -728,14 +728,7 @@ int main(int argc, char **argv){ for (trial = 0; trial < n_frames && !stop; trial++) { if (input_fd == NULL) { - sigma2_dB = 10*log10((double)tx_lev) - SNR - 10*log10(N_RB_UL*12/N_ZC); - - if (n_frames==1) - printf("sigma2_dB %f (SNR %f dB) tx_lev_dB %f\n",sigma2_dB,SNR,10*log10((double)tx_lev)); - - //AWGN - sigma2 = pow(10,sigma2_dB/10); - // printf("Sigma2 %f (sigma2_dB %f)\n",sigma2,sigma2_dB); + double sigma2 = compute_noise_variance(tx_lev, N_ZC, N_RB_UL, 1, SNR, n_frames); if (awgn_flag == 0) { multipath_tv_channel(UE2gNB, s_re, s_im, r_re, r_im, frame_parms->samples_per_frame, 0); diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c index 21d43f48ad..db20b21b8f 100644 --- a/openair1/SIMULATION/NR_PHY/pucchsim.c +++ b/openair1/SIMULATION/NR_PHY/pucchsim.c @@ -96,7 +96,7 @@ int main(int argc, char **argv) sigaction(SIGINT, &sigint_action, &oldaction); int i;//,l; - double sigma2, sigma2_dB=10,SNR,snr0=-2.0,snr1=2.0; + double SNR, snr0 = -2.0, snr1 = 2.0; double cfo=0; uint8_t snr1set=0; double **s_re,**s_im,**r_re,**r_im; @@ -566,15 +566,16 @@ int main(int argc, char **argv) // SNR Computation // standard says: SNR = S / N, where S is the total signal energy, N is the noise energy in the transmission bandwidth (i.e. N_RB_DL resource blocks) // txlev = S. - int txlev = signal_energy((int32_t *)&txdataF[0][startingSymbolIndex*frame_parms->ofdm_symbol_size], frame_parms->ofdm_symbol_size); + + // Compute transmitter energy level + int symbol_offset = startingSymbolIndex * frame_parms->ofdm_symbol_size; + int symbol_length = frame_parms->ofdm_symbol_size; + double txlev = compute_tx_energy_level(txdataF, 1, symbol_offset, symbol_length, n_trials); // sigma2 is variance per dimension, so N/(N_RB*12) // so, sigma2 = N/(N_RB_DL*12) => (S/SNR)/(N_RB*12) int N_RB = (format == 0 || format == 1) ? 1 : nrofPRB; - sigma2_dB = 10*log10(txlev*(N_RB_DL/N_RB))-SNR; - sigma2 = pow(10.0,sigma2_dB/10.0); - - if (n_trials==1) printf("txlev %d (%f dB), offset %d, sigma2 %f ( %f dB)\n",txlev,10*log10(txlev),startingSymbolIndex*frame_parms->ofdm_symbol_size,sigma2,sigma2_dB); + double sigma2 = compute_noise_variance(txlev, N_RB_DL * 12, N_RB, 1, SNR, n_trials); for (int symb=0; symbframe_parms.symbols_per_slot;symb++) { if (symb= startingSymbolIndex+nrofSymbols) { @@ -648,7 +649,16 @@ int main(int argc, char **argv) gNB_I0_measurements(gNB, nr_slot_tx, 0, gNB->frame_parms.symbols_per_slot, rb_mask_ul); start_meas(&gNB->phy_proc_rx); - if (n_trials==1) printf("noise rxlev %d (%d dB), rxlev pucch %d dB sigma2 %f dB, SNR %f, TX %f, I0 (pucch) %d, I0 (avg) %d\n",rxlev,dB_fixed(rxlev),dB_fixed(rxlev_pucch),sigma2_dB,SNR,10*log10((double)txlev*UE->frame_parms.ofdm_symbol_size/12),gNB->measurements.n0_subband_power_tot_dB[startingPRB],gNB->measurements.n0_subband_power_avg_dB); + if (n_trials == 1) + printf("noise rxlev %d (%d dB), rxlev pucch %d dB sigma2 %f dB, SNR %f, TX %f, I0 (pucch) %d, I0 (avg) %d\n", + rxlev, + dB_fixed(rxlev), + dB_fixed(rxlev_pucch), + 10 * log10(sigma2), + SNR, + 10 * log10((double)txlev * UE->frame_parms.ofdm_symbol_size / 12), + gNB->measurements.n0_subband_power_tot_dB[startingPRB], + gNB->measurements.n0_subband_power_avg_dB); if(format==0){ nfapi_nr_uci_pucch_pdu_format_0_1_t uci_pdu; nfapi_nr_pucch_pdu_t pucch_pdu; diff --git a/openair1/SIMULATION/NR_PHY/srssim.c b/openair1/SIMULATION/NR_PHY/srssim.c index fa7388498b..c86ab2b6a9 100644 --- a/openair1/SIMULATION/NR_PHY/srssim.c +++ b/openair1/SIMULATION/NR_PHY/srssim.c @@ -549,7 +549,7 @@ int main(int argc, char *argv[]) int tao_ns_count = 0; for (trial = 0; trial < n_trials && !stop; trial++) { // Estimate noise power from the transmitter level and SNR - double sigma = compute_noise_variance(txlev_sum, ofdm_symbol_size, srs_pdu.bwp_size, SNR, n_trials); + double sigma = compute_noise_variance(txlev_sum, ofdm_symbol_size, srs_pdu.bwp_size, 1, SNR, n_trials); //----------- Apply propagation channel ---------------------------- multipath_channel(UE2gNB, s_re, s_im, r_re, r_im, slot_length, 0, (n_trials == 1) ? 1 : 0); diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index 444492b545..d7bd25555f 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -281,7 +281,6 @@ int main(int argc, char *argv[]) char *filename_csv = NULL; int i; double SNR, snr0 = -2.0, snr1 = 2.0; - double sigma, sigma_dB; double snr_step = .2; uint8_t snr1set = 0; int slot = 8, frame = 1; @@ -308,7 +307,7 @@ int main(int argc, char *argv[]) int Imcs = 9; uint8_t precod_nbr_layers = 1; int tx_offset; - int32_t txlev_sum = 0, atxlev[4]; + double txlev_sum = 0; int start_rb = 0; int UE_id = 0; int print_perf = 0; @@ -1401,36 +1400,22 @@ int main(int argc, char *argv[]) } /////////// //////////////////////////////////////////////////// + // Compute transmitter energy level tx_offset = get_samples_slot_timestamp(&gNB->frame_parms, slot); - txlev_sum = 0; - for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { - atxlev[aa] = - signal_energy((int32_t *)&UE->common_vars - .txData[aa][tx_offset + 5 * gNB->frame_parms.ofdm_symbol_size - + 4 * gNB->frame_parms.nb_prefix_samples + gNB->frame_parms.nb_prefix_samples0], - gNB->frame_parms.ofdm_symbol_size + gNB->frame_parms.nb_prefix_samples); - - txlev_sum += atxlev[aa]; - - if (n_trials == 1) - printf("txlev[%d] = %d (%f dB) txlev_sum %d\n", aa, atxlev[aa], 10 * log10((double)atxlev[aa]), txlev_sum); - } + int symbol_offset = tx_offset + 5 * gNB->frame_parms.ofdm_symbol_size + 4 * gNB->frame_parms.nb_prefix_samples + + gNB->frame_parms.nb_prefix_samples0; + int symbol_length = gNB->frame_parms.ofdm_symbol_size + gNB->frame_parms.nb_prefix_samples; + txlev_sum = compute_tx_energy_level(UE->common_vars.txData, + UE->frame_parms.nb_antennas_tx, + symbol_offset, + symbol_length, + n_trials); } else n_trials = 1; if (input_fd == NULL) { - // Justification of division by precod_nbr_layers: - // When the channel is the identity matrix, the results in terms of SNR should be almost equal for 2x2 and 4x4. - sigma_dB = - 10 * log10((double)txlev_sum / precod_nbr_layers * ((double)gNB->frame_parms.ofdm_symbol_size / (12 * nb_rb))) - SNR; - sigma = pow(10, sigma_dB / 10); - - if (n_trials == 1) - printf("sigma %f (%f dB), txlev_sum %f (factor %f)\n", - sigma, - sigma_dB, - 10 * log10((double)txlev_sum), - (double)(double)gNB->frame_parms.ofdm_symbol_size / (12 * nb_rb)); + double sigma = + compute_noise_variance(txlev_sum, gNB->frame_parms.ofdm_symbol_size, nb_rb, precod_nbr_layers, SNR, n_trials); for (i = 0; i < slot_length; i++) { for (int aa = 0; aa < UE->frame_parms.nb_antennas_tx; aa++) { From 5d545a6cc5302876b9613c4a6a74315b33b2602c Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Wed, 31 Dec 2025 18:16:42 +0530 Subject: [PATCH 35/53] Add srssim to the feature set --- doc/BUILD.md | 2 +- doc/cross-compile.md | 2 +- doc/physical-simulators.md | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/BUILD.md b/doc/BUILD.md index 8298204859..bf05a5cc00 100644 --- a/doc/BUILD.md +++ b/doc/BUILD.md @@ -32,7 +32,7 @@ The main oai binaries, which are tested by the Continuous Integration process ar - The 5G gNodeB: `nr-softmodem` - The 5G CU-UP: `nr-cuup` - The LTE PHY simulators: `dlsim` and `ulsim` -- The 5G PHY simulators: `nr_dlschsim`, `nr_dlsim`, `nr_pbchsim`, `nr_pucchsim`, `nr_ulschsim`, `nr_ulsim`, `polartest`, `smallblocktest`, `nr _ulsim`, `ldpctest` +- The 5G PHY simulators: `nr_dlschsim`, `nr_dlsim`, `nr_pbchsim`, `nr_pucchsim`, `nr_ulschsim`, `nr_ulsim`, `polartest`, `smallblocktest`, `nr _ulsim`, `ldpctest`, `nr_srssim` Running the [build_oai](../cmake_targets/build_oai) script also generates some utilities required to build and/or run the oai softmodem binaries: diff --git a/doc/cross-compile.md b/doc/cross-compile.md index 79c4bae761..20edec65b8 100644 --- a/doc/cross-compile.md +++ b/doc/cross-compile.md @@ -89,7 +89,7 @@ be defined in order to tell cmake where the host tools have been built. cd ../build-cross cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build -ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim +ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_srssim ninja lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem ninja params_libconfig coding rfsimulator ``` diff --git a/doc/physical-simulators.md b/doc/physical-simulators.md index b74531fd20..0f000bb16f 100644 --- a/doc/physical-simulators.md +++ b/doc/physical-simulators.md @@ -36,6 +36,7 @@ pipelines: | | `nr_pbchsim` | Broadcast channel simulation | | | `nr_prachsim` | PRACH simulation | | | `nr_psbchsim` | Sidelink simulation | +| | `nr_srssim` | SRS simulation | | Coding | `ldpctest`, `polartest`, `smallblocktest` | LDPC, Polar, and other FEC tests | ## Source Locations From 25ee8cd7e98ea5eb3d5ef76278770d3068efe4d2 Mon Sep 17 00:00:00 2001 From: Rakesh Mundlamuri Date: Tue, 6 Jan 2026 18:15:28 +0530 Subject: [PATCH 36/53] Update the average value of the dlsim, ulsim timing test The lower bound for the tests are too tight and any slight improvement in the timing can result in a test failure. For example, these tests were failing due to the improvements from the MR 3718 --- .../SIMULATION/tests/ThresholdsOffload.cmake | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/openair1/SIMULATION/tests/ThresholdsOffload.cmake b/openair1/SIMULATION/tests/ThresholdsOffload.cmake index 9f787f993a..a3cfcd738a 100644 --- a/openair1/SIMULATION/tests/ThresholdsOffload.cmake +++ b/openair1/SIMULATION/tests/ThresholdsOffload.cmake @@ -2,42 +2,42 @@ check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.1 "DLSCH encoding ti check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.1 "DLSCH encoding time" AVG 19 ABS_VAR 4) check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.2 "DLSCH encoding time" AVG 65 ABS_VAR 13) check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.2 "DLSCH encoding time" AVG 27 ABS_VAR 6) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.3 "DLSCH encoding time" AVG 97 ABS_VAR 20) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.3 "DLSCH encoding time" AVG 33 ABS_VAR 7) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.4 "DLSCH encoding time" AVG 68 ABS_VAR 14) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.4 "DLSCH encoding time" AVG 26 ABS_VAR 6) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.5 "DLSCH encoding time" AVG 108 ABS_VAR 22) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.5 "DLSCH encoding time" AVG 46 ABS_VAR 10) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.6 "DLSCH encoding time" AVG 131 ABS_VAR 27) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.6 "DLSCH encoding time" AVG 80 ABS_VAR 16) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.7 "DLSCH encoding time" AVG 120 ABS_VAR 24) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.7 "DLSCH encoding time" AVG 44 ABS_VAR 9) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.8 "DLSCH encoding time" AVG 146 ABS_VAR 30) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.8 "DLSCH encoding time" AVG 87 ABS_VAR 18) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.9 "DLSCH encoding time" AVG 204 ABS_VAR 41) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.9 "DLSCH encoding time" AVG 138 ABS_VAR 28) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.10 "DLSCH encoding time" AVG 149 ABS_VAR 30) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.10 "DLSCH encoding time" AVG 49 ABS_VAR 10) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.11 "DLSCH encoding time" AVG 164 ABS_VAR 33) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.11 "DLSCH encoding time" AVG 90 ABS_VAR 18) -check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.12 "DLSCH encoding time" AVG 223 ABS_VAR 45) -check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.12 "DLSCH encoding time" AVG 146 ABS_VAR 30) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.3 "DLSCH encoding time" AVG 98 ABS_VAR 20) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.3 "DLSCH encoding time" AVG 34 ABS_VAR 7) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.4 "DLSCH encoding time" AVG 66 ABS_VAR 14) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.4 "DLSCH encoding time" AVG 27 ABS_VAR 6) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.5 "DLSCH encoding time" AVG 109 ABS_VAR 22) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.5 "DLSCH encoding time" AVG 45 ABS_VAR 9) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.6 "DLSCH encoding time" AVG 127 ABS_VAR 26) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.6 "DLSCH encoding time" AVG 79 ABS_VAR 16) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.7 "DLSCH encoding time" AVG 109 ABS_VAR 33) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.7 "DLSCH encoding time" AVG 43 ABS_VAR 9) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.8 "DLSCH encoding time" AVG 141 ABS_VAR 29) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.8 "DLSCH encoding time" AVG 83 ABS_VAR 17) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.9 "DLSCH encoding time" AVG 196 ABS_VAR 40) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.9 "DLSCH encoding time" AVG 134 ABS_VAR 27) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.10 "DLSCH encoding time" AVG 132 ABS_VAR 27) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.10 "DLSCH encoding time" AVG 47 ABS_VAR 10) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.11 "DLSCH encoding time" AVG 158 ABS_VAR 32) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.11 "DLSCH encoding time" AVG 89 ABS_VAR 18) +check_threshold_variance(physim.5g-offload.nr_dlsim.testCPU.12 "DLSCH encoding time" AVG 214 ABS_VAR 43) +check_threshold_variance(physim.5g-offload.nr_dlsim.testT2.12 "DLSCH encoding time" AVG 144 ABS_VAR 29) check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.1 "ULSCH total decoding time" AVG 141 ABS_VAR 29) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.1 "ULSCH total decoding time" AVG 40 ABS_VAR 8) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.1 "ULSCH total decoding time" AVG 38 ABS_VAR 8) check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.2 "ULSCH total decoding time" AVG 165 ABS_VAR 33) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.2 "ULSCH total decoding time" AVG 63 ABS_VAR 13) -check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.3 "ULSCH total decoding time" AVG 156 ABS_VAR 32) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.3 "ULSCH total decoding time" AVG 87 ABS_VAR 18) -check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.4 "ULSCH total decoding time" AVG 170 ABS_VAR 34) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.4 "ULSCH total decoding time" AVG 74 ABS_VAR 15) -check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.5 "ULSCH total decoding time" AVG 299 ABS_VAR 60) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.5 "ULSCH total decoding time" AVG 120 ABS_VAR 24) -check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.6 "ULSCH total decoding time" AVG 324 ABS_VAR 65) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.6 "ULSCH total decoding time" AVG 180 ABS_VAR 36) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.2 "ULSCH total decoding time" AVG 57 ABS_VAR 12) +check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.3 "ULSCH total decoding time" AVG 155 ABS_VAR 31) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.3 "ULSCH total decoding time" AVG 80 ABS_VAR 16) +check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.4 "ULSCH total decoding time" AVG 169 ABS_VAR 34) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.4 "ULSCH total decoding time" AVG 68 ABS_VAR 14) +check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.5 "ULSCH total decoding time" AVG 298 ABS_VAR 60) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.5 "ULSCH total decoding time" AVG 115 ABS_VAR 23) +check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.6 "ULSCH total decoding time" AVG 321 ABS_VAR 65) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.6 "ULSCH total decoding time" AVG 162 ABS_VAR 33) check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.7 "ULSCH total decoding time" AVG 200 ABS_VAR 40) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.7 "ULSCH total decoding time" AVG 120 ABS_VAR 24) -check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.8 "ULSCH total decoding time" AVG 436 ABS_VAR 88) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.8 "ULSCH total decoding time" AVG 229 ABS_VAR 46) -check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.9 "ULSCH total decoding time" AVG 530 ABS_VAR 106) -check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.9 "ULSCH total decoding time" AVG 334 ABS_VAR 67) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.7 "ULSCH total decoding time" AVG 112 ABS_VAR 23) +check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.8 "ULSCH total decoding time" AVG 433 ABS_VAR 87) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.8 "ULSCH total decoding time" AVG 206 ABS_VAR 42) +check_threshold_variance(physim.5g-offload.nr_ulsim.testCPU.9 "ULSCH total decoding time" AVG 527 ABS_VAR 106) +check_threshold_variance(physim.5g-offload.nr_ulsim.testT2.9 "ULSCH total decoding time" AVG 302 ABS_VAR 61) From 1e861ac04e7bce0393c25128f648c476371d0fbc Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 28 Nov 2025 14:47:33 +0100 Subject: [PATCH 37/53] fix array lenght errors, k variable wrapping threshold. Make the code smaller and more efficient --- openair1/PHY/NR_UE_TRANSPORT/nr_prach.c | 440 ++++++++---------------- 1 file changed, 152 insertions(+), 288 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c index 9405315e04..05a251d999 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_prach.c @@ -58,34 +58,19 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t fapi_nr_config_request_t *nrUE_config = &ue->nrUE_config; fapi_nr_ul_config_prach_pdu *prach_pdu = &ue->prach_vars[gNB_id]->prach_pdu; - uint8_t Mod_id, fd_occasion, preamble_index, restricted_set, not_found; - uint16_t rootSequenceIndex, prach_fmt_id, NCS, preamble_offset = 0; - const uint16_t *prach_root_sequence_map; - uint16_t preamble_shift = 0, preamble_index0, n_shift_ra, n_shift_ra_bar, d_start=INT16_MAX, numshift, N_ZC, u, offset, offset2, first_nonzero_root_idx; - c16_t prach[(4688 + 4 * 24576) * 2] __attribute__((aligned(32))) = {0}; - c16_t prachF_tmp[(4688 + 4 * 24576) * 4] __attribute__((aligned(32))) = {0}; - - int Ncp = 0; - int prach_start, prach_sequence_length, prach_len, dftlen, mu, n_ra_prb, k, prachStartSymbol; - - fd_occasion = prach_pdu->num_ra; - prach_len = 0; - dftlen = 0; - first_nonzero_root_idx = 0; - int16_t amp = prach_pdu->prach_tx_power; - c16_t *prachF = prachF_tmp; - Mod_id = ue->Mod_id; - prach_sequence_length = nrUE_config->prach_config.prach_sequence_length; - N_ZC = (prach_sequence_length == 0) ? 839:139; - mu = nrUE_config->prach_config.prach_sub_c_spacing; - restricted_set = prach_pdu->restricted_set; - rootSequenceIndex = prach_pdu->root_seq_id; - n_ra_prb = nrUE_config->prach_config.num_prach_fd_occasions_list[fd_occasion].k1,//prach_pdu->freq_msg1; - NCS = prach_pdu->num_cs; - prach_fmt_id = prach_pdu->prach_format; - preamble_index = prach_pdu->ra_PreambleIndex; - k = 12*n_ra_prb - 6*fp->N_RB_UL; - prachStartSymbol = prach_pdu->prach_start_symbol; + const int fd_occasion = prach_pdu->num_ra; + const int16_t amp = prach_pdu->prach_tx_power; + const int prach_sequence_length = nrUE_config->prach_config.prach_sequence_length; + const int N_ZC = (prach_sequence_length == 0) ? 839 : 139; + const int mu = nrUE_config->prach_config.prach_sub_c_spacing; + const int restricted_set = prach_pdu->restricted_set; + const int rootSequenceIndex = prach_pdu->root_seq_id; + const int n_ra_prb = nrUE_config->prach_config.num_prach_fd_occasions_list[fd_occasion].k1; // prach_pdu->freq_msg1; + const int NCS = prach_pdu->num_cs; + const int prach_fmt_id = prach_pdu->prach_format; + const int preamble_index = prach_pdu->ra_PreambleIndex; + int k = 12 * n_ra_prb - 6 * fp->N_RB_UL; + const int prachStartSymbol = prach_pdu->prach_start_symbol; LOG_D(PHY,"Generate NR PRACH %d.%d\n", frame, slot); @@ -97,6 +82,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t nrUE_config->prach_config.root_seq_computed = 1; } + int prach_start; if (prachStartSymbol == 0) { prach_start = 0; } else if (fp->slots_per_subframe == 1) { @@ -122,29 +108,30 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t * NOTE: Restricted set type B is not implemented *************************************************************************/ - prach_root_sequence_map = (prach_sequence_length == 0) ? prach_root_sequence_map_0_3 : prach_root_sequence_map_abc; - + const uint16_t *prach_root_sequence_map = + (prach_sequence_length == 0) ? prach_root_sequence_map_0_3 : prach_root_sequence_map_abc; + int preamble_offset, preamble_shift = 0, first_nonzero_root_idx = 0; if (restricted_set == 0) { // This is the relative offset (for unrestricted case) in the root sequence table (5.7.2-4 from 36.211) for the given preamble index - preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS))); + preamble_offset = NCS == 0 ? preamble_index : preamble_index / (N_ZC / NCS); // This is the \nu corresponding to the preamble index - preamble_shift = (NCS==0)? 0 : (preamble_index % (N_ZC/NCS)); + preamble_shift = NCS == 0 ? 0 : preamble_index % (N_ZC / NCS); preamble_shift *= NCS; } else { // This is the high-speed case - #ifdef NR_PRACH_DEBUG - LOG_I(PHY, "PRACH [UE %d] High-speed mode, NCS %d\n", Mod_id, NCS); - #endif +#ifdef NR_PRACH_DEBUG + LOG_I(PHY, "PRACH [UE %d] High-speed mode, NCS %d\n", ue->Mod_id, NCS); +#endif - not_found = 1; uint16_t nr_du[NR_PRACH_SEQ_LEN_L - 1]; nr_fill_du(N_ZC, prach_root_sequence_map, nr_du); - preamble_index0 = preamble_index; + int preamble_index0 = preamble_index; // set preamble_offset to initial rootSequenceIndex and look if we need more root sequences for this // preamble index and find the corresponding cyclic shift preamble_offset = 0; // relative rootSequenceIndex; - while (not_found == 1) { + bool not_found = true; + while (not_found) { // current root depending on rootSequenceIndex and preamble_offset int index = (rootSequenceIndex + preamble_offset) % N_ZC; uint16_t n_group_ra = 0; @@ -157,8 +144,8 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t DevAssert( index < sizeof(prach_root_sequence_map_abc) / sizeof(prach_root_sequence_map_abc[0]) ); } - u = prach_root_sequence_map[index]; - + int u = prach_root_sequence_map[index]; + int n_shift_ra, d_start = INT16_MAX, n_shift_ra_bar; if ( (nr_du[u]<(N_ZC/3)) && (nr_du[u]>=NCS) ) { n_shift_ra = nr_du[u]/NCS; d_start = (nr_du[u]<<1) + (n_shift_ra * NCS); @@ -175,13 +162,12 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t } // This is the number of cyclic shifts for the current root u - numshift = (n_shift_ra*n_group_ra) + n_shift_ra_bar; - + int numshift = (n_shift_ra * n_group_ra) + n_shift_ra_bar; if (numshift>0 && preamble_index0==preamble_index) first_nonzero_root_idx = preamble_offset; if (preamble_index0 < numshift) { - not_found = 0; + not_found = false; preamble_shift = (d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS); } else { // skip to next rootSequenceIndex and recompute parameters @@ -193,23 +179,22 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t // now generate PRACH signal #ifdef NR_PRACH_DEBUG - if (NCS>0) - LOG_I(PHY, "PRACH [UE %d] generate PRACH in frame.slot %d.%d for RootSeqIndex %d, Preamble Index %d, PRACH Format %s, NCS %d (N_ZC %d): Preamble_offset %d, Preamble_shift %d msg1 frequency start %d\n", - Mod_id, - frame, - slot, - rootSequenceIndex, - preamble_index, - prachfmt[prach_fmt_id], - NCS, - N_ZC, - preamble_offset, - preamble_shift, - n_ra_prb); - #endif - - // nsymb = (frame_parms->Ncp==0) ? 14:12; - // subframe_offset = (unsigned int)frame_parms->ofdm_symbol_size*slot*nsymb; + if (NCS > 0) + LOG_I(PHY, + "PRACH [UE %d] generate PRACH in frame.slot %d.%d for RootSeqIndex %d, Preamble Index %d, PRACH Format %s, NCS %d " + "(N_ZC %d): Preamble_offset %d, Preamble_shift %d msg1 frequency start %d\n", + ue->Mod_id, + frame, + slot, + rootSequenceIndex, + preamble_index, + prachfmt[prach_fmt_id], + NCS, + N_ZC, + preamble_offset, + preamble_shift, + n_ra_prb); +#endif const unsigned int K = get_prach_K(prach_sequence_length, prach_fmt_id, fp->numerology_index, mu); const uint8_t kbar = get_PRACH_k_bar(mu, fp->numerology_index); @@ -223,7 +208,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t LOG_I(PHY, "PRACH [UE %d] in frame.slot %d.%d, placing PRACH in position %d, Msg1/MsgA-Preamble frequency start %d (k1 %d), " "preamble_offset %d, first_nonzero_root_idx %d, preambleIndex = %d\n", - Mod_id, + ue->Mod_id, frame, slot, k * 2, @@ -234,155 +219,96 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t prach_pdu->ra_PreambleIndex); // Ncp and dftlen here is given in terms of T_s wich is 30.72MHz sampling + int dftlen, Ncp; if (prach_sequence_length == 0) { - switch (prach_fmt_id) { - case 0: - Ncp = 3168; - dftlen = 24576; - break; - - case 1: - Ncp = 21024; - dftlen = 24576; - break; - - case 2: - Ncp = 4688; - dftlen = 24576; - break; - - case 3: - Ncp = 3168; - dftlen = 6144; - break; - - default: - AssertFatal(1 == 0, "Illegal PRACH format %d for sequence length 839\n", prach_fmt_id); - break; - } + AssertFatal(prach_fmt_id >= 0 && prach_fmt_id <= 3, "Unknown PRACH format ID %d for sequence length 839\n", prach_fmt_id); + const int ncp[4] = {3168, 21024, 4688, 3168}; + const int dft[4] = {24576, 24576, 24576, 6144}; + Ncp = ncp[prach_fmt_id]; + dftlen = dft[prach_fmt_id]; } else { - switch (prach_fmt_id) { - case 4: //A1 - Ncp = 288 >> mu; - break; - - case 5: //A2 - Ncp = 576 >> mu; - break; - - case 6: //A3 - Ncp = 864 >> mu; - break; - - case 7: //B1 - Ncp = 216 >> mu; - break; - - /* - case 4: //B2 - Ncp = 360 >> mu; - break; - - case 5: //B3 - Ncp = 504 >> mu; - break; - */ - - case 8: //B4 - Ncp = 936 >> mu; - break; - - case 9: //C0 - Ncp = 1240 >> mu; - break; - - case 10: //C2 - Ncp = 2048 >> mu; - break; - - default: - AssertFatal(1==0,"Unknown PRACH format ID %d\n", prach_fmt_id); - break; - } + AssertFatal(prach_fmt_id >= 4 && prach_fmt_id <= 10, "Unknown PRACH format ID %d\n", prach_fmt_id); + const int ncp[7] = {288, 576, 864, 216, 936, 1240, 2048}; + Ncp = ncp[prach_fmt_id - 4] >> mu; dftlen = 2048 >> mu; } - //actually what we should be checking here is how often the current prach crosses a 0.5ms boundary. I am not quite sure for which paramter set this would be the case, so I will ignore it for now and just check if the prach starts on a 0.5ms boundary - if(fp->numerology_index == 0) { + // actually what we should be checking here is how often the current prach crosses a 0.5ms boundary. I am not quite sure for + // which paramter set this would be the case, so I will ignore it for now and just check if the prach starts on a 0.5ms boundary + if (fp->numerology_index == 0) { if (prachStartSymbol == 0 || prachStartSymbol == 7) Ncp += 16; - } - else { - if (slot%(fp->slots_per_subframe/2)==0 && prachStartSymbol == 0) + } else { + if (slot % (fp->slots_per_subframe / 2) == 0 && prachStartSymbol == 0) Ncp += 16; } - switch(fp->samples_per_subframe) { - case 7680: - // 5 MHz @ 7.68 Ms/s - Ncp >>= 2; - dftlen >>= 2; - break; + switch (fp->samples_per_subframe) { + case 7680: + // 5 MHz @ 7.68 Ms/s + Ncp >>= 2; + dftlen >>= 2; + break; - case 15360: - // 10, 15 MHz @ 15.36 Ms/s - Ncp >>= 1; - dftlen >>= 1; - break; + case 15360: + // 10, 15 MHz @ 15.36 Ms/s + Ncp >>= 1; + dftlen >>= 1; + break; - case 23040: - // 20 MHz @ 23.04 Ms/s - Ncp = (Ncp * 3) / 4; - dftlen = (dftlen * 3) / 4; - break; + case 23040: + // 20 MHz @ 23.04 Ms/s + Ncp = (Ncp * 3) / 4; + dftlen = (dftlen * 3) / 4; + break; - case 30720: - // 20, 25, 30 MHz @ 30.72 Ms/s - break; + case 30720: + // 20, 25, 30 MHz @ 30.72 Ms/s + break; - case 46080: - // 40 MHz @ 46.08 Ms/s - Ncp = (Ncp*3)/2; - dftlen = (dftlen*3)/2; - break; + case 46080: + // 40 MHz @ 46.08 Ms/s + Ncp = (Ncp * 3) / 2; + dftlen = (dftlen * 3) / 2; + break; - case 61440: - // 40, 50, 60 MHz @ 61.44 Ms/s - Ncp <<= 1; - dftlen <<= 1; - break; + case 61440: + // 40, 50, 60 MHz @ 61.44 Ms/s + Ncp <<= 1; + dftlen <<= 1; + break; - case 92160: - // 50, 60, 70, 80, 90 MHz @ 92.16 Ms/s - Ncp *= 3; - dftlen *= 3; - break; + case 92160: + // 50, 60, 70, 80, 90 MHz @ 92.16 Ms/s + Ncp *= 3; + dftlen *= 3; + break; - case 122880: - // 70, 80, 90, 100 MHz @ 122.88 Ms/s - Ncp <<= 2; - dftlen <<= 2; - break; + case 122880: + // 70, 80, 90, 100 MHz @ 122.88 Ms/s + Ncp <<= 2; + dftlen <<= 2; + break; - case 184320: - // 100 MHz @ 184.32 Ms/s - Ncp = Ncp*6; - dftlen = dftlen*6; - break; + case 184320: + // 100 MHz @ 184.32 Ms/s + Ncp = Ncp * 6; + dftlen = dftlen * 6; + break; - case 245760: - // 200 MHz @ 245.76 Ms/s - Ncp <<= 3; - dftlen <<= 3; - break; + case 245760: + // 200 MHz @ 245.76 Ms/s + Ncp <<= 3; + dftlen <<= 3; + break; - default: - AssertFatal(1==0,"sample rate %f MHz not supported for numerology %d\n", fp->samples_per_subframe / 1000.0, mu); + default: + AssertFatal(1 == 0, "sample rate %f MHz not supported for numerology %d\n", fp->samples_per_subframe / 1000.0, mu); } - #ifdef NR_PRACH_DEBUG - LOG_I(PHY, "PRACH [UE %d] Ncp %d, dftlen %d \n", Mod_id, Ncp, dftlen); - #endif +#ifdef NR_PRACH_DEBUG + LOG_I(PHY, "PRACH [UE %d] Ncp %d, dftlen %d \n", ue->Mod_id, Ncp, dftlen); +#endif /******************************************************** * @@ -390,7 +316,8 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t * to compute quantized roots of unity ru(n) = 32767 * exp j*[ (2 * PI * n) / N_ZC ] * * In compute_prach_seq: - * to calculate Xu = DFT xu = xu (inv_u*k) * Xu[0] (This is a Zadoff-Chou sequence property: DFT ZC sequence is another ZC sequence) + * to calculate Xu = DFT xu = xu (inv_u*k) * Xu[0] (This is a Zadoff-Chou sequence property: DFT ZC sequence is another ZC + * sequence) * * In generate_prach: * to do the cyclic-shifted DFT by multiplying Xu[k] * ru[k*preamble_shift] as: @@ -398,118 +325,55 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, int frame, uint8_t * *********************************************************/ - c16_t *Xu = ue->X_u[preamble_offset - first_nonzero_root_idx]; + const c16_t *Xu = ue->X_u[preamble_offset - first_nonzero_root_idx]; #if defined (PRACH_WRITE_OUTPUT_DEBUG) - LOG_M("X_u.m", "X_u", (int16_t*)ue->X_u[preamble_offset-first_nonzero_root_idx], N_ZC, 1, 1); - #endif + LOG_M("X_u.m", "X_u", (int16_t *)ue->X_u[preamble_offset - first_nonzero_root_idx], N_ZC, 1, 1); +#endif - for (offset=0,offset2=0; offset= N_ZC) + offset2 -= N_ZC; + const c16_t Xu_t = c16xmulConstShift(Xu[offset], amp, 15); + const double w = 2 * M_PI * (double)offset2 / N_ZC; + const c16_t ru = {.r = (int16_t)(floor(32767.0 * cos(w))), .i = (int16_t)(floor(32767.0 * sin(w)))}; + const c16_t p = c16mulShift(Xu_t, ru, 15); + prachF[k++] = p; + if (k == dftlen) + k = 0; + } - if (offset2 >= N_ZC) - offset2 -= N_ZC; - const c16_t Xu_t = c16xmulConstShift(Xu[offset], amp, 15); - const double w = 2 * M_PI * (double)offset2 / N_ZC; - const c16_t ru = {.r = (int16_t)(floor(32767.0 * cos(w))), .i = (int16_t)(floor(32767.0 * sin(w)))}; - const c16_t p = c16mulShift(Xu_t, ru, 15); - prachF[k++] = p; - - if (k * 2 == dftlen) - k = 0; - } - - #if defined (PRACH_WRITE_OUTPUT_DEBUG) +#if defined(PRACH_WRITE_OUTPUT_DEBUG) LOG_M("prachF.m", "prachF", &prachF[1804], 1024, 1, 1); LOG_M("Xu.m", "Xu", Xu, N_ZC, 1, 1); - #endif +#endif - // This is after cyclic prefix - c16_t *prach2 = prach + Ncp; + // This is after cyclic prefix const idft_size_idx_t idft_size = get_idft(dftlen); idft(idft_size, (int16_t *)prachF, (int16_t *)prach, 1); - memmove(prach2, prach, (dftlen << 2)); + } - if (prach_sequence_length == 0) { - if (prach_fmt_id == 0) { - // here we have | empty | Prach | - memcpy(prach, prach + dftlen, (Ncp << 2)); - // here we have | Prefix | Prach | - prach_len = dftlen + Ncp; - } else if (prach_fmt_id == 1) { - // here we have | empty | Prach | empty | - memcpy(prach2 + dftlen, prach2, (dftlen << 2)); - // here we have | empty | Prach | Prach | - memcpy(prach, prach + dftlen * 2, (Ncp << 2)); - // here we have | Prefix | Prach | Prach | - prach_len = (dftlen * 2) + Ncp; - } else if (prach_fmt_id == 2 || prach_fmt_id == 3) { - // here we have | empty | Prach | empty | empty | empty | - memcpy(prach2 + dftlen, prach2, (dftlen << 2)); - // here we have | empty | Prach | Prach | empty | empty | - memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); - // here we have | empty | Prach | Prach | Prach | Prach | - memcpy(prach, prach + dftlen * 4, (Ncp << 2)); - // here we have | Prefix | Prach | Prach | Prach | Prach | - prach_len = (dftlen * 4) + Ncp; - } - } else { // short PRACH sequence - if (prach_fmt_id == 9) { - // here we have | empty | Prach | - memcpy(prach, prach + dftlen, (Ncp << 2)); - // here we have | Prefix | Prach | - prach_len = (dftlen*1)+Ncp; - } else if (prach_fmt_id == 4 || prach_fmt_id == 7) { - // here we have | empty | Prach | empty | - memcpy(prach2 + dftlen, prach2, (dftlen << 2)); - // here we have | empty | Prach | Prach | - memcpy(prach, prach+(dftlen<<1), (Ncp<<2)); - // here we have | Prefix | Prach | Prach | - prach_len = (dftlen*2)+Ncp; - } else if (prach_fmt_id == 5 || prach_fmt_id == 10) { // 4xdftlen - // here we have | empty | Prach | empty | empty | empty | - memcpy(prach2 + dftlen, prach2, (dftlen << 2)); - // here we have | empty | Prach | Prach | empty | empty | - memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); - // here we have | empty | Prach | Prach | Prach | Prach | - memcpy(prach, prach + dftlen, (Ncp << 2)); - // here we have | Prefix | Prach | Prach | Prach | Prach | - prach_len = (dftlen*4)+Ncp; - } else if (prach_fmt_id == 6) { // 6xdftlen - // here we have | empty | Prach | empty | empty | empty | empty | empty | - memcpy(prach2 + dftlen, prach2, (dftlen << 2)); - // here we have | empty | Prach | Prach | empty | empty | empty | empty | - memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); - // here we have | empty | Prach | Prach | Prach | Prach | empty | empty | - memcpy(prach2 + dftlen * 4, prach2, (dftlen << 3)); - // here we have | empty | Prach | Prach | Prach | Prach | Prach | Prach | - memcpy(prach, prach + dftlen, (Ncp << 2)); - // here we have | Prefix | Prach | Prach | Prach | Prach | Prach | Prach | - prach_len = (dftlen*6)+Ncp; - } else if (prach_fmt_id == 8) { // 12xdftlen - // here we have | empty | Prach | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | - memcpy(prach2 + dftlen, prach2, (dftlen << 2)); - // here we have | empty | Prach | Prach | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | - memcpy(prach2 + dftlen * 2, prach2, (dftlen << 3)); - // here we have | empty | Prach | Prach | Prach | Prach | empty | empty | empty | empty | empty | empty | empty | empty | - memcpy(prach2 + dftlen * 4, prach2, (dftlen << 3)); - // here we have | empty | Prach | Prach | Prach | Prach | Prach | Prach | empty | empty | empty | empty | empty | empty | - memcpy(prach2 + dftlen * 6, prach2, (dftlen << 2) * 6); - // here we have | empty | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | - memcpy(prach, prach + dftlen, (Ncp << 2)); - // here we have | Prefix | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | Prach | - prach_len = (dftlen*12)+Ncp; - } + c16_t *out = txData[0] + prach_start; + memcpy(out, prach + dftlen - Ncp, Ncp * sizeof(*prach)); + out += Ncp; + const int copies[11] = {1, 2, 4, 4, 2, 4, 6, 2, 12, 1, 4}; + DevAssert(prach_fmt_id < sizeofArray(copies)); + for (int i = 0; i < copies[prach_fmt_id]; i++) { + memcpy(out, prach, dftlen * sizeof(*prach)); + out += dftlen; } #ifdef NR_PRACH_DEBUG - LOG_I(PHY, "PRACH [UE %d] N_RB_UL %d prach_start %d, prach_len %d\n", Mod_id, fp->N_RB_UL, prach_start, prach_len); -#endif - - memcpy(txData[0] + prach_start, prach, sizeof(c16_t) * prach_len); - -#ifdef PRACH_WRITE_OUTPUT_DEBUG - LOG_M("prach_tx0.m", "prachtx0", prach + (Ncp << 1), prach_len - Ncp, 1, 1); - LOG_M("Prach_txsig.m", "txs", (int16_t *)(&txdata[0][prach_start]), 2 * (prach_start + prach_len), 1, 1) + LOG_I(PHY, + "PRACH [UE %d] N_RB_UL %d prach_start %d, prach_len %d\n", + ue->Mod_id, + fp->N_RB_UL, + prach_start, + out - (txData[0] + prach_start)); #endif return signal_energy((int *)prach, 256); From ae8319dbb683130572155cc8597afadafb941551 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Wed, 3 Dec 2025 01:45:53 +0000 Subject: [PATCH 38/53] phy: add warning when choosing higher 3/4 sampling --- common/utils/nr/nr_common.c | 2 ++ common/utils/nr/nr_common.h | 14 ++++++++++++++ openair1/PHY/INIT/nr_parms.c | 22 +++++++++++++++++----- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c index a842f66443..64902c6be2 100644 --- a/common/utils/nr/nr_common.c +++ b/common/utils/nr/nr_common.c @@ -874,6 +874,7 @@ void get_samplerate_and_bw(int mu, switch(n_rb) { case 270: if (threequarter_fs) { + warn_higher_threequarter_fs(n_rb, mu); *sample_rate=92.16e6; *samples_per_frame = 921600; *tx_bw = 50e6; @@ -973,6 +974,7 @@ void get_samplerate_and_bw(int mu, case 273: if (threequarter_fs) { + warn_higher_threequarter_fs(n_rb, mu); *sample_rate=184.32e6; *samples_per_frame = 1843200; *tx_bw = 100e6; diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h index 52eb305824..84de7805ec 100644 --- a/common/utils/nr/nr_common.h +++ b/common/utils/nr/nr_common.h @@ -37,6 +37,7 @@ #include #include "assertions.h" #include "common/utils/utils.h" +#include "common/utils/LOG/log.h" #define MAX_SI_GROUPS 3 #define NR_MAX_PDSCH_TBS 3824 @@ -272,6 +273,19 @@ static __attribute__((always_inline)) inline int count_bits64_with_mask(uint64_t return count_bits64(v & mask); } +static inline void warn_higher_threequarter_fs(const int n_rb, const int mu) +{ + LOG_W(PHY, + "3/4 sampling is not possible for current PRB size: %d and numerology: %d.\n " + "So 6/4 sampling is chosen to support x3xx type USRPs.\n " + "Note that this sampling rate increases fronthaul traffic, FFT buffer size and processing time by a factor of two compared " + "to 3/4 sampling rate.\n " + "Some PRACH configuration might not be supported with 6/4 FFT size.\n " + "Consider reducing the PRB size that would fit within the FFT size of 3/4 sampling\n", + n_rb, + mu); +} + uint64_t reverse_bits(uint64_t in, int n_bits); void reverse_bits_u8(uint8_t const* in, size_t sz, uint8_t* out); diff --git a/openair1/PHY/INIT/nr_parms.c b/openair1/PHY/INIT/nr_parms.c index 880d568ca6..6fbfcb3cac 100644 --- a/openair1/PHY/INIT/nr_parms.c +++ b/openair1/PHY/INIT/nr_parms.c @@ -199,14 +199,26 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, int N_RB_DL) AssertFatal(1==0,"Invalid numerology index %d", mu); } - if(fp->threequarter_fs) - fp->ofdm_symbol_size = 3 * 128; - else - fp->ofdm_symbol_size = 4 * 128; + // Start with FFT size 512 + fp->ofdm_symbol_size = 512; - while(fp->ofdm_symbol_size < N_RB_DL * 12) + // Choose the right FFT size for the BW + while(fp->ofdm_symbol_size < N_RB_DL * NR_NB_SC_PER_RB) fp->ofdm_symbol_size <<= 1; + // Do 3/4 sampling + if (fp->threequarter_fs) { + const uint16_t threeq_fft_size = fp->ofdm_symbol_size * 3 / 4; + if (threeq_fft_size < (N_RB_DL * NR_NB_SC_PER_RB)) { + // 3/4 sampling FFT size not enough + warn_higher_threequarter_fs(N_RB_DL, fp->numerology_index); + // Choose 2 times 3/4 sampling + fp->ofdm_symbol_size = threeq_fft_size << 1; + } else { + fp->ofdm_symbol_size = threeq_fft_size; + } + } + fp->first_carrier_offset = fp->ofdm_symbol_size - (N_RB_DL * 12 / 2); fp->nb_prefix_samples = fp->ofdm_symbol_size / 128 * 9; fp->nb_prefix_samples0 = fp->ofdm_symbol_size / 128 * (9 + (1 << mu)); From c003096176022f9a1bb32fc60551ff7267a2fb37 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 12 Jan 2026 17:36:41 +0100 Subject: [PATCH 39/53] Always send release request at RRC It might happen that the RRC does not know the AMF UE NGAP ID, yet. Even in that case, we should forward the release request to the NGAP module, which can either forward a message to the AMF, or reply back to release the UE. Reported-By: Jegor Zelenjak --- openair2/RRC/NR/rrc_gNB.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 3b8476f9a4..2037e11085 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -2440,10 +2440,8 @@ static void rrc_CU_process_ue_context_release_request(MessageDef *msg_p, sctp_as gNB_RRC_INST *rrc = RC.nrrrc[instance]; rrc_gNB_ue_context_t *ue_context_p = rrc_gNB_get_ue_context(rrc, req->gNB_CU_ue_id); int srbid = 1; - // valid AMF UE NGAP ID range is 0..2^40-1 - if (!ue_context_p || ue_context_p->ue_context.amf_ue_ngap_id >= (1LL << 40)) { - const char *reason = !ue_context_p ? "could not find UE context" : "no AMF"; - LOG_W(RRC, "%s for CU UE ID %u: auto-generate release command\n", reason, req->gNB_CU_ue_id); + if (!ue_context_p) { + LOG_W(RRC, "could not find UE context for CU UE ID %u: auto-generate release command\n", req->gNB_CU_ue_id); uint8_t buffer[NR_RRC_BUF_SIZE] = {0}; int size = do_NR_RRCRelease(buffer, NR_RRC_BUF_SIZE, rrc_gNB_get_next_transaction_identifier(0)); RETURN_IF_INVALID_ASSOC_ID(assoc_id); From f1db9cb1580aaab9406bb8f82b3d880ccb7175c6 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 12 Jan 2026 17:47:55 +0100 Subject: [PATCH 40/53] Forward AMF UE NGAP ID to RRC on DL NAS Message In the Initial Context Setup message, the NGAP forwards the AMF UE ID, but not in the DL NAS Message, although 38.413 says, in $8.3.1.2 either > The NG-RAN node shall use the AMF UE NGAP ID IE and RAN UE NGAP ID IE > received in the INITIAL CONTEXT SETUP REQUEST message as identification > of the logical connection or in $8.6.2.2 > The NG-RAN node shall use the AMF UE NGAP ID IE and RAN UE NGAP ID IE > received in the DOWNLINK NAS TRANSPORT message as identification of the > logical connection So forward in both cases for harmonization. --- openair2/COMMON/ngap_messages_types.h | 2 ++ openair2/RRC/NR/rrc_gNB_NGAP.c | 1 + openair3/NGAP/ngap_gNB_itti_messaging.c | 3 ++- openair3/NGAP/ngap_gNB_itti_messaging.h | 6 +++++- openair3/NGAP/ngap_gNB_nas_procedures.c | 6 +++++- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/openair2/COMMON/ngap_messages_types.h b/openair2/COMMON/ngap_messages_types.h index 3bfd2e20a2..0aad7b8598 100644 --- a/openair2/COMMON/ngap_messages_types.h +++ b/openair2/COMMON/ngap_messages_types.h @@ -737,6 +737,8 @@ typedef struct ngap_ue_ctxt_modification_resp_s { typedef struct ngap_downlink_nas_s { /* UE id for initial connection to NGAP */ uint32_t gNB_ue_ngap_id; + /* UE id at AMF */ + uint64_t amf_ue_ngap_id; /* NAS pdu */ byte_array_t nas_pdu; } ngap_downlink_nas_t; diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index 65991f714d..19bab47b67 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -717,6 +717,7 @@ int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance, mu } gNB_RRC_UE_t *UE = &ue_context_p->ue_context; + UE->amf_ue_ngap_id = req->amf_ue_ngap_id; UE->nas_pdu = req->nas_pdu; rrc_forward_ue_nas_message(rrc, UE); return 0; diff --git a/openair3/NGAP/ngap_gNB_itti_messaging.c b/openair3/NGAP/ngap_gNB_itti_messaging.c index b640f2e556..1e03192599 100644 --- a/openair3/NGAP/ngap_gNB_itti_messaging.c +++ b/openair3/NGAP/ngap_gNB_itti_messaging.c @@ -54,7 +54,7 @@ void ngap_gNB_itti_send_sctp_data_req(instance_t instance, itti_send_msg_to_task(TASK_SCTP, instance, message_p); } -void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, uint32_t gNB_ue_ngap_id, uint8_t *nas_pdu, uint32_t nas_pdu_length) +void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, uint32_t gNB_ue_ngap_id, uint64_t amf_ue_ngap_id, uint8_t *nas_pdu, uint32_t nas_pdu_length) { MessageDef *message_p; ngap_downlink_nas_t *ngap_downlink_nas; @@ -64,6 +64,7 @@ void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, uint32_t gNB_ue_ng ngap_downlink_nas = &message_p->ittiMsg.ngap_downlink_nas; ngap_downlink_nas->gNB_ue_ngap_id = gNB_ue_ngap_id; + ngap_downlink_nas->amf_ue_ngap_id = amf_ue_ngap_id; ngap_downlink_nas->nas_pdu = create_byte_array(nas_pdu_length, nas_pdu); itti_send_msg_to_task(TASK_RRC_GNB, instance, message_p); diff --git a/openair3/NGAP/ngap_gNB_itti_messaging.h b/openair3/NGAP/ngap_gNB_itti_messaging.h index 67054761e3..09ae4d6480 100644 --- a/openair3/NGAP/ngap_gNB_itti_messaging.h +++ b/openair3/NGAP/ngap_gNB_itti_messaging.h @@ -40,7 +40,11 @@ void ngap_gNB_itti_send_sctp_data_req(instance_t instance, uint32_t buffer_length, uint16_t stream); -void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, uint32_t gNB_ue_ngap_id, uint8_t *nas_pdu, uint32_t nas_pdu_length); +void ngap_gNB_itti_send_nas_downlink_ind(instance_t instance, + uint32_t gNB_ue_ngap_id, + uint64_t amf_ue_ngap_id, + uint8_t *nas_pdu, + uint32_t nas_pdu_length); void ngap_gNB_itti_send_sctp_close_association(instance_t instance, sctp_assoc_t assoc_id); diff --git a/openair3/NGAP/ngap_gNB_nas_procedures.c b/openair3/NGAP/ngap_gNB_nas_procedures.c index 2218155c61..7bf7753668 100644 --- a/openair3/NGAP/ngap_gNB_nas_procedures.c +++ b/openair3/NGAP/ngap_gNB_nas_procedures.c @@ -361,7 +361,11 @@ int ngap_gNB_handle_nas_downlink(sctp_assoc_t assoc_id, uint32_t stream, NGAP_NG NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_DownlinkNASTransport_IEs_t, ie, container, NGAP_ProtocolIE_ID_id_NAS_PDU, true); /* Forward the NAS PDU to NR-RRC */ - ngap_gNB_itti_send_nas_downlink_ind(ngap_gNB_instance->instance, ue_desc_p->gNB_ue_ngap_id, ie->value.choice.NAS_PDU.buf, ie->value.choice.NAS_PDU.size); + ngap_gNB_itti_send_nas_downlink_ind(ngap_gNB_instance->instance, + ue_desc_p->gNB_ue_ngap_id, + ue_desc_p->amf_ue_ngap_id, + ie->value.choice.NAS_PDU.buf, + ie->value.choice.NAS_PDU.size); return 0; } From 89b3eb01324304451158be087e70afa68943a7d0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 12 Jan 2026 18:29:56 +0100 Subject: [PATCH 41/53] NR MAC: warn on release for unknown UE --- openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c | 1 + 1 file changed, 1 insertion(+) diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c index 20b30cb074..c271824e75 100644 --- a/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c +++ b/openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c @@ -888,6 +888,7 @@ void ue_context_release_command(const f1ap_ue_context_rel_cmd_t *cmd) UE = UE ? UE : find_ra_UE(&mac->UE_info, cmd->gNB_DU_ue_id); if (UE == NULL) { NR_SCHED_UNLOCK(&mac->sched_lock); + LOG_W(NR_MAC, "UE Context Release Command for unknown RNTI %04x/CU UE ID %d\n", cmd->gNB_DU_ue_id, cmd->gNB_CU_ue_id); f1ap_ue_context_rel_cplt_t complete = { .gNB_CU_ue_id = cmd->gNB_CU_ue_id, .gNB_DU_ue_id = cmd->gNB_DU_ue_id, From b60a37ebb8e186ef76b40857e030fa576e63de8f Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 12 Jan 2026 18:38:21 +0100 Subject: [PATCH 42/53] Log NGAP Initial Context Setup For debugging, it might notably be useful to see the AMF UE NGAP ID. Log it in the single Initial Context Setup message. --- openair3/NGAP/ngap_gNB_handlers.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openair3/NGAP/ngap_gNB_handlers.c b/openair3/NGAP/ngap_gNB_handlers.c index a58c98508b..7a606468e5 100644 --- a/openair3/NGAP/ngap_gNB_handlers.c +++ b/openair3/NGAP/ngap_gNB_handlers.c @@ -849,6 +849,11 @@ static int ngap_gNB_handle_initial_context_request(sctp_assoc_t assoc_id, uint32 itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p); + NGAP_INFO("Initial Context Setup UE RAN ID %d UE AMF ID %ld: %d PDU session(s)\n", + msg->gNB_ue_ngap_id, + msg->amf_ue_ngap_id, + msg->nb_of_pdusessions); + return 0; } From d7a940baba02217067a64bdf0f0c7291b9bc36cb Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 12 Jan 2026 18:42:57 +0100 Subject: [PATCH 43/53] Log TEID in host order All over the GTP module, we use ntohl()/htonl() to convert between local and network order. It seems to have been forgotten here. --- openair3/ocp-gtpu/gtp_itf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index ed15d48f80..6650439e81 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -1036,9 +1036,9 @@ static int Gtpv1uHandleError(int h, uint8_t *msgBuf, uint32_t msgBufLen, const s " TV id for GTP addr %u (should be 133)\n" " len for addr of UPF %u (should be IPv4 or IPv6 len)" " (TS 29.281 Sec 7.3.1 Error Handling not implemented)\n", - msg->h.teid, + ntohl(msg->h.teid), msg->teid_data_i, - msg->teid, + ntohl(msg->teid), msg->addr_data_i, msg->addr_len); int rc = GTPNOK; From 5fa624b2067c93be297e564b3f1cf5320c398047 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 12 Jan 2026 20:26:59 +0100 Subject: [PATCH 44/53] Move NGSetupResponse message to avoid confusion On NGSetupFailure, before moving, we might have [NGAP] Received NG setup failure for AMF... please check your parameters [NGAP] Received NGSetupResponse from AMF --- openair3/NGAP/ngap_gNB_handlers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair3/NGAP/ngap_gNB_handlers.c b/openair3/NGAP/ngap_gNB_handlers.c index 7a606468e5..292ab1635d 100644 --- a/openair3/NGAP/ngap_gNB_handlers.c +++ b/openair3/NGAP/ngap_gNB_handlers.c @@ -84,7 +84,6 @@ void ngap_handle_ng_setup_message(ngap_gNB_amf_data_t *amf_desc_p, int sctp_shut } } } else { - LOG_A(NGAP, "Received NGSetupResponse from AMF\n"); /* Check that at least one setup message is pending */ DevCheck(amf_desc_p->ngap_gNB_instance->ngap_amf_pending_nb > 0, amf_desc_p->ngap_gNB_instance->instance, amf_desc_p->ngap_gNB_instance->ngap_amf_pending_nb, 0); @@ -314,6 +313,7 @@ static int ngap_gNB_handle_ng_setup_response(sctp_assoc_t assoc_id, uint32_t str amf_desc_p->state = NGAP_GNB_STATE_CONNECTED; amf_desc_p->ngap_gNB_instance->ngap_amf_associated_nb ++; ngap_handle_ng_setup_message(amf_desc_p, 0); + LOG_A(NGAP, "Received NGSetupResponse from AMF\n"); return 0; } From c00b5b8c1c89945bb6efdaeb4c90de9a06fea591 Mon Sep 17 00:00:00 2001 From: francescomani Date: Wed, 14 Jan 2026 10:14:20 +0100 Subject: [PATCH 45/53] remove function decode_cellGroupConfig since it is declared but never used anywhere --- openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c | 8 -------- openair2/LAYER2/NR_MAC_gNB/nr_radio_config.h | 1 - 2 files changed, 9 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c b/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c index 35d4c95ece..50f5fd684c 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c +++ b/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.c @@ -3944,14 +3944,6 @@ int encode_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, uint8_t *buffe return (enc_rval.encoded + 7) / 8; } -NR_CellGroupConfig_t *decode_cellGroupConfig(const uint8_t *buffer, int buffer_size) -{ - NR_CellGroupConfig_t *cellGroupConfig = NULL; - asn_dec_rval_t rval = uper_decode(NULL, &asn_DEF_NR_CellGroupConfig, (void **)&cellGroupConfig, buffer, buffer_size, 0, 0); - AssertFatal(rval.code == RC_OK, "could not decode cellGroupConfig\n"); - return cellGroupConfig; -} - static NR_ServingCellConfigCommon_t *clone_ServingCellConfigCommon(const NR_ServingCellConfigCommon_t *scc) { if (scc == NULL) diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.h b/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.h index 27cca60b26..6752db8bc8 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_radio_config.h @@ -97,7 +97,6 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, const nr_mac_config_t *configuration, const NR_ServingCellConfigCommon_t *scc); int encode_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, uint8_t *buffer, int max_buffer_size); -NR_CellGroupConfig_t *decode_cellGroupConfig(const uint8_t *buffer, int max_buffer_size); /* Note: this function returns a new CellGroupConfig for a user with given * configuration, but it will also overwrite the ServingCellConfig passed in From 4e4023a455036a01a302b4e9540284c1be2e5e8a Mon Sep 17 00:00:00 2001 From: Reem Bahsoun Date: Wed, 14 Jan 2026 14:02:56 +0100 Subject: [PATCH 46/53] Align config fields in N2 HO config files --- .../conf_files/gnb-cucp.sa.e1-ho-n2.conf | 16 ++++++------ .../gnb.sa.band77.51prb.usrpb200.n2-ho.conf | 26 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf b/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf index ad4cca969e..3ee84d0b85 100644 --- a/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf +++ b/ci-scripts/conf_files/gnb-cucp.sa.e1-ho-n2.conf @@ -21,10 +21,10 @@ gNBs = tr_s_preference = "f1"; - local_s_address = "192.168.71.150"; + local_s_address = "192.168.71.150"; remote_s_address = "192.168.71.171"; - local_s_portd = 2153; - remote_s_portd = 2153; + local_s_portd = 2153; + remote_s_portd = 2153; # ------- SCTP definitions SCTP : @@ -41,7 +41,7 @@ gNBs = E1_INTERFACE = ( { - type = "cp"; + type = "cp"; ipv4_cucp = "192.168.71.150"; port_cucp = 38462; ipv4_cuup = "0.0.0.0"; # multiple CU-UPs @@ -75,8 +75,8 @@ security = { log_config : { global_log_level = "info"; - pdcp_log_level = "info"; - rrc_log_level = "info"; - f1ap_log_level = "info"; - ngap_log_level = "info"; + pdcp_log_level = "info"; + rrc_log_level = "info"; + f1ap_log_level = "info"; + ngap_log_level = "info"; }; diff --git a/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf b/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf index 577e23a87d..3966cebc6b 100644 --- a/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf +++ b/ci-scripts/conf_files/gnb.sa.band77.51prb.usrpb200.n2-ho.conf @@ -30,26 +30,26 @@ gNBs = # downlinkConfigCommon #frequencyInfoDL # this is 3610.56 MHz - absoluteFrequencySSB = 679104; - dl_frequencyBand = 77; + absoluteFrequencySSB = 679104; + dl_frequencyBand = 77; # this is 3599.94 MHz - dl_absoluteFrequencyPointA = 678388; + dl_absoluteFrequencyPointA = 678388; #scs-SpecificCarrierList - dl_offstToCarrier = 0; + dl_offstToCarrier = 0; # subcarrierSpacing # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - dl_subcarrierSpacing = 1; - dl_carrierBandwidth = 51; + dl_subcarrierSpacing = 1; + dl_carrierBandwidth = 51; #initialDownlinkBWP #genericParameters # this is RBstart=27,L=48 (275*(L-1))+RBstart - initialDLBWPlocationAndBandwidth = 13750; + initialDLBWPlocationAndBandwidth = 13750; # subcarrierSpacing # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 - initialDLBWPsubcarrierSpacing = 1; + initialDLBWPsubcarrierSpacing = 1; #pdcch-ConfigCommon - initialDLBWPcontrolResourceSetZero = 12; - initialDLBWPsearchSpaceZero = 0; + initialDLBWPcontrolResourceSetZero = 12; + initialDLBWPsearchSpaceZero = 0; #uplinkConfigCommon #frequencyInfoUL @@ -197,10 +197,10 @@ RUs = ( att_rx = 0; bands = [77]; max_pdschReferenceSignalPower = -27; - max_rxgain = 114; + max_rxgain = 114; eNB_instances = [0]; - clock_src = "external"; - time_src = "external"; + clock_src = "external"; + time_src = "external"; } ); From f09a74fbb3f058aebfdbc344909caabb93040f77 Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 29 Aug 2025 12:54:49 +0200 Subject: [PATCH 47/53] Add 7.2 documentation and a reference DU config file for DAS scenario MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Teodora Vladić --- doc/ORAN_FHI7.2_Tutorial.md | 35 ++- doc/analog_beamforming.md | 2 +- ...7.273prb.fhi72.4x4-das-benetel650_650.conf | 268 ++++++++++++++++++ 3 files changed, 289 insertions(+), 16 deletions(-) create mode 100644 targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf diff --git a/doc/ORAN_FHI7.2_Tutorial.md b/doc/ORAN_FHI7.2_Tutorial.md index 5f95921a64..1796e4865f 100644 --- a/doc/ORAN_FHI7.2_Tutorial.md +++ b/doc/ORAN_FHI7.2_Tutorial.md @@ -1123,24 +1123,32 @@ The assumed configuration is that with N RUs each having an M×M configuration, we effectively reach an (N×M)×(N×M) configuration. Some caveats: -- Since it's a distributed antenna, this implies that this setup will deploy a +- Even in case of a distributed antenna, this setup will deploy a single cell only -- multiple cells on different RUs are not supported. - All RUs should use the same MTU, so either "normal" (1500 byte) MTU or jumbo frames, but not a mix of both. - We tested only two RUs as of now, i.e., an 8×8 configuration. -- Testing is currently limited to 4 logical antenna ports in DL; in UL, up to 8 can be used. +- In case of a single array is currently limited to 4 logical antenna ports in DL; + in UL, up to 8 can be used. -For two RUs each using a 4x4 configuration, make sure to configure the 8x8 -configuration, i.e., set `nb_tx` and `nb_rx` under `RUs` to 8 each (NOT two -`RUs`!). Also, set the antenna port information as listed above, i.e., +For two RUs using a 8x8 configuration, i.e. a single antenna system, the reference DU configuration file is +[`gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf). -``` -pdsch_AntennaPorts_XP = 2; -pdsch_AntennaPorts_N1 = 2; -pusch_AntennaPorts = 8; -maxMIMO_layers = 2; -``` -Once testing for 8 antenna ports in DL is complete, we will change pdsch_AntennaPorts_N1 to 4. +For two RUs each using a 4x4 configuration, i.e. a distributed antenna system (DAS), +we use the analog beamforming implementation. More details can be found in +[this document](./analog_beamforming.md). It is important to note that +the configuration file should be set as a 4x4 scenario and each RU would be given a +different beam. The reference DU configuration file is [`gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf). + +DAS is enabled by setting to 1 the parameter `enable_das` in `L1` section. + +The following parameters shall be configured on the gNB in the `MACRLC` section: +- `set_analog_beamforming` +- `beam_duration` +- `beams_per_period` + +For guidance on how to set these parameters please refer to +the [analog beamforming document](./analog_beamforming.md). Next, configure the `fhi_72` section as indicated below: @@ -1202,9 +1210,6 @@ fhi_72 = { ``` -Compare also with the example (DU) configuration in -[`gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.8x8-benetel650_650.conf). - Afterwards, start the gNB with the modified configuration file. If everything went well, you should see the RU counters for both RUs go up: diff --git a/doc/analog_beamforming.md b/doc/analog_beamforming.md index cc0099c283..6a11a9f94a 100644 --- a/doc/analog_beamforming.md +++ b/doc/analog_beamforming.md @@ -24,7 +24,7 @@ In the `MACRLC` section of configuration files, there are three new parameters: Setting analog beamforming to 1 or 2 changes the way FAPI beam index is treated. By setting 1, we instruct L1 to look up in Hi-PHY preconfigured DBM beam index. By setting 2, we instruct L2 to directly signal to Lo-PHY the beam index (e.g. over 7.2x fronthaul). -DAS is enabled by setting to 1 the parameter `enable_das` in the L1 section of the configuration file. In case of DAS enabled, the field `beam_weights` in `MACRLC` section can be omitted. +DAS is enabled by setting to 1 the parameter `enable_das` in the L1 section of the configuration file. In case of DAS enabled, the field `beam_weights` in `MACRLC` section can be omitted and the number of beams per period equals the total number of beams. # Implementation in OAI scheduler diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf new file mode 100644 index 0000000000..1650f8a4e1 --- /dev/null +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band77.273prb.fhi72.4x4-das-benetel650_650.conf @@ -0,0 +1,268 @@ +Active_gNBs = ( "gNB-OAI-DU"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + gNB_DU_ID = 0xe00; + gNB_name = "gNB-OAI-DU"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ( { sst = 1; }); }); + + nr_cellid = 1; + + ////////// Physical parameters: + + pdsch_AntennaPorts_XP = 2; + pdsch_AntennaPorts_N1 = 2; + pusch_AntennaPorts = 4; + do_CSIRS = 1; + do_SRS = 0; + force_UL256qam_off = 1; + maxMIMO_layers = 2; + + servingCellConfigCommon = ( + { + #spCellConfigCommon + + physCellId = 0; + # n_TimingAdvanceOffset = 0; +# downlinkConfigCommon + #frequencyInfoDL + # center frequency = 3950.4 MHz + # selected SSB frequency = 3950.4 MHz + absoluteFrequencySSB = 663360; + dl_frequencyBand = 77; + # frequency point A = 3901.26 MHz + dl_absoluteFrequencyPointA = 660084; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 1; + dl_carrierBandwidth = 273; + #initialDownlinkBWP + #genericParameters + initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1 + # +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 1; + #pdcch-ConfigCommon + initialDLBWPcontrolResourceSetZero = 11; + initialDLBWPsearchSpaceZero = 0; + + #uplinkConfigCommon + #frequencyInfoUL + ul_frequencyBand = 77; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 1; + ul_carrierBandwidth = 273; + pMax = 23; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 1099; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 1; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 152; +#prach_msg1_FDM +#0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 0; + preambleReceivedTargetPower = -100; +#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 8; +#powerRampingStep +# 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 3; +#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR +#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen + ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; +#one (0..15) 4,8,12,16,...60,64 + ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; +#ra_ContentionResolutionTimer +#(0..7) 8,16,24,32,40,48,56,64 + ra_ContentionResolutionTimer = 7; + rsrp_ThresholdSSB = 19; +#prach-RootSequenceIndex_PR +#1 = 839, 2 = 139 + prach_RootSequenceIndex_PR = 2; + prach_RootSequenceIndex = 1; + # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex + # + msg1_SubcarrierSpacing = 1, +# restrictedSetConfig +# 0=unrestricted, 1=restricted type A, 2=restricted type B + restrictedSetConfig = 0, + +# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB + msg3_DeltaPreamble = 2; + p0_NominalWithGrant = -96; + +# pucch-ConfigCommon setup : +# pucchGroupHopping +# 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 0; + p0_nominal = -96; + + ssb_PositionsInBurst_Bitmap = 0x1; + +# ssb_periodicityServingCell +# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 + ssb_periodicityServingCell = 2; + +# dmrs_TypeA_position +# 0 = pos2, 1 = pos3 + dmrs_TypeA_Position = 0; + +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + subcarrierSpacing = 1; + + + #tdd-UL-DL-ConfigurationCommon +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + referenceSubcarrierSpacing = 1; + # pattern1 + # dl_UL_TransmissionPeriodicity + # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 + dl_UL_TransmissionPeriodicity = 5; + nrofDownlinkSlots = 3; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 1; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = 10; + } + + ); + + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + } +); + + +MACRLCs = ( +{ + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "f1"; + local_n_address = "172.21.16.51"; + remote_n_address = "172.21.6.90"; + local_n_portd = 2153; + remote_n_portd = 2153; + pusch_TargetSNRx10 = 120; + pucch_TargetSNRx10 = 200; + dl_bler_target_upper = .35; + dl_bler_target_lower = .15; + ul_bler_target_upper = .35; + ul_bler_target_lower = .15; + pusch_FailureThres = 100; + ul_max_mcs = 28; + min_grant_prb = 1; + set_analog_beamforming = 1; + beam_duration = 1; + beams_per_period = 2; +} +); + +L1s = ( +{ + enable_das = 1; + num_cc = 1; + tr_n_preference = "local_mac"; + prach_dtx_threshold = 100; + pucch0_dtx_threshold = 80; + pusch_dtx_threshold = 10; + max_ldpc_iterations = 10; + tx_amp_backoff_dB = 12; # needs to match O-RU configuration + L1_rx_thread_core = 8; + L1_tx_thread_core = 10; # relevant after merge of l1_tx_thread + phase_compensation = 0; # needs to match O-RU configuration +} +); + +RUs = ( +{ + local_rf = "no"; + nb_tx = 4; + nb_rx = 4; + att_tx = 0; + att_rx = 0; + bands = [77]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 75; + sf_extension = 0; + eNB_instances = [0]; + ru_thread_core = 9; + sl_ahead = 10; + tr_preference = "raw_if4p5"; # important: activate FHI7.2 + do_precoding = 0; # needs to match O-RU configuration +} +); + +log_config : +{ + global_log_level = "info"; + hw_log_level = "info"; + phy_log_level = "info"; + mac_log_level = "info"; + rlc_log_level = "info"; + pdcp_log_level = "info"; + rrc_log_level = "info"; + ngap_log_level = "info"; + f1ap_log_level = "info"; +}; + +fhi_72 = { + dpdk_devices = ("0000:01:01.0", "0000:01:01.1", "0000:01:01.2", "0000:01:01.3"); # two VFs can be used as well + system_core = 0; + io_core = 1; + worker_cores = (2); + ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46","8c:1f:64:d1:10:43","8c:1f:64:d1:10:43"); # if two VFs, set two RU MAC addresses (one per RU) + mtu = 9600; + fh_config = ( +# RAN650 #1 + { + T1a_cp_dl = (419, 470); + T1a_cp_ul = (285, 336); + T1a_up = (294, 345); + Ta4 = (0, 200); + ru_config = { + iq_width = 9; + iq_width_prach = 9; + }; + }, +# RAN650 #2 + { + T1a_cp_dl = (419, 470); + T1a_cp_ul = (285, 336); + T1a_up = (294, 345); + Ta4 = (0, 200); + ru_config = { + iq_width = 9; + iq_width_prach = 9; + }; + }); +}; From 48247ecc1d19054c35778ad0258075dca115a777 Mon Sep 17 00:00:00 2001 From: Mario Joa-Ng Date: Thu, 13 Nov 2025 13:04:20 -0500 Subject: [PATCH 48/53] Add F release patch fh_config parameters RunSlotPrbMapBySymbol and LiteOnIgnoreUPSectionId. Add the F patch that work on both Benetel and LiteOn RU. support fh_config parameters RunSlotPrbMapBySymbol and LiteOnIgnoreUPSectionId. Change version number. --- .../F/oaioran_F.patch | 395 +++++++++++++++++- radio/fhi_72/CMakeLists.txt | 2 +- 2 files changed, 378 insertions(+), 19 deletions(-) diff --git a/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch b/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch index 3f953b36d9..6d68225bbf 100644 --- a/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch +++ b/cmake_targets/tools/oran_fhi_integration_patches/F/oaioran_F.patch @@ -1,5 +1,5 @@ diff --git a/fhi_lib/app/src/common.h b/fhi_lib/app/src/common.h -index ac5f471..b0f7ed1 100644 +index ac5f471..94c2d7c 100644 --- a/fhi_lib/app/src/common.h +++ b/fhi_lib/app/src/common.h @@ -28,7 +28,7 @@ @@ -7,7 +7,7 @@ index ac5f471..b0f7ed1 100644 #include -#define VERSIONX "oran_f_release_v1.0" -+#define VERSIONX "oran_f_release_v1.5" ++#define VERSIONX "oran_f_release_v1.6" #define APP_O_DU 0 #define APP_O_RU 1 @@ -173,18 +173,20 @@ index eccc4ae..a97fdc6 100644 CPP_FLAGS_FULL := $(CPP_FLAGS) $(CPP_COMP) $(INC) $(DEF) CPP_FLAGS_FULL_SNC := $(CPP_FLAGS) $(CPP_COMP_SNC) $(INC) $(DEF) diff --git a/fhi_lib/lib/api/xran_fh_o_du.h b/fhi_lib/lib/api/xran_fh_o_du.h -index bacf597..1dd6d66 100644 +index bacf597..2aeaaae 100644 --- a/fhi_lib/lib/api/xran_fh_o_du.h +++ b/fhi_lib/lib/api/xran_fh_o_du.h -@@ -141,7 +141,7 @@ extern "C" { +@@ -141,8 +141,8 @@ extern "C" { #define XRAN_MAX_SECTIONS_PER_SYM (XRAN_MAX_SECTIONS_PER_SLOT) /**< Max number of different sections in single slot (section may be equal to RB allocation for UE) */ #define XRAN_MIN_SECTIONS_PER_SYM (XRAN_MIN_SECTIONS_PER_SLOT) /**< Min number of different sections in single slot (section may be equal to RB allocation for UE) */ -#define XRAN_MAX_FRAGMENT (4) /**< Max number of fragmentations in single symbol */ +-#define XRAN_MAX_SET_BFWS (64) /**< Assumed 64Ant, BFP 9bit with 9K jumbo frame */ +#define XRAN_MAX_FRAGMENT (6) /**< Max number of fragmentations in single symbol */ - #define XRAN_MAX_SET_BFWS (64) /**< Assumed 64Ant, BFP 9bit with 9K jumbo frame */ ++#define XRAN_MAX_SET_BFWS (1) //(64) /**< Assumed 64Ant, BFP 9bit with 9K jumbo frame */ #define XRAN_MAX_PKT_BURST (448+4) /**< 4x14x8 symbols per ms */ + #define XRAN_N_MAX_BUFFER_SEGMENT XRAN_MAX_PKT_BURST /**< Max number of segments per ms */ @@ -419,6 +419,7 @@ struct xran_io_cfg { uint16_t num_rxq; /**< number of RX queues per VF */ char *dpdk_dev[XRAN_VF_MAX]; /**< VFs devices */ @@ -193,7 +195,15 @@ index bacf597..1dd6d66 100644 int32_t bbdev_mode; /**< DPDK for BBDev */ uint32_t dpdkIoVaMode; /**< IOVA Mode */ uint32_t dpdkMemorySize; /**< DPDK max memory allocation */ -@@ -1193,6 +1194,31 @@ int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb, +@@ -713,6 +714,7 @@ struct xran_fh_config { + uint16_t max_sections_per_slot; /**< M-Plane settings for section */ + uint16_t max_sections_per_symbol; /**< M-Plane settings for section */ + int32_t RunSlotPrbMapBySymbolEnable; /**< enable prb mapping by symbol with multisection*/ ++ uint8_t LiteOnIgnoreUPSectionIdEnable; /**< handle LiteOn issue where section id on UP packet is wrongly set to 13. */ + + uint8_t dssEnable; /**< enable DSS (extension-9) */ + uint8_t dssPeriod; /**< DSS pattern period for LTE/NR */ +@@ -1193,6 +1195,31 @@ int32_t xran_reg_physide_cb_by_dev_id(void *pHandle, xran_fh_tti_callback_fn Cb, */ int32_t xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond); @@ -535,7 +545,7 @@ index 08660f3..2bb5187 100644 #include #include diff --git a/fhi_lib/lib/src/xran_common.c b/fhi_lib/lib/src/xran_common.c -index dc40ad9..5968d01 100644 +index dc40ad9..1b88013 100644 --- a/fhi_lib/lib/src/xran_common.c +++ b/fhi_lib/lib/src/xran_common.c @@ -31,7 +31,10 @@ @@ -549,7 +559,110 @@ index dc40ad9..5968d01 100644 #include #include #include -@@ -714,11 +717,14 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) +@@ -49,6 +52,8 @@ + #include "xran_printf.h" + #include "xran_mlog_lnx.h" + ++#include "xran_frame_struct.h" ++ + static struct timespec sleeptime = {.tv_nsec = 1E3 }; /* 1 us */ + + extern int32_t first_call; +@@ -529,13 +534,30 @@ int process_mbuf_batch(struct rte_mbuf* pkt_q[], void* handle, int16_t num, stru + if (pRbMap) + { + /** Get the prb_elem_id */ ++ u_int8_t section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ u_int8_t prb_elem_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ if(0 == p_dev_ctx->LiteOnIgnoreUPSectionIdEnable) { ++ section_id_tmp = prb_elem_id_tmp = sect_id[i]; ++ } else { ++ u_int8_t mixed_ul_sym_start = 0; ++ if (xran_fs_get_slot_type(xran_port, CC_ID[i], tti, XRAN_SLOT_TYPE_SP)) { ++ mixed_ul_sym_start = XRAN_NUM_OF_SYMBOL_PER_SLOT - xran_fs_get_num_ul_sym_sp(xran_port, CC_ID[i], tti); ++ } ++ u_int8_t section_id_tmp = symb_id[i] - mixed_ul_sym_start; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ prb_elem_id_tmp = section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ //Note for future reference when using MTU 1500 ++ //prb_elem_id_tmp = 2*section_id_tmp; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ //if (start_prbu !=0) // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ // prb_elem_id_tmp++; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ } ++ + total_sections=0; + if(pRbMap->prbMap[0].bf_weight.extType == 1) + { + for(idxElm=0 ; idxElm < pRbMap->nPrbElm ; idxElm++) + { + total_sections += pRbMap->prbMap[idxElm].bf_weight.numSetBFWs; +- if(total_sections >= (sect_id[i] + 1)) ++ if(total_sections >= (/*sect_id[i]*/ prb_elem_id_tmp + 1)) + { + prb_elem_id[i] = idxElm; + break; +@@ -544,12 +566,12 @@ int process_mbuf_batch(struct rte_mbuf* pkt_q[], void* handle, int16_t num, stru + } + else + { +- prb_elem_id[i] = sect_id[i]; ++ prb_elem_id[i] = prb_elem_id_tmp; /*sect_id[i];*/ + } + + if (prb_elem_id[i] >= pRbMap->nPrbElm) + { +- print_err("sect_id %d, prb_elem_id %d !=pRbMap->nPrbElm %d\n", sect_id[i], prb_elem_id[i], pRbMap->nPrbElm); ++ print_err("sect_id %d, prb_elem_id %d !=pRbMap->nPrbElm %d\n", /*sect_id[i]*/ section_id_tmp, prb_elem_id[i], pRbMap->nPrbElm); + ret_data[i] = MBUF_FREE; + continue; + } +@@ -615,13 +637,30 @@ int process_mbuf_batch(struct rte_mbuf* pkt_q[], void* handle, int16_t num, stru + if (pRbMap) + { + /** Get the prb_elem_id */ ++ u_int8_t section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ u_int8_t prb_elem_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ if(0 == p_dev_ctx->LiteOnIgnoreUPSectionIdEnable) { ++ section_id_tmp = prb_elem_id_tmp = sect_id[i]; ++ } else { ++ u_int8_t mixed_ul_sym_start = 0; ++ if (xran_fs_get_slot_type(xran_port, CC_ID[i], tti, XRAN_SLOT_TYPE_SP)) { ++ mixed_ul_sym_start = XRAN_NUM_OF_SYMBOL_PER_SLOT - xran_fs_get_num_ul_sym_sp(xran_port, CC_ID[i], tti); ++ } ++ u_int8_t section_id_tmp = symb_id[i] - mixed_ul_sym_start; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ prb_elem_id_tmp = section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ //Note for future reference when using MTU 1500 ++ //prb_elem_id_tmp = 2*section_id_tmp; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ //if (start_prbu !=0) // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ // prb_elem_id_tmp++; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ } ++ + total_sections=0; + if(pRbMap->prbMap[0].bf_weight.extType == 1) + { + for(idxElm=0 ; idxElm < pRbMap->nPrbElm ; idxElm++) + { + total_sections += pRbMap->prbMap[idxElm].bf_weight.numSetBFWs; +- if(total_sections >= (sect_id[i] + 1)) ++ if(total_sections >= (/*sect_id[i]*/ prb_elem_id_tmp + 1)) + { + prb_elem_id[i] = idxElm; + break; +@@ -630,12 +669,12 @@ int process_mbuf_batch(struct rte_mbuf* pkt_q[], void* handle, int16_t num, stru + } + else + { +- prb_elem_id[i] = sect_id[i]; ++ prb_elem_id[i] = prb_elem_id_tmp; /*sect_id[i];*/ + } + + if (prb_elem_id[i] >= pRbMap->nPrbElm) + { +- print_err("sect_id %d, prb_elem_id %d !=pRbMap->nPrbElm %d\n", sect_id[i], prb_elem_id[i], pRbMap->nPrbElm); ++ print_err("sect_id %d, prb_elem_id %d !=pRbMap->nPrbElm %d\n", /*sect_id[i]*/ section_id_tmp, prb_elem_id[i], pRbMap->nPrbElm); + ret_data[i] = MBUF_FREE; + continue; + } +@@ -714,11 +753,14 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) uint8_t compMeth = 0; uint8_t iqWidth = 0; @@ -564,7 +677,7 @@ index dc40ad9..5968d01 100644 if(first_call == 0) return ret; -@@ -733,9 +739,9 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) +@@ -733,9 +775,9 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) return MBUF_FREE; num_bytes = xran_extract_iq_samples(pkt, &iq_samp_buf, @@ -576,7 +689,7 @@ index dc40ad9..5968d01 100644 if (num_bytes <= 0) { print_err("num_bytes is wrong [%d]\n", num_bytes); -@@ -781,10 +787,9 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) +@@ -781,10 +823,9 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) else { @@ -590,7 +703,7 @@ index dc40ad9..5968d01 100644 #ifndef FCN_ADAPT if(valid_res != 0) { -@@ -807,8 +812,7 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) +@@ -807,8 +848,7 @@ process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid) PrachCfg = &(p_dev_ctx->PrachCPConfig); } @@ -600,7 +713,7 @@ index dc40ad9..5968d01 100644 /* PRACH packet has ruportid = num_eAxc + ant_id */ Ant_ID -= PrachCfg->eAxC_offset; symbol_total_bytes[p_dev_ctx->xran_port_id][CC_ID][Ant_ID] += num_bytes; -@@ -1412,7 +1416,7 @@ int generate_cpmsg_prach(void *pHandle, struct xran_cp_gen_params *params, struc +@@ -1412,7 +1452,7 @@ int generate_cpmsg_prach(void *pHandle, struct xran_cp_gen_params *params, struc if(XRAN_FILTERINDEX_PRACH_ABC == pPrachCPConfig->filterIdx) { timeOffset = timeOffset >> nNumerology; //original number is Tc, convert to Ts based on mu @@ -609,7 +722,7 @@ index dc40ad9..5968d01 100644 timeOffset += 16; } else -@@ -1547,8 +1551,7 @@ int32_t ring_processing_func(void* args) +@@ -1547,8 +1587,7 @@ int32_t ring_processing_func(void* args) for (i = 0; i < ctx->io_cfg.num_vfs && i < XRAN_VF_MAX; i++){ for(qi = 0; qi < ctx->rxq_per_port[i]; qi++) { @@ -918,8 +1031,58 @@ index 4acade1..c939edc 100644 if(pCtx){ for(i = 0; i < xran_ports_num; i++){ g_xran_dev_ctx[i] = pCtx; +diff --git a/fhi_lib/lib/src/xran_dev.h b/fhi_lib/lib/src/xran_dev.h +index 0371a53..dd76b49 100644 +--- a/fhi_lib/lib/src/xran_dev.h ++++ b/fhi_lib/lib/src/xran_dev.h +@@ -201,6 +201,7 @@ struct __rte_cache_aligned xran_device_ctx + + int32_t DynamicSectionEna; + int32_t RunSlotPrbMapBySymbolEnable; ++ uint8_t LiteOnIgnoreUPSectionIdEnable; /**< handle LiteOn issue where section id on UP packet is wrongly set to 13. */ + int64_t offset_sec; + int64_t offset_nsec; //offset to GPS time calcuated based on alpha and beta + uint32_t interval_us_local; +diff --git a/fhi_lib/lib/src/xran_frame_struct.c b/fhi_lib/lib/src/xran_frame_struct.c +index fbb1298..44aaf92 100644 +--- a/fhi_lib/lib/src/xran_frame_struct.c ++++ b/fhi_lib/lib/src/xran_frame_struct.c +@@ -519,4 +519,20 @@ int32_t xran_fs_get_symbol_type(uint32_t PortId, int32_t nCellIdx, int32_t nSlot + return xran_fs_slot_symb_type[PortId][nCellIdx][nSfIdxMod][nSymbIdx]; + } + ++uint32_t xran_fs_get_num_dl_sym_sp(uint32_t PortId, int32_t nCellIdx, int32_t nSlotdx) ++{ ++ int32_t nSfIdxMod; ++ ++ nSfIdxMod = xran_fs_slot_limit(PortId, nSlotdx) % ((xran_fs_num_slot_tdd_loop[PortId][nCellIdx] > 0) ? xran_fs_num_slot_tdd_loop[PortId][nCellIdx]: 1); ++ ++ return xran_fs_num_dl_sym_sp[PortId][nCellIdx][nSfIdxMod]; ++} + ++uint32_t xran_fs_get_num_ul_sym_sp(uint32_t PortId, int32_t nCellIdx, int32_t nSlotdx) ++{ ++ int32_t nSfIdxMod; ++ ++ nSfIdxMod = xran_fs_slot_limit(PortId, nSlotdx) % ((xran_fs_num_slot_tdd_loop[PortId][nCellIdx] > 0) ? xran_fs_num_slot_tdd_loop[PortId][nCellIdx]: 1); ++ ++ return xran_fs_num_ul_sym_sp[PortId][nCellIdx][nSfIdxMod]; ++} +diff --git a/fhi_lib/lib/src/xran_frame_struct.h b/fhi_lib/lib/src/xran_frame_struct.h +index 7ed0a3a..8e66945 100644 +--- a/fhi_lib/lib/src/xran_frame_struct.h ++++ b/fhi_lib/lib/src/xran_frame_struct.h +@@ -75,6 +75,8 @@ uint32_t xran_fs_slot_limit_init(uint32_t PortId, int32_t tti_interval_us); + uint32_t xran_fs_get_max_slot(uint32_t PortId); + uint32_t xran_fs_get_max_slot_SFN(uint32_t PortId); + int32_t xran_fs_get_symbol_type(uint32_t PortId, int32_t nCellIdx, int32_t nSlotdx, int32_t nSymbIdx); ++uint32_t xran_fs_get_num_dl_sym_sp(uint32_t PortId, int32_t nCellIdx, int32_t nSlotdx); ++uint32_t xran_fs_get_num_ul_sym_sp(uint32_t PortId, int32_t nCellIdx, int32_t nSlotdx); + + #ifdef __cplusplus + } diff --git a/fhi_lib/lib/src/xran_main.c b/fhi_lib/lib/src/xran_main.c -index 7c472d7..9da3621 100644 +index 7c472d7..7c7cf91 100644 --- a/fhi_lib/lib/src/xran_main.c +++ b/fhi_lib/lib/src/xran_main.c @@ -35,7 +35,11 @@ @@ -974,7 +1137,7 @@ index 7c472d7..9da3621 100644 beam_id = xran_get_beamid(pHandle, XRAN_DIR_UL, cc_id, port_id, slot_id); + pBufList = &(p_xran_dev_ctx->sFrontHaulRxPrbMapBbuIoBufCtrl[buf_id][cc_id][ant_id].sBufferList); -+ struct xran_prb_map *prbMap = pBufList->pBuffers->pData; ++ struct xran_prb_map *prbMap = (struct xran_prb_map *)pBufList->pBuffers->pData; + struct xran_prb_elm *pPrbElm = &prbMap->prbMap[0]; //mjoang + beam_id = pPrbElm->nBeamIndex; ret = generate_cpmsg_prach(pHandle, ¶ms, sect_geninfo, mbuf, p_xran_dev_ctx, @@ -985,7 +1148,7 @@ index 7c472d7..9da3621 100644 beam_id = xran_get_beamid(pHandle, XRAN_DIR_UL, cc_id, port_id, slot_id); + pBufList = &(p_xran_dev_ctx->sFrontHaulRxPrbMapBbuIoBufCtrl[buf_id][cc_id][ant_id].sBufferList); -+ struct xran_prb_map *prbMap = pBufList->pBuffers->pData; ++ struct xran_prb_map *prbMap = (struct xran_prb_map *)pBufList->pBuffers->pData; + struct xran_prb_elm *pPrbElm = &prbMap->prbMap[0]; //mjoang + beam_id = pPrbElm->nBeamIndex; ret = generate_cpmsg_prach(pHandle, ¶ms, sect_geninfo, mbuf, p_xran_dev_ctx, @@ -1550,7 +1713,15 @@ index 7c472d7..9da3621 100644 if(pThCtx == NULL){ print_err("pThCtx allocation error\n"); return XRAN_STATUS_FAIL; -@@ -4034,6 +4062,24 @@ xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, +@@ -3754,6 +3782,7 @@ xran_open(void *pHandle, struct xran_fh_config* pConf) + p_xran_dev_ctx->puschMaskSlot = pConf->puschMaskSlot; + p_xran_dev_ctx->DynamicSectionEna = pConf->DynamicSectionEna; + p_xran_dev_ctx->RunSlotPrbMapBySymbolEnable = pConf->RunSlotPrbMapBySymbolEnable; ++ p_xran_dev_ctx->LiteOnIgnoreUPSectionIdEnable = pConf->LiteOnIgnoreUPSectionIdEnable; + p_xran_dev_ctx->dssEnable = pConf->dssEnable; + p_xran_dev_ctx->dssPeriod = pConf->dssPeriod; + for(i=0; idssPeriod; i++) { +@@ -4034,6 +4063,24 @@ xran_get_slot_idx (uint32_t PortId, uint32_t *nFrameIdx, uint32_t *nSubframeIdx, return tti; } @@ -1575,6 +1746,73 @@ index 7c472d7..9da3621 100644 int32_t xran_set_debug_stop(int32_t value, int32_t count) { +@@ -4208,7 +4255,7 @@ int32_t xran_init_PrbMap_by_symbol_from_cfg(struct xran_prb_map* p_PrbMapIn, str + int32_t i = 0, j = 0, nPrbElm = 0; + int16_t iqwidth = p_PrbMapIn->prbMap[0].iqWidth; + struct xran_prb_elm *p_prb_elm_src, *p_prb_elm_dst; +- struct xran_prb_elm prbMapTemp[XRAN_NUM_OF_SYMBOL_PER_SLOT]; ++ struct xran_prb_elm prbMapTemp[XRAN_NUM_OF_SYMBOL_PER_SLOT] = {0} ; // Need to initialize to zero for field sec_desc. + int32_t nRBStart_tmp, nRBremain, nStartSymb, nEndSymb, nRBStart, nRBEnd, nRBSize; + // int32_t eth_xran_up_headers_sz = sizeof(struct eth_xran_up_pkt_hdr); + // int32_t nmaxRB = (mtu - eth_xran_up_headers_sz - RTE_PKTMBUF_HEADROOM)/XRAN_PAYLOAD_1_RB_SZ(iqwidth); +@@ -4217,7 +4264,6 @@ int32_t xran_init_PrbMap_by_symbol_from_cfg(struct xran_prb_map* p_PrbMapIn, str + if (mtu==9600) + nmaxRB--; //for some reason when mtu is 9600, only 195 RB can be sent, not 196 + +- + memcpy(p_PrbMapOut, p_PrbMapIn, sizeof(struct xran_prb_map)); + for(i = 0; i < XRAN_NUM_OF_SYMBOL_PER_SLOT; i++) + { +@@ -4292,26 +4338,30 @@ int32_t xran_init_PrbMap_by_symbol_from_cfg(struct xran_prb_map* p_PrbMapIn, str + + for(; i < XRAN_NUM_OF_SYMBOL_PER_SLOT; i++) + { +- if((nRBStart == prbMapTemp[i].nRBStart) && (nRBSize == prbMapTemp[i].nRBSize)) +- { +- prbMapTemp[nPrbElm].numSymb++; +- } +- else ++ if((prbMapTemp[i].nRBSize != 0)) + { +- nPrbElm++; +- prbMapTemp[nPrbElm].nStartSymb = prbMapTemp[i].nStartSymb; +- prbMapTemp[nPrbElm].nRBStart = prbMapTemp[i].nRBStart; +- prbMapTemp[nPrbElm].nRBSize = prbMapTemp[i].nRBSize; +- prbMapTemp[nPrbElm].nBeamIndex = prbMapTemp[i].nBeamIndex; +- prbMapTemp[nPrbElm].bf_weight_update = prbMapTemp[i].bf_weight_update; +- prbMapTemp[nPrbElm].compMethod = prbMapTemp[i].compMethod; +- prbMapTemp[nPrbElm].iqWidth = prbMapTemp[i].iqWidth; +- prbMapTemp[nPrbElm].ScaleFactor = prbMapTemp[i].ScaleFactor; +- prbMapTemp[nPrbElm].reMask = prbMapTemp[i].reMask; +- prbMapTemp[nPrbElm].BeamFormingType = prbMapTemp[i].BeamFormingType; +- +- nRBStart = prbMapTemp[i].nRBStart; +- nRBSize = prbMapTemp[i].nRBSize; ++ if (false) // Force it to generate multiple prbMapElm, one for each symbol even if they are of the same RBs ++ //if((nRBStart == prbMapTemp[i].nRBStart) && (nRBSize == prbMapTemp[i].nRBSize)) ++ { ++ prbMapTemp[nPrbElm].numSymb++; ++ } ++ else ++ { ++ nPrbElm++; ++ prbMapTemp[nPrbElm].nStartSymb = prbMapTemp[i].nStartSymb; ++ prbMapTemp[nPrbElm].nRBStart = prbMapTemp[i].nRBStart; ++ prbMapTemp[nPrbElm].nRBSize = prbMapTemp[i].nRBSize; ++ prbMapTemp[nPrbElm].nBeamIndex = prbMapTemp[i].nBeamIndex; ++ prbMapTemp[nPrbElm].bf_weight_update = prbMapTemp[i].bf_weight_update; ++ prbMapTemp[nPrbElm].compMethod = prbMapTemp[i].compMethod; ++ prbMapTemp[nPrbElm].iqWidth = prbMapTemp[i].iqWidth; ++ prbMapTemp[nPrbElm].ScaleFactor = prbMapTemp[i].ScaleFactor; ++ prbMapTemp[nPrbElm].reMask = prbMapTemp[i].reMask; ++ prbMapTemp[nPrbElm].BeamFormingType = prbMapTemp[i].BeamFormingType; ++ ++ nRBStart = prbMapTemp[i].nRBStart; ++ nRBSize = prbMapTemp[i].nRBSize; ++ } + } + } + diff --git a/fhi_lib/lib/src/xran_mem_mgr.c b/fhi_lib/lib/src/xran_mem_mgr.c index e1dcb6c..b3c3fae 100644 --- a/fhi_lib/lib/src/xran_mem_mgr.c @@ -1608,7 +1846,7 @@ index 7d4a5d0..b9b44ac 100644 #endif } diff --git a/fhi_lib/lib/src/xran_rx_proc.c b/fhi_lib/lib/src/xran_rx_proc.c -index e7056f4..0d3d8ac 100644 +index e7056f4..34b6d3b 100644 --- a/fhi_lib/lib/src/xran_rx_proc.c +++ b/fhi_lib/lib/src/xran_rx_proc.c @@ -35,7 +35,11 @@ @@ -1623,6 +1861,127 @@ index e7056f4..0d3d8ac 100644 #include #include +@@ -339,13 +343,33 @@ int32_t xran_process_srs_sym(void *arg, + pRbMap = (struct xran_prb_map *) p_xran_dev_ctx->sFHSrsRxPrbMapBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][CC_ID][Ant_ID].sBufferList.pBuffers->pData; + if(pRbMap) + { +- prbMapElm = &pRbMap->prbMap[sect_id]; +- if(sect_id >= pRbMap->nPrbElm) ++ u_int8_t section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ u_int8_t prb_elem_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ if(0 == p_xran_dev_ctx->LiteOnIgnoreUPSectionIdEnable) { ++ section_id_tmp = prb_elem_id_tmp = sect_id; ++ } else { ++ /** Get the prb_elem_id */ ++ int8_t xran_port = xran_dev_ctx_get_port_id(p_xran_dev_ctx); ++ u_int8_t mixed_ul_sym_start = 0; ++ if (xran_fs_get_slot_type(xran_port, CC_ID, tti, XRAN_SLOT_TYPE_SP)) { ++ mixed_ul_sym_start = XRAN_NUM_OF_SYMBOL_PER_SLOT - xran_fs_get_num_ul_sym_sp(xran_port, CC_ID, tti); ++ } ++ ++ section_id_tmp = symb_id - mixed_ul_sym_start; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ prb_elem_id_tmp = section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ //Note for future reference when using MTU 1500 ++ //prb_elem_id_tmp = 2*section_id_tmp; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ //if (start_prbu !=0) // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ // prb_elem_id_tmp++; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ } ++ ++ prbMapElm = &pRbMap->prbMap[prb_elem_id_tmp /*sect_id*/]; ++ if(/*sect_id*/ prb_elem_id_tmp >= pRbMap->nPrbElm) + { +- print_err("sect_id %d !=pRbMap->nPrbElm %d\n", sect_id,pRbMap->nPrbElm); +- *mb_free = MBUF_FREE; +- return size; +- } ++ print_err("sect_id %d !=pRbMap->nPrbElm %d\n", sect_id,pRbMap->nPrbElm); ++ *mb_free = MBUF_FREE; ++ return size; ++ } + } + else + { +@@ -397,7 +421,25 @@ int32_t xran_process_srs_sym(void *arg, + else */ + { + struct xran_section_desc *p_sec_desc = NULL; +- prbMapElm = &pRbMap->prbMap[sect_id]; ++ u_int8_t section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ u_int8_t prb_elem_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ if(0 == p_xran_dev_ctx->LiteOnIgnoreUPSectionIdEnable) { ++ section_id_tmp = prb_elem_id_tmp = sect_id; ++ } else { ++ int8_t xran_port = xran_dev_ctx_get_port_id(p_xran_dev_ctx); ++ u_int8_t mixed_ul_sym_start = 0; ++ if (xran_fs_get_slot_type(xran_port, CC_ID, tti, XRAN_SLOT_TYPE_SP)) { ++ mixed_ul_sym_start = XRAN_NUM_OF_SYMBOL_PER_SLOT - xran_fs_get_num_ul_sym_sp(xran_port, CC_ID, tti); ++ } ++ u_int8_t section_id_tmp = symb_id - mixed_ul_sym_start; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ prb_elem_id_tmp = section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ //Note for future reference when using MTU 1500 ++ //prb_elem_id_tmp = 2*section_id_tmp; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ //if (start_prbu !=0) // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ // prb_elem_id_tmp++; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ } ++ ++ prbMapElm = &pRbMap->prbMap[prb_elem_id_tmp /*sect_id*/]; + // sec_desc_idx = 0;//prbMapElm->nSecDesc[symb_id]; + sec_desc_idx = prbMapElm->nSecDesc[symb_id]; + +@@ -537,14 +579,33 @@ int32_t xran_process_rx_sym(void *arg, + pos = (char*) p_xran_dev_ctx->sFrontHaulRxBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][CC_ID][Ant_ID].sBufferList.pBuffers[symb_id].pData; + pRbMap = (struct xran_prb_map *) p_xran_dev_ctx->sFrontHaulRxPrbMapBbuIoBufCtrl[tti % XRAN_N_FE_BUF_LEN][CC_ID][Ant_ID].sBufferList.pBuffers->pData; + if(pRbMap){ +- /** Get the prb_elem_id */ ++ u_int8_t section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ u_int8_t prb_elem_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13 ++ if(0 == p_xran_dev_ctx->LiteOnIgnoreUPSectionIdEnable) { ++ section_id_tmp = prb_elem_id_tmp = sect_id; ++ } else { ++ /** Get the prb_elem_id */ ++ int8_t xran_port = xran_dev_ctx_get_port_id(p_xran_dev_ctx); ++ u_int8_t mixed_ul_sym_start = 0; ++ if (xran_fs_get_slot_type(xran_port, CC_ID, tti, XRAN_SLOT_TYPE_SP)) { ++ mixed_ul_sym_start = XRAN_NUM_OF_SYMBOL_PER_SLOT - xran_fs_get_num_ul_sym_sp(xran_port, CC_ID, tti); ++ } ++ ++ section_id_tmp = symb_id - mixed_ul_sym_start; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ prb_elem_id_tmp = section_id_tmp; // hack for LiteON FR2 : receive UP section ID = 13, MTU 9000 ++ //Note for future reference when using MTU 1500 ++ //prb_elem_id_tmp = 2*section_id_tmp; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ //if (start_prbu !=0) // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ // prb_elem_id_tmp++; // For LiteON FR2 : receive UP section ID = 13, MTU 1500 ++ } ++ + total_sections=0; + if(pRbMap->prbMap[0].bf_weight.extType == 1) + { + for(i=0 ; i < pRbMap->nPrbElm ; i++) + { + total_sections += pRbMap->prbMap[i].bf_weight.numSetBFWs; +- if(total_sections >= (sect_id + 1)) ++ if(total_sections >= (/*sect_id*/ section_id_tmp + 1)) + { + prb_elem_id = i; + break; +@@ -553,7 +614,7 @@ int32_t xran_process_rx_sym(void *arg, + } + else + { +- prb_elem_id = sect_id; ++ prb_elem_id = prb_elem_id_tmp; /*sect_id*/; + } + + prbMapElm = &pRbMap->prbMap[prb_elem_id]; +@@ -597,7 +658,7 @@ int32_t xran_process_rx_sym(void *arg, + if(p_sec_desc){ + mb = p_sec_desc->pCtrl; + if(mb){ +- rte_pktmbuf_free(mb); ++ rte_pktmbuf_free(mb); + } + p_sec_desc->pData = iq_data_start; + p_sec_desc->pCtrl = mbuf; diff --git a/fhi_lib/lib/src/xran_timer.c b/fhi_lib/lib/src/xran_timer.c index 14a6a41..55182d8 100644 --- a/fhi_lib/lib/src/xran_timer.c diff --git a/radio/fhi_72/CMakeLists.txt b/radio/fhi_72/CMakeLists.txt index fb40852ebb..6e918650e5 100644 --- a/radio/fhi_72/CMakeLists.txt +++ b/radio/fhi_72/CMakeLists.txt @@ -17,7 +17,7 @@ add_library(oran_fhlib_5g MODULE ) set(E_VERSION 5.1.6) -set(F_VERSION 6.1.5) +set(F_VERSION 6.1.6) find_package(xran REQUIRED) if(xran_VERSION VERSION_EQUAL E_VERSION) From c96aa4e740d70d3423ded36939d091d3c1e851f5 Mon Sep 17 00:00:00 2001 From: Mario Joa-Ng Date: Thu, 13 Nov 2025 12:54:28 -0500 Subject: [PATCH 49/53] use a single OAI FHI to handle both liteon and others. liteon uses xran_fh_tx_send_slot_BySymbol() and xran_fh_rx_read_slot_BySymbol() to send CP one section per sysmbol --- radio/fhi_72/oaioran.c | 490 ++++++++++++++++++++++++++++++++++++ radio/fhi_72/oran-config.c | 19 +- radio/fhi_72/oran-init.c | 13 +- radio/fhi_72/oran-params.h | 12 +- radio/fhi_72/oran_isolate.c | 14 +- radio/fhi_72/oran_isolate.h | 2 + 6 files changed, 537 insertions(+), 13 deletions(-) diff --git a/radio/fhi_72/oaioran.c b/radio/fhi_72/oaioran.c index 493221d6a9..9b84df9ee4 100644 --- a/radio/fhi_72/oaioran.c +++ b/radio/fhi_72/oaioran.c @@ -102,6 +102,7 @@ void oai_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status) AssertFatal(pRbMap != NULL, "(%d:%d:%d)pRbMap == NULL. Aborting.\n", cc_id, tti % XRAN_N_FE_BUF_LEN, ant_id); for (uint32_t sym_id = 0; sym_id < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_id++) { + LOG_D(HW, "cb pRbMap->nPrbElm %d\n", pRbMap->nPrbElm); for (uint32_t idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++ ) { struct xran_prb_elm *pRbElm = &pRbMap->prbMap[idxElm]; pRbElm->nSecDesc[sym_id] = 0; // number of section descriptors per symbol; M-plane info @@ -260,6 +261,28 @@ static bool is_tdd_ul_symbol(const struct xran_frame_config *frame_conf, int slo return frame_conf->sSlotConfig[slot_in_period].nSymbolType[sym_idx] == 1 /* UL */; } +/** @brief Check if symbol in slot is DL. + * + * @param frame_conf xran frame configuration + * @param slot the current (absolute) slot (number) + * @param sym_idx the current symbol index */ +static bool is_tdd_dl_symbol(const struct xran_frame_config *frame_conf, int slot, int sym_idx) +{ + /* in FDD, every symbol is also UL */ + if (frame_conf->nFrameDuplexType == XRAN_FDD) + return true; + int tdd_period = frame_conf->nTddPeriod; + int slot_in_period = slot % tdd_period; + /* check if symbol is UL */ + return frame_conf->sSlotConfig[slot_in_period].nSymbolType[sym_idx] == 0 /* DL */; +} + +/** @brief Check if current slot is guard/mixed */ +static bool is_tdd_guard_slot(const struct xran_frame_config *frame_conf, int slot) +{ + return (is_tdd_dl_symbol(frame_conf, slot, 0) && is_tdd_ul_symbol(frame_conf, slot, XRAN_NUM_OF_SYMBOL_PER_SLOT - 1)); +} + /** @brief Check if current slot is DL or guard/mixed without UL (i.e., current * slot is not UL). */ static bool is_tdd_dl_guard_slot(const struct xran_frame_config *frame_conf, int slot) @@ -673,3 +696,470 @@ int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp) } return (0); } + +/** @details Read PRACH and PUSCH data from xran buffers. If + * I/Q compression (bitwidth < 16 bits) is configured, deccompresses the data + * before writing. Prints ON TIME counters every 128 frames. + * + * Function is blocking and waits for next frame/slot combination. It is unblocked + * by oai_xran_fh_rx_callback(). It writes the current slot into parameters + * frame/slot. */ +int xran_fh_rx_read_slot_BySymbol(ru_info_t *ru, int *frame, int *slot) +{ + void *ptr = NULL; + int32_t *pos = NULL; + int idx = 0; + + static int64_t old_rx_counter[XRAN_PORTS_NUM] = {0}; + static int64_t old_tx_counter[XRAN_PORTS_NUM] = {0}; + struct xran_common_counters x_counters[XRAN_PORTS_NUM]; + static int outcnt = 0; + #ifndef USE_POLLING + // pull next even from oran_sync_fifo + notifiedFIFO_elt_t *res = pullNotifiedFIFO(&oran_sync_fifo); + + notifiedFIFO_elt_t *f; + while ((f = pollNotifiedFIFO(&oran_sync_fifo)) != NULL) { + oran_sync_info_t *old_info = NotifiedFifoData(res); + oran_sync_info_t *new_info = NotifiedFifoData(f); + LOG_E(HW, "Detected double sync message %d.%d => %d.%d\n", old_info->f, old_info->sl, new_info->f, new_info->sl); + delNotifiedFIFO_elt(res); + res = f; + } + + oran_sync_info_t *info = NotifiedFifoData(res); + + *slot = info->sl; + *frame = info->f; + delNotifiedFIFO_elt(res); +#else + *slot = oran_sync_info.sl; + *frame = oran_sync_info.f; + uint32_t tti_in = oran_sync_info.tti; + + static int last_slot = -1; + LOG_D(HW, "oran slot %d, last_slot %d\n", *slot, last_slot); + int cnt = 0; + // while (*slot == last_slot) { + while (tti_in == oran_sync_info.tti) { + //*slot = oran_sync_info.sl; + cnt++; + } + LOG_D(HW, "cnt %d, Reading %d.%d\n", cnt, *frame, *slot); + last_slot = *slot; +#endif + // return(0); + + struct xran_fh_config *fh_cfg = get_xran_fh_config(0); + int slots_per_frame = 10 << fh_cfg->frame_conf.nNumerology; + + int tti = slots_per_frame * (*frame) + (*slot); + + read_prach_data(ru, *frame, *slot); + + const struct xran_fh_init *fh_init = get_xran_fh_init(); + int nPRBs = fh_cfg->nULRBs; + int fftsize = 1 << fh_cfg->ru_conf.fftSize; + + int slot_offset_rxdata = 3 & (*slot); + uint32_t slot_size = 4 * 14 * fftsize; + uint8_t *rx_data = (uint8_t *)ru->rxdataF[0]; + uint8_t *start_ptr = NULL; + int nb_rx_per_ru = ru->nb_rx / fh_init->xran_ports; + for (uint16_t cc_id = 0; cc_id < 1 /*nSectorNum*/; cc_id++) { // OAI does not support multiple CC yet. + for (uint8_t ant_id = 0; ant_id < ru->nb_rx; ant_id++) { + rx_data = (uint8_t *)ru->rxdataF[ant_id]; + start_ptr = rx_data + (slot_size * slot_offset_rxdata); + const struct xran_frame_config *frame_conf = &get_xran_fh_config(ant_id / nb_rx_per_ru)->frame_conf; + // skip processing this slot is TX (no RX in this slot) + if (!is_tdd_ul_guard_slot(frame_conf, *slot)) + continue; + bool sym_start_found = false; + int32_t sym_start = 0; + // This loop would better be more inner to avoid confusion and maybe also errors. + for (int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) { + /* the callback is for mixed and UL slots. In mixed, we have to + * skip DL and guard symbols. */ + if (!is_tdd_ul_symbol(frame_conf, *slot, sym_idx)) + continue; + if (!sym_start_found) { + sym_start = sym_idx; + sym_start_found = true; + } + + uint8_t *pData; + oran_buf_list_t *bufs = get_xran_buffers(ant_id / nb_rx_per_ru); + uint8_t *pPrbMapData = bufs->dstcp[ant_id % nb_rx_per_ru][tti % XRAN_N_FE_BUF_LEN].pBuffers->pData; + struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData; + + struct xran_prb_map *pRbMap = pPrbMap; + for (int idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { + struct xran_prb_elm *pRbElm = &pRbMap->prbMap[idxElm]; +#ifdef E_RELEASE + struct xran_section_desc *p_sec_desc = pRbElm->p_sec_desc[sym_idx][0]; + uint32_t one_rb_size = + (((pRbElm->iqWidth == 0) || (pRbElm->iqWidth == 16)) ? (N_SC_PER_PRB * 2 * 2) : (3 * pRbElm->iqWidth + 1)); + if (fh_init->mtu < pRbElm->nRBSize * one_rb_size) + pData = bufs->dst[ant_id % nb_rx_per_ru][tti % XRAN_N_FE_BUF_LEN] + .pBuffers[sym_idx % XRAN_NUM_OF_SYMBOL_PER_SLOT] + .pData; + else + pData = p_sec_desc->pData; +#elif defined F_RELEASE + struct xran_section_desc *p_sec_desc = &pRbElm->sec_desc[sym_idx][0]; + pData = p_sec_desc->pData; +#endif + ptr = pData; + pos = (int32_t *)(start_ptr + (4 * sym_idx * fftsize)); + if (ptr == NULL || pos == NULL) + continue; + + uint8_t *src = (uint8_t *)ptr; + + LOG_D(HW, "rx pRbMap->nPrbElm %d\n", pRbMap->nPrbElm); + // For Liteon FR2 with RunSlotPrbMapBySymbolEnable xran_prb_map will have xran_prb_elm prbMap[14], each idxElm matches to sym_idx. + u_int8_t section_id_tmp = pPrbMap->nPrbElm < XRAN_NUM_OF_SYMBOL_PER_SLOT ? sym_idx - sym_start: sym_idx; + if (section_id_tmp != pRbElm->nSectId) { + LOG_D(HW, + "rx prbMap[%d] : PRBstart %d nPRBs %d nSectId %d != sym_idx %d:%d\n", + idxElm, + pRbMap->prbMap[idxElm].nRBStart, + pRbMap->prbMap[idxElm].nRBSize, + pRbMap->prbMap[idxElm].nSectId, sym_idx, section_id_tmp + ); + continue; + } + LOG_D(HW, + "rx prbMap[%d] : PRBstart %d:%d nPRBs %d:%d nSectId %d sym_idx %d:%d\n", + idxElm, + pRbMap->prbMap[idxElm].nRBStart, pRbMap->prbMap[idxElm].UP_nRBStart, + pRbMap->prbMap[idxElm].nRBSize, pRbMap->prbMap[idxElm].UP_nRBSize, + pRbMap->prbMap[idxElm].nSectId, sym_idx, section_id_tmp + ); + + int pos_len = 0; + int neg_len = 0; + int num_prbu = p_sec_desc->num_prbu; + int start_prbu = p_sec_desc->start_prbu; + if (start_prbu < (nPRBs >> 1)) // there are PRBs left of DC + neg_len = min((nPRBs * 6) - (start_prbu * 12), num_prbu * N_SC_PER_PRB); + pos_len = (num_prbu * N_SC_PER_PRB) - neg_len; + + src = pData; + // Calculation of the pointer for the section in the buffer. + // positive half + uint8_t *dst1 = (uint8_t *)(pos + (neg_len == 0 ? ((start_prbu * N_SC_PER_PRB) - (nPRBs * 6)) : 0)); + // negative half + uint8_t *dst2 = (uint8_t *)(pos + (start_prbu * N_SC_PER_PRB) + fftsize - (nPRBs * 6)); + int32_t local_dst[num_prbu * N_SC_PER_PRB] __attribute__((aligned(64))); + if (pRbElm->compMethod == XRAN_COMPMETHOD_NONE) { + // NOTE: gcc 11 knows how to generate AVX2 for this! + for (idx = 0; idx < num_prbu * N_SC_PER_PRB * 2; idx++) + ((int16_t *)local_dst)[idx] = ((int16_t)ntohs(((uint16_t *)src)[idx])) >> 2; + memcpy((void *)dst2, (void *)local_dst, neg_len * 4); + memcpy((void *)dst1, (void *)&local_dst[neg_len], pos_len * 4); + } else if (pRbElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) { +#if defined(__i386__) || defined(__x86_64__) + struct xranlib_decompress_request bfp_decom_req = {}; + struct xranlib_decompress_response bfp_decom_rsp = {}; + + int16_t payload_len = (3 * pRbElm->iqWidth + 1) * num_prbu; + + bfp_decom_req.data_in = (int8_t *)src; + bfp_decom_req.numRBs = num_prbu; + bfp_decom_req.len = payload_len; + bfp_decom_req.compMethod = pRbElm->compMethod; + bfp_decom_req.iqWidth = pRbElm->iqWidth; + + bfp_decom_rsp.data_out = (int16_t *)local_dst; + bfp_decom_rsp.len = 0; + + xranlib_decompress_avx512(&bfp_decom_req, &bfp_decom_rsp); +#elif defined(__arm__) || defined(__aarch64__) + armral_bfp_decompression(pRbElm->iqWidth, num_prbu, (int8_t *)src, (int16_t *)local_dst); +#else + AssertFatal(1 == 0, "BFP compression not supported on this architecture"); +#endif + memcpy((void *)dst2, (void *)local_dst, neg_len * 4); + memcpy((void *)dst1, (void *)&local_dst[neg_len], pos_len * 4); + outcnt++; + } else { + printf("pRbElm->compMethod == %d is not supported\n", pRbElm->compMethod); + exit(-1); + } + } + } // sym_ind + } // ant_ind + } // vv_inf + if ((*frame & 0x7f) == 0 && *slot == 0 && xran_get_common_counters(gxran_handle, &x_counters[0]) == XRAN_STATUS_SUCCESS) { + for (int o_xu_id = 0; o_xu_id < fh_init->xran_ports; o_xu_id++) { + LOG_I(HW, + "[%s%d][rx %7ld pps %7ld kbps %7ld][tx %7ld pps %7ld kbps %7ld][Total Msgs_Rcvd %ld]\n", + "o-du ", + o_xu_id, + x_counters[o_xu_id].rx_counter, + x_counters[o_xu_id].rx_counter - old_rx_counter[o_xu_id], + x_counters[o_xu_id].rx_bytes_per_sec * 8 / 1000L, + x_counters[o_xu_id].tx_counter, + x_counters[o_xu_id].tx_counter - old_tx_counter[o_xu_id], + x_counters[o_xu_id].tx_bytes_per_sec * 8 / 1000L, + x_counters[o_xu_id].Total_msgs_rcvd); + for (int rxant = 0; rxant < ru->nb_rx / fh_init->xran_ports; rxant++) + LOG_I(HW, + "[%s%d][pusch%d %7ld prach%d %7ld]\n", + "o_du", + o_xu_id, + rxant, + x_counters[o_xu_id].rx_pusch_packets[rxant], + rxant, + x_counters[o_xu_id].rx_prach_packets[rxant]); + if (x_counters[o_xu_id].rx_counter > old_rx_counter[o_xu_id]) + old_rx_counter[o_xu_id] = x_counters[o_xu_id].rx_counter; + if (x_counters[o_xu_id].tx_counter > old_tx_counter[o_xu_id]) + old_tx_counter[o_xu_id] = x_counters[o_xu_id].tx_counter; + } + } + return (0); +} + +/** @details Write PDSCH IQ-data from OAI txdataF_BF buffer to xran buffers. If + * I/Q compression (bitwidth < 16 bits) is configured, compresses the data + * before writing. */ +int xran_fh_tx_send_slot_BySymbol(ru_info_t *ru, int frame, int slot, uint64_t timestamp) +{ + int tti = /*frame*SUBFRAMES_PER_SYSTEMFRAME*SLOTNUM_PER_SUBFRAME+*/ 20 * frame + + slot; // commented out temporarily to check that compilation of oran 5g is working. + + void *ptr = NULL; + int32_t *pos = NULL; + int idx = 0; + + const struct xran_fh_init *fh_init = get_xran_fh_init(); + const struct xran_fh_config *fh_cfg = get_xran_fh_config(0); + int nPRBs = fh_cfg->nDLRBs; + int fftsize = 1 << fh_cfg->ru_conf.fftSize; + int nb_tx_per_ru = ru->nb_tx / fh_init->xran_ports; + int nb_rx_per_ru = ru->nb_rx / fh_init->xran_ports; + + // Handle CP UL packet here instead of at xran_fh_rx_read_slot() as oran_fh_if4p5_south_in() lags behind + // oran_fh_if4p5_south_out() (which is invoked at the right time slot) by 4 slots. + // Need to use --continuous-tx so that this routine will be triggered in RX slot. + for (uint16_t cc_id = 0; cc_id < 1 /*nSectorNum*/; cc_id++) { // OAI does not support multiple CC yet. + for (uint8_t ant_id = 0; ant_id < ru->nb_rx; ant_id++) { + const struct xran_frame_config *frame_conf = &get_xran_fh_config(ant_id / nb_rx_per_ru)->frame_conf; + // skip processing this slot is TX (no RX in this slot) + if (!is_tdd_ul_guard_slot(frame_conf, slot)) { + continue; + } + bool sym_start_found = false; + int32_t sym_start = 0; + // This loop would better be more inner to avoid confusion and maybe also errors. + for (int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) { + /* the callback is for mixed and UL slots. In mixed, we have to + * skip DL and guard symbols. */ + if (!is_tdd_ul_symbol(frame_conf, slot, sym_idx)) { + continue; + } + if (!sym_start_found) { + sym_start = sym_idx; + sym_start_found = true; + } + + oran_buf_list_t *bufs = get_xran_buffers(ant_id / nb_rx_per_ru); + uint8_t *pPrbMapData = bufs->dstcp[ant_id % nb_rx_per_ru][tti % XRAN_N_FE_BUF_LEN].pBuffers->pData; + struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData; + + struct xran_prb_elm *pRbElm = &pPrbMap->prbMap[0]; + + struct xran_prb_map *pRbMap = pPrbMap; + uint32_t idxElm = 0; + + LOG_D(HW, "tx0 pRbMap->nPrbElm %d\n", pRbMap->nPrbElm); + for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { + LOG_D(HW, "prbMap[%d] : PRBstart %d nPRBs %d\n", idxElm, pRbMap->prbMap[idxElm].nRBStart, pRbMap->prbMap[idxElm].nRBSize); + pRbElm = &pRbMap->prbMap[idxElm]; + // For Liteon FR2 with RunSlotPrbMapBySymbolEnable xran_prb_map will have xran_prb_elm prbMap[14], each idxElm matches to sym_idx. + u_int8_t section_id_tmp = pPrbMap->nPrbElm < XRAN_NUM_OF_SYMBOL_PER_SLOT ? sym_idx - sym_start: sym_idx; + if (section_id_tmp != pRbElm->nSectId) { + LOG_D(HW, + "tx0 prbMap[%d] : PRBstart %d:%d nPRBs %d:%d nSectId %d != sym_idx %d:%d\n", + idxElm, + pRbMap->prbMap[idxElm].nRBStart, pRbMap->prbMap[idxElm].UP_nRBStart, + pRbMap->prbMap[idxElm].nRBSize, pRbMap->prbMap[idxElm].UP_nRBSize, + pRbMap->prbMap[idxElm].nSectId, sym_idx, section_id_tmp + ); + continue; + } + LOG_D(HW, + "tx0 prbMap[%d] : PRBstart %d:%d nPRBs %d:%d nSectId %d sym_idx %d:%d\n", + idxElm, + pRbMap->prbMap[idxElm].nRBStart, pRbMap->prbMap[idxElm].UP_nRBStart, + pRbMap->prbMap[idxElm].nRBSize, pRbMap->prbMap[idxElm].UP_nRBSize, + pRbMap->prbMap[idxElm].nSectId, sym_idx, section_id_tmp + ); + + // ant_id / no of antenna per beam gives the beam_nb + pRbElm->nBeamIndex = ru->beam_id[ant_id / (ru->nb_rx / ru->num_beams_period)][slot * XRAN_NUM_OF_SYMBOL_PER_SLOT + sym_idx]; + // In phy-f-1.0/fhi_lib/lib/api/xran_pkt_cp.h, beamId:15 is of 15bit. -1 set extension bit ef:1 to 1 mistakenly. + if (pRbElm->nBeamIndex == -1) + pRbElm->nBeamIndex = 0; + } + } + } + } + + for (uint16_t cc_id = 0; cc_id < 1 /*nSectorNum*/; cc_id++) { // OAI does not support multiple CC yet. + for (uint8_t ant_id = 0; ant_id < ru->nb_tx; ant_id++) { + oran_buf_list_t *bufs = get_xran_buffers(ant_id / nb_tx_per_ru); + const struct xran_frame_config *frame_conf = &get_xran_fh_config(ant_id / nb_tx_per_ru)->frame_conf; + // skip processing this slot is TX (no TX in this slot) + if (!is_tdd_dl_guard_slot(frame_conf, slot)) { + continue; + } + + // Set nPrbElm if beam_id = -1 for all downlink symbols + bool beam_used = false; + uint8_t *pPrbMapData = bufs->srccp[ant_id % nb_tx_per_ru][tti % XRAN_N_FE_BUF_LEN].pBuffers->pData; + struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData; + struct xran_prb_map *pRbMap = pPrbMap; + int32_t dl_sym_end = 0; + for (int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) { + if (is_tdd_dl_symbol(frame_conf, slot, sym_idx)) { + if (ru->beam_id[ant_id / (ru->nb_tx / ru->num_beams_period)][slot * XRAN_NUM_OF_SYMBOL_PER_SLOT+ sym_idx] != -1) + beam_used |= true; + } + else { + dl_sym_end = sym_idx; + break; + } + } + if (is_tdd_guard_slot(frame_conf, slot)) + pRbMap->nPrbElm = dl_sym_end; + else + pRbMap->nPrbElm = XRAN_NUM_OF_SYMBOL_PER_SLOT; + if (!beam_used) { + pRbMap->nPrbElm = 0; + continue; + } + + // This loop would better be more inner to avoid confusion and maybe also errors. + for (int32_t sym_idx = 0; sym_idx < XRAN_NUM_OF_SYMBOL_PER_SLOT; sym_idx++) { + /* the callback is for mixed and UL slots. In mixed, we have to + * skip UL and guard symbols. */ + if (is_tdd_ul_symbol(frame_conf, slot, sym_idx)) { + continue; + } + uint8_t *pData = + bufs->src[ant_id % nb_tx_per_ru][tti % XRAN_N_FE_BUF_LEN].pBuffers[sym_idx % XRAN_NUM_OF_SYMBOL_PER_SLOT].pData; + uint8_t *pPrbMapData = bufs->srccp[ant_id % nb_tx_per_ru][tti % XRAN_N_FE_BUF_LEN].pBuffers->pData; + struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData; + ptr = pData; + pos = &ru->txdataF_BF[ant_id][sym_idx * fftsize]; + + uint8_t *u8dptr; + struct xran_prb_map *pRbMap = pPrbMap; + int32_t sym_id = sym_idx % XRAN_NUM_OF_SYMBOL_PER_SLOT; + if (ptr && pos) { + uint32_t idxElm = 0; + u8dptr = (uint8_t *)ptr; + int16_t payload_len = 0; + + uint8_t *dst = (uint8_t *)u8dptr; + + struct xran_prb_elm *p_prbMapElm = &pRbMap->prbMap[idxElm]; + LOG_D(HW, "tx1 pRbMap->nPrbElm %d\n", pRbMap->nPrbElm); + for (idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) { + // For Liteon FR2 with RunSlotPrbMapBySymbolEnable xran_prb_map will have xran_prb_elm prbMap[14], each idxElm matches to sym_idx. + struct xran_section_desc *p_sec_desc = NULL; + p_prbMapElm = &pRbMap->prbMap[idxElm]; + if (sym_idx != p_prbMapElm->nSectId) + continue; + // ant_id / no of antenna per beam gives the beam_nb + p_prbMapElm->nBeamIndex = ru->beam_id[ant_id / (ru->nb_tx / ru->num_beams_period)][slot * XRAN_NUM_OF_SYMBOL_PER_SLOT+ sym_idx]; + // In phy-f-1.0/fhi_lib/lib/api/xran_pkt_cp.h, beamId:15 is of 15bit. -1 set extension bit ef:1 to 1 mistakenly. + if (p_prbMapElm->nBeamIndex == -1) + p_prbMapElm->nBeamIndex = 0; + + // assumes one fragment per symbol +#ifdef E_RELEASE + p_sec_desc = p_prbMapElm->p_sec_desc[sym_id][0]; +#elif F_RELEASE + p_sec_desc = &p_prbMapElm->sec_desc[sym_id][0]; +#endif + + dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod); + + if (p_sec_desc == NULL) { + printf("p_sec_desc == NULL\n"); + exit(-1); + } + uint16_t *dst16 = (uint16_t *)dst; + + int pos_len = 0; + int neg_len = 0; + + if (p_prbMapElm->UP_nRBStart < (nPRBs >> 1)) // there are PRBs left of DC + neg_len = min((nPRBs * 6) - (p_prbMapElm->UP_nRBStart * 12), p_prbMapElm->UP_nRBSize * N_SC_PER_PRB); + pos_len = (p_prbMapElm->UP_nRBSize * N_SC_PER_PRB) - neg_len; + // Calculation of the pointer for the section in the buffer. + // start of positive frequency component + uint16_t *src1 = (uint16_t *)&pos[(neg_len == 0) ? ((p_prbMapElm->UP_nRBStart * N_SC_PER_PRB) - (nPRBs * 6)) : 0]; + // start of negative frequency component + uint16_t *src2 = (uint16_t *)&pos[(p_prbMapElm->UP_nRBStart * N_SC_PER_PRB) + fftsize - (nPRBs * 6)]; + + uint32_t local_src[p_prbMapElm->UP_nRBSize * N_SC_PER_PRB] __attribute__((aligned(64))); + memcpy((void *)local_src, (void *)src2, neg_len * 4); + memcpy((void *)&local_src[neg_len], (void *)src1, pos_len * 4); + if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_NONE) { + payload_len = p_prbMapElm->UP_nRBSize * N_SC_PER_PRB * 4L; + /* convert to Network order */ + // NOTE: ggc 11 knows how to generate AVX2 for this! + for (idx = 0; idx < (pos_len + neg_len) * 2; idx++) + ((uint16_t *)dst16)[idx] = htons(((uint16_t *)local_src)[idx]); + } else if (p_prbMapElm->compMethod == XRAN_COMPMETHOD_BLKFLOAT) { + payload_len = (3 * p_prbMapElm->iqWidth + 1) * p_prbMapElm->UP_nRBSize; + +#if defined(__i386__) || defined(__x86_64__) + struct xranlib_compress_request bfp_com_req = {}; + struct xranlib_compress_response bfp_com_rsp = {}; + + bfp_com_req.data_in = (int16_t *)local_src; + bfp_com_req.numRBs = p_prbMapElm->UP_nRBSize; + bfp_com_req.len = payload_len; + bfp_com_req.compMethod = p_prbMapElm->compMethod; + bfp_com_req.iqWidth = p_prbMapElm->iqWidth; + + bfp_com_rsp.data_out = (int8_t *)dst; + bfp_com_rsp.len = 0; + + xranlib_compress_avx512(&bfp_com_req, &bfp_com_rsp); +#elif defined(__arm__) || defined(__aarch64__) + armral_bfp_compression(p_prbMapElm->iqWidth, p_prbMapElm->UP_nRBSize, (int16_t *)local_src, (int8_t *)dst); +#else + AssertFatal(1 == 0, "BFP compression not supported on this architecture"); +#endif + + } else { + printf("p_prbMapElm->compMethod == %d is not supported\n", p_prbMapElm->compMethod); + exit(-1); + } + + p_sec_desc->iq_buffer_offset = RTE_PTR_DIFF(dst, u8dptr); + p_sec_desc->iq_buffer_len = payload_len; + + dst += payload_len; + dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod); + } + + // The tti should be updated as it increased. + pRbMap->tti_id = tti; + + } else { + printf("ptr ==NULL\n"); + exit(-1); // fails here?? + } + } + } + } + return (0); +} diff --git a/radio/fhi_72/oran-config.c b/radio/fhi_72/oran-config.c index 684d44e7cf..b955b35f52 100644 --- a/radio/fhi_72/oran-config.c +++ b/radio/fhi_72/oran-config.c @@ -431,10 +431,12 @@ void print_fh_config(const struct xran_fh_config *fh_config) #ifdef F_RELEASE printf("\ RunSlotPrbMapBySymbolEnable %d\n\ + LiteOnIgnoreUPSectionIdEnable %d\n\ dssEnable %d\n\ dssPeriod %d\n\ technology[XRAN_MAX_DSS_PERIODICITY] (not filled as DSS disabled)\n", fh_config->RunSlotPrbMapBySymbolEnable, + fh_config->LiteOnIgnoreUPSectionIdEnable, fh_config->dssEnable, fh_config->dssPeriod); #endif @@ -762,7 +764,8 @@ static bool set_fh_prach_config(void *mplane_api, const uint32_t max_num_ant, const paramdef_t *prachp, int nprach, - struct xran_prach_config *prach_config) + struct xran_prach_config *prach_config, + bool liteon_prach_eAxC_offset) { const split7_config_t *s7cfg = &oai0->split7; @@ -799,7 +802,10 @@ static bool set_fh_prach_config(void *mplane_api, prach_config->eAxC_offset = xran_mplane->prach_offset; #else uint8_t offset = *gpd(prachp, nprach, ORAN_PRACH_CONFIG_EAXC_OFFSET)->u8ptr; - prach_config->eAxC_offset = (offset != 0) ? offset : max_num_ant; + if (liteon_prach_eAxC_offset) + prach_config->eAxC_offset = offset; + else + prach_config->eAxC_offset = (offset != 0) ? offset : max_num_ant; #endif g_kbar = *gpd(prachp, nprach, ORAN_PRACH_CONFIG_KBAR)->uptr; @@ -945,9 +951,14 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c fh_config->enableCP = 1; // enable C-plane fh_config->prachEnable = 1; // enable PRACH fh_config->srsEnable = 0; // enable SRS; used only if XRAN_CATEGORY_B + // For LiteOn E release, no need to take care of prach eAxC_offset. xran lib is hacked to handle it. + bool liteon_prach_eAxC_offset = false; #ifdef F_RELEASE fh_config->srsEnableCp = 0; // enable SRS CP; used only if XRAN_CATEGORY_B fh_config->SrsDelaySym = 0; // number of SRS delay symbols; used only if XRAN_CATEGORY_B + fh_config->RunSlotPrbMapBySymbolEnable = *gpd(fhp, nfh, ORAN_CONFIG_RunSlotPrbMapBySymbol)->uptr; // enable RunSlotPrbMapBySymbol + fh_config->LiteOnIgnoreUPSectionIdEnable = *gpd(fhp, nfh, ORAN_CONFIG_LiteOnIgnoreUPSectionId)->uptr; // enable LiteOnIgnoreUPSectionId + liteon_prach_eAxC_offset = fh_config->LiteOnIgnoreUPSectionIdEnable; #endif fh_config->puschMaskEnable = 0; // enable PUSCH mask; only used if id = O_RU fh_config->puschMaskSlot = 0; // specific which slot PUSCH channel masked; only used if id = O_RU @@ -959,7 +970,7 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c fh_config->GPS_Alpha = 0; // refers to alpha as defined in section 9.7.2 of ORAN spec. this value should be alpha*(1/1.2288ns), range 0 - 1e7 (ns); offset_nsec = (pConf->GPS_Beta - offset_sec * 100) * 1e7 + pConf->GPS_Alpha fh_config->GPS_Beta = 0; // beta value as defined in section 9.7.2 of ORAN spec. range -32767 ~ +32767; offset_sec = pConf->GPS_Beta / 100 - if (!set_fh_prach_config(mplane_api, oai0, fh_config->neAxc, prachp, nprach, &fh_config->prach_conf)) + if (!set_fh_prach_config(mplane_api, oai0, fh_config->neAxc, prachp, nprach, &fh_config->prach_conf, liteon_prach_eAxC_offset)) return false; /* SRS only used if XRAN_CATEGORY_B Note: srs_config->eAxC_offset >= prach_config->eAxC_offset + PRACH */ @@ -991,8 +1002,6 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c fh_config->max_sections_per_symbol = 0; // not used in xran #ifdef F_RELEASE - fh_config->RunSlotPrbMapBySymbolEnable = 0; // enable PRB mapping by symbol with multisection - fh_config->dssEnable = 0; // enable DSS (extension-9) fh_config->dssPeriod = 0; // DSS pattern period for LTE/NR // fh_config->technology[XRAN_MAX_DSS_PERIODICITY] // technology array represents slot is LTE(0)/NR(1); used only if DSS enabled diff --git a/radio/fhi_72/oran-init.c b/radio/fhi_72/oran-init.c index 07517dcf18..b33708972a 100644 --- a/radio/fhi_72/oran-init.c +++ b/radio/fhi_72/oran-init.c @@ -335,6 +335,7 @@ static void oran_allocate_buffers(void *handle, struct xran_prb_map dlPmMixed = {0}; struct xran_prb_map ulPmMixed = {0}; uint32_t idx = 0; + if (fh_config->frame_conf.nFrameDuplexType == XRAN_TDD) { oran_mixed_slot_t info = get_mixed_slot_info(&fh_config->frame_conf); dlPmMixed = get_xran_prb_map(fh_config, XRAN_DIR_DL, 0, info.num_dlsym); @@ -359,8 +360,16 @@ static void oran_allocate_buffers(void *handle, #ifdef E_RELEASE uint32_t size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm) * (xran_max_sections_per_slot - 1); #elif defined F_RELEASE - uint32_t numPrbElm = xran_get_num_prb_elm(&dlPm, mtu); - uint32_t size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm) * (numPrbElm); + uint32_t size_of_prb_map; + if (fh_config->RunSlotPrbMapBySymbolEnable) { + // For Liteon FR2 with RunSlotPrbMapBySymbolEnable, xran_prb_map will have xran_prb_elm prbMap[14] + size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm) * (XRAN_NUM_OF_SYMBOL_PER_SLOT); + } + else { + // For non-Liteon w/o RunSlotPrbMapBySymbolEnable, xran_prb_map will have xran_prb_elm prbMap[1] + uint32_t numPrbElm = xran_get_num_prb_elm(&dlPm, mtu); + size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm) * (numPrbElm); + } #endif // PDSCH diff --git a/radio/fhi_72/oran-params.h b/radio/fhi_72/oran-params.h index baeefbc68d..9f12418909 100644 --- a/radio/fhi_72/oran-params.h +++ b/radio/fhi_72/oran-params.h @@ -95,6 +95,8 @@ #define CONFIG_STRING_ORAN_FH "fh_config" +#define ORAN_CONFIG_RunSlotPrbMapBySymbol "RunSlotPrbMapBySymbol" +#define ORAN_CONFIG_LiteOnIgnoreUPSectionId "LiteOnIgnoreUPSectionId" #define ORAN_FH_CONFIG_T1A_CP_DL "T1a_cp_dl" #define ORAN_FH_CONFIG_T1A_CP_UL "T1a_cp_ul" #define ORAN_FH_CONFIG_T1A_UP "T1a_up" @@ -104,10 +106,12 @@ // clang-format off #define ORAN_FH_DESC { \ - {ORAN_FH_CONFIG_T1A_CP_DL, "T1a_cp_dl" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ - {ORAN_FH_CONFIG_T1A_CP_UL, "T1a_cp_ul" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ - {ORAN_FH_CONFIG_T1A_UP, "T1a_up" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ - {ORAN_FH_CONFIG_TA4, "Ta4" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ + {ORAN_CONFIG_RunSlotPrbMapBySymbol, "RunSlotPrbMapBySymbol\n", PARAMFLAG_BOOL, .uptr=NULL, .defuintval=0, TYPE_UINT, 0}, \ + {ORAN_CONFIG_LiteOnIgnoreUPSectionId, "Liteon Ignore Section Id\n", PARAMFLAG_BOOL, .uptr=NULL, .defuintval=0, TYPE_UINT, 0}, \ + {ORAN_FH_CONFIG_T1A_CP_DL, "T1a_cp_dl" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ + {ORAN_FH_CONFIG_T1A_CP_UL, "T1a_cp_ul" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ + {ORAN_FH_CONFIG_T1A_UP, "T1a_up" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ + {ORAN_FH_CONFIG_TA4, "Ta4" ORAN_FH_HLP_CPLT, PARAMFLAG_MANDATORY, .uptr=NULL, .defintarrayval=0, TYPE_UINTARRAY, 0}, \ } // clang-format on diff --git a/radio/fhi_72/oran_isolate.c b/radio/fhi_72/oran_isolate.c index 9158e468d4..cd5cbefea6 100644 --- a/radio/fhi_72/oran_isolate.c +++ b/radio/fhi_72/oran_isolate.c @@ -227,7 +227,12 @@ void oran_fh_if4p5_south_in(RU_t *ru, int *frame, int *slot) int f, sl; LOG_D(HW, "Read rxdataF %p,%p\n", ru_info.rxdataF[0], ru_info.rxdataF[1]); start_meas(&ru->rx_fhaul); - int ret = xran_fh_rx_read_slot(&ru_info, &f, &sl); + struct xran_fh_config *fh_cfg = get_xran_fh_config(0); + int ret = 0; + if (fh_cfg->RunSlotPrbMapBySymbolEnable) + ret = xran_fh_rx_read_slot_BySymbol(&ru_info, &f, &sl); + else + ret = xran_fh_rx_read_slot(&ru_info, &f, &sl); stop_meas(&ru->rx_fhaul); LOG_D(HW, "Read %d.%d rxdataF %p,%p\n", f, sl, ru_info.rxdataF[0], ru_info.rxdataF[1]); if (ret != 0) { @@ -282,7 +287,12 @@ void oran_fh_if4p5_south_out(RU_t *ru, int frame, int slot, uint64_t timestamp) // printf("south_out:\tframe=%d\tslot=%d\ttimestamp=%ld\n",frame,slot,timestamp); - int ret = xran_fh_tx_send_slot(&ru_info, frame, slot, timestamp); + struct xran_fh_config *fh_cfg = get_xran_fh_config(0); + int ret = 0; + if (fh_cfg->RunSlotPrbMapBySymbolEnable) + ret = xran_fh_tx_send_slot_BySymbol(&ru_info, frame, slot, timestamp); + else + ret = xran_fh_tx_send_slot(&ru_info, frame, slot, timestamp); if (ret != 0) { printf("ORAN: ORAN_fh_if4p5_south_out ERROR in TX function \n"); } diff --git a/radio/fhi_72/oran_isolate.h b/radio/fhi_72/oran_isolate.h index 6ec011a24b..bb3f17d42b 100644 --- a/radio/fhi_72/oran_isolate.h +++ b/radio/fhi_72/oran_isolate.h @@ -60,7 +60,9 @@ typedef struct ru_info_s { * @param frame output of the frame which has been read. * @param slot output of the slot which has been read. */ int xran_fh_rx_read_slot(ru_info_t *ru, int *frame, int *slot); +int xran_fh_rx_read_slot_BySymbol(ru_info_t *ru, int *frame, int *slot); /** @brief Writes TX data (PDSCH) of given slot. */ int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp); +int xran_fh_tx_send_slot_BySymbol(ru_info_t *ru, int frame, int slot, uint64_t timestamp); #endif /* _ORAN_ISOLATE_H_ */ From 12f4167f990c705ea2c3c6fb81143683331a8e5e Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Mon, 5 Jan 2026 23:27:36 +0100 Subject: [PATCH 50/53] CI: Automatically enumerate test cases, remove hardcoded IDs Update all XML files in ci-scripts folder, using Python script attached in MR !3844. https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/3844#note_198132 --- ci-scripts/cls_ci_helper.py | 5 +- ci-scripts/main.py | 74 ++- ci-scripts/tests/test-runner/test.xml | 91 ++-- ci-scripts/xml_files/cluster_image_build.xml | 33 +- .../xml_files/container_4g_l2sim_tdd.xml | 226 ++++---- .../container_4g_rfsim_fdd_05MHz.xml | 255 +++++---- .../container_4g_rfsim_fdd_05MHz_noS1.xml | 205 ++++---- .../container_4g_rfsim_fdd_10MHz.xml | 255 +++++---- .../container_4g_rfsim_fdd_20MHz.xml | 255 +++++---- .../xml_files/container_4g_rfsim_fembms.xml | 140 +++-- .../xml_files/container_4g_rfsim_mbms.xml | 140 +++-- .../container_4g_rfsim_tdd_05MHz.xml | 249 +++++---- .../xml_files/container_5g_e1_rfsim.xml | 148 +++--- .../xml_files/container_5g_f1_rfsim.xml | 487 ++++++++++-------- .../xml_files/container_5g_fdd_rfsim.xml | 200 ++++--- .../xml_files/container_5g_flexric_rfsim.xml | 382 +++++++------- ci-scripts/xml_files/container_5g_rfsim.xml | 426 ++++++++------- .../xml_files/container_5g_rfsim_24prb.xml | 372 ++++++++----- .../xml_files/container_5g_rfsim_2x2.xml | 200 ++++--- .../container_5g_rfsim_fdd_phytest.xml | 200 ++++--- .../container_5g_rfsim_fr2_32prb.xml | 152 +++--- .../xml_files/container_5g_rfsim_multiue.xml | 301 +++++------ .../xml_files/container_5g_rfsim_n2_ho.xml | 357 +++++++------ .../xml_files/container_5g_rfsim_ntn_geo.xml | 224 ++++---- .../xml_files/container_5g_rfsim_ntn_leo.xml | 224 ++++---- .../xml_files/container_5g_rfsim_prs.xml | 123 ++--- .../xml_files/container_5g_rfsim_sidelink.xml | 123 ++--- .../xml_files/container_5g_rfsim_simple.xml | 120 ++--- .../xml_files/container_5g_rfsim_tdd_dora.xml | 173 +++---- .../xml_files/container_5g_rfsim_u0_25prb.xml | 297 +++++------ .../xml_files/container_5g_vrtsim_chanmod.xml | 200 ++++--- .../container_5g_vrtsim_chanmod_gh.xml | 202 ++++---- .../xml_files/container_build_run_tests.xml | 22 +- .../xml_files/container_image_build.xml | 45 +- .../xml_files/container_image_build_arm.xml | 47 +- .../xml_files/container_image_build_cross.xml | 35 +- .../container_image_build_jetson.xml | 47 +- .../xml_files/container_l2sim_proxy.xml | 22 +- .../container_lte_b200_fdd_05Mhz_tm1.xml | 335 ++++++------ ...container_lte_b200_fdd_05Mhz_tm1_if4_5.xml | 308 ++++++----- ...lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml | 278 +++++----- .../container_lte_b200_fdd_10Mhz_tm1.xml | 315 ++++++----- .../container_lte_b200_fdd_10Mhz_tm1_cdrx.xml | 213 ++++---- ...container_lte_b200_fdd_10Mhz_tm1_oaiue.xml | 310 ++++++----- .../container_lte_b200_fdd_20Mhz_tm1.xml | 289 +++++------ .../container_lte_b200_tdd_05Mhz_tm1.xml | 353 ++++++------- ...container_lte_b200_tdd_05Mhz_tm1_if4_5.xml | 326 ++++++------ .../container_lte_b200_tdd_10Mhz_tm1.xml | 341 ++++++------ .../container_lte_b200_tdd_20Mhz_tm1.xml | 285 ++++------ ...e_b200_tdd_20Mhz_tm1_default_scheduler.xml | 344 ++++++------- .../container_lte_n3xx_tdd_2x2_tm1.xml | 104 ++-- .../container_lte_n3xx_tdd_2x2_tm2.xml | 105 ++-- .../xml_files/container_nsa_b200_quectel.xml | 451 ++++++++-------- .../container_sa_aerial_cn_start.xml | 23 +- .../xml_files/container_sa_aerial_cn_stop.xml | 25 +- .../xml_files/container_sa_aerial_quectel.xml | 231 ++++----- .../container_sa_aerial_quectel_ul_heavy.xml | 210 ++++---- .../xml_files/container_sa_aw2s_asue.xml | 102 ++-- .../xml_files/container_sa_aw2s_asue_2x2.xml | 143 ++--- .../xml_files/container_sa_b200_quectel.xml | 206 ++++---- .../container_sa_e1_b200_quectel.xml | 336 ++++++------ .../container_sa_f1_b200_quectel.xml | 264 +++++----- .../container_sa_f1_ho_b210_quectel.xml | 97 ++-- .../container_sa_fhi72_metanoia_up2_2x2.xml | 65 +-- .../xml_files/container_sa_fhi72_vvdn_up2.xml | 91 ++-- .../container_sa_n2_ho_b210_quectel.xml | 100 ++-- .../container_sa_n310_2X2_100MHz_quectel.xml | 98 ++-- .../container_sa_n310_2X2_60MHz_quectel.xml | 112 ++-- .../container_sa_n310_4X4_60MHz_quectel.xml | 112 ++-- .../xml_files/container_sa_n310_nrue.xml | 120 ++--- .../container_sa_n310_nrue_longrun.xml | 198 ++++--- .../container_sa_sc_b200_quectel.xml | 154 +++--- ci-scripts/xml_files/cppcheck.xml | 33 +- ci-scripts/xml_files/formatting_check.xml | 20 +- ci-scripts/xml_files/fr1_5gc_closure.xml | 20 +- ci-scripts/xml_files/fr1_5gc_start.xml | 21 +- .../xml_files/fr1_cn5g_basic_deploy.xml | 22 +- .../xml_files/fr1_cn5g_basic_undeploy.xml | 23 +- ci-scripts/xml_files/fr1_epc_closure.xml | 20 +- ci-scripts/xml_files/fr1_epc_start.xml | 21 +- .../xml_files/fr1_epc_start_verizon.xml | 37 +- ci-scripts/xml_files/fr1_oai_cn_deploy.xml | 21 +- ci-scripts/xml_files/fr1_oai_cn_undeploy.xml | 21 +- .../gnb_phytest_rfemulator_run_100_2x2.xml | 43 +- ci-scripts/xml_files/gnb_phytest_usrp_run.xml | 79 ++- .../gnb_phytest_usrp_run_100_2x2.xml | 39 +- .../xml_files/gnb_phytest_usrp_run_60.xml | 39 +- .../xml_files/gnb_phytest_usrp_run_60_2x2.xml | 39 +- ci-scripts/xml_files/gnb_usrp_build.xml | 50 +- ci-scripts/xml_files/lte_oai_cn_deploy.xml | 21 +- ci-scripts/xml_files/lte_oai_cn_undeploy.xml | 21 +- ci-scripts/xml_files/physim_4g_deploy_run.xml | 33 +- ci-scripts/xml_files/physim_5g_deploy_run.xml | 33 +- ci-scripts/xml_files/physim_gracehopper.xml | 33 +- .../xml_files/physim_timed_gracehopper.xml | 33 +- .../xml_files/sa_cn5g_20897_closure.xml | 6 +- ci-scripts/xml_files/sa_cn5g_20897_start.xml | 8 +- ci-scripts/xml_files/sa_cn5g_closure.xml | 20 +- ci-scripts/xml_files/sa_cn5g_start.xml | 22 +- .../xml_files/t2_offload_physim_enc_dec.xml | 51 +- 100 files changed, 7124 insertions(+), 7806 deletions(-) diff --git a/ci-scripts/cls_ci_helper.py b/ci-scripts/cls_ci_helper.py index eb47a32892..b8fff32a5e 100644 --- a/ci-scripts/cls_ci_helper.py +++ b/ci-scripts/cls_ci_helper.py @@ -24,15 +24,14 @@ from typing import NamedTuple import logging class TestCaseCtx(NamedTuple): - count: int test_id: int logPath: str def Default(logPath): - return TestCaseCtx(123, 112233, logPath) + return TestCaseCtx(112233, logPath) def baseFilename(self): # typically, the test ID is of form 001234 (6 digits) - return f"{self.logPath}/{self.count}-{self.test_id:06d}" + return f"{self.logPath}/{self.test_id:06d}" def archiveArtifact(cmd, ctx, remote_path): base = os.path.basename(remote_path) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 8aadad76bb..50178f3468 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -308,7 +308,7 @@ def receive_signal(signum, frame): def ShowTestID(ctx, desc): logging.info(f'\u001B[1m----------------------------------------\u001B[0m') - logging.info(f'\u001B[1m Test ID: {ctx.test_id} (#{ctx.count}) \u001B[0m') + logging.info(f'\u001B[1m Test ID: {ctx.test_id} \u001B[0m') logging.info(f'\u001B[1m {desc} \u001B[0m') logging.info(f'\u001B[1m----------------------------------------\u001B[0m') @@ -502,46 +502,40 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re task_set_succeeded = True HTML.startTime=int(round(time.time() * 1000)) - i = 0 - for test_case_id in todo_tests: - for test in all_tests: - if test_runner_abort: + for index, test in enumerate(all_tests, start=1): + if test_runner_abort: + task_set_succeeded = False + test_case_id = f"{index:06d}" + ctx = TestCaseCtx(int(test_case_id), logPath) + HTML.testCase_id = test_case_id + desc = test.findtext('desc') + node = test.findtext('node') if not force_local else 'localhost' + always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes'] + may_fail = test.findtext('may_fail') in ['True', 'true', 'Yes', 'yes'] + HTML.desc = desc + action = test.findtext('class') + if not CheckClassValidity(xml_class_list, action, test_case_id): + task_set_succeeded = False + continue + ShowTestID(ctx, desc) + if not task_set_succeeded and not always_exec: + msg = f"skipping test due to prior error" + logging.warning(msg) + HTML.CreateHtmlTestRowQueue(msg, "SKIP", []) + continue + try: + test_succeeded = ExecuteActionWithParam(action, ctx, node) + if not test_succeeded and may_fail: + logging.warning(f"test ID {test_case_id} action {action} may or may not fail, proceeding despite error") + elif not test_succeeded: + logging.error(f"test ID {test_case_id} action {action} failed ({test_succeeded}), skipping next tests") task_set_succeeded = False - id = test.get('id') - if test_case_id != id: - continue - i += 1 - CiTestObj.testCase_id = id - ctx = TestCaseCtx(i, int(id), logPath) - HTML.testCase_id=CiTestObj.testCase_id - desc = test.findtext('desc') - node = test.findtext('node') if not force_local else 'localhost' - always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes'] - may_fail = test.findtext('may_fail') in ['True', 'true', 'Yes', 'yes'] - HTML.desc = desc - action = test.findtext('class') - if (CheckClassValidity(xml_class_list, action, id) == False): - task_set_succeeded = False - continue - ShowTestID(ctx, desc) - if not task_set_succeeded and not always_exec: - msg = f"skipping test due to prior error" - logging.warning(msg) - HTML.CreateHtmlTestRowQueue(msg, "SKIP", []) - break - try: - test_succeeded = ExecuteActionWithParam(action, ctx, node) - if not test_succeeded and may_fail: - logging.warning(f"test ID {test_case_id} action {action} may or may not fail, proceeding despite error") - elif not test_succeeded: - logging.error(f"test ID {test_case_id} action {action} failed ({test_succeeded}), skipping next tests") - task_set_succeeded = False - except Exception as e: - s = traceback.format_exc() - logging.error(f'while running CI, an exception occurred:\n{s}') - HTML.CreateHtmlTestRowQueue("N/A", 'KO', [f"CI test code encountered an exception:\n{s}"]) - task_set_succeeded = False - break + except Exception as e: + s = traceback.format_exc() + logging.error(f'while running CI, an exception occurred:\n{s}') + HTML.CreateHtmlTestRowQueue("N/A", 'KO', [f"CI test code encountered an exception:\n{s}"]) + task_set_succeeded = False + continue if not task_set_succeeded: logging.error('\u001B[1;37;41mScenario failed\u001B[0m') diff --git a/ci-scripts/tests/test-runner/test.xml b/ci-scripts/tests/test-runner/test.xml index cb54989301..635ccb3b6b 100644 --- a/ci-scripts/tests/test-runner/test.xml +++ b/ci-scripts/tests/test-runner/test.xml @@ -22,60 +22,51 @@ --> - test - Manual testing - wrench - - 000001 - 000011 - 000012 - 000002 - 000003 - 000004 - - + test + Manual testing + wrench + + Custom_Command + This should succeed + localhost + true + - - Custom_Command - This should succeed - localhost - true - + + Custom_Command + This may fail + true + localhost + false + - - Custom_Command - This may fail - true - localhost - false - + + Custom_Command + This is still executed + localhost + true + - - Custom_Command - This is still executed - localhost - true - + + Custom_Command + This should fail + localhost + false + - - Custom_Command - This should fail - localhost - false - + + Custom_Command + This should be skipped + localhost + true + - - Custom_Command - This should be skipped - localhost - true - + + Custom_Command + This should be executed because marked so + true + localhost + true + - - Custom_Command - This should be executed because marked so - true - localhost - true - diff --git a/ci-scripts/xml_files/cluster_image_build.xml b/ci-scripts/xml_files/cluster_image_build.xml index a80d1cd7d4..086b6a0880 100644 --- a/ci-scripts/xml_files/cluster_image_build.xml +++ b/ci-scripts/xml_files/cluster_image_build.xml @@ -21,23 +21,20 @@ --> - build-tab - Build Images on Cluster - wrench - - 000002 - 000001 - - - - Create_Workspace - Create new Workspace - poseidon - - - Build_Cluster_Image - Build Images on OpenShift Cluster - poseidon - + build-tab + Build Images on Cluster + wrench + + + Create_Workspace + Create new Workspace + poseidon + + + + Build_Cluster_Image + Build Images on OpenShift Cluster + poseidon + diff --git a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml index 8a010b9308..1b3ec37b81 100644 --- a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml +++ b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml @@ -21,136 +21,122 @@ --> - l2sim-4glte-tdd - Testing 4G LTE L2 sim - FDD eNB - wrench - - 111111 - 800813 - 000000 - 000001 - 000002 - 000003 - 000004 - 020001 - 020002 - 030011 - 030012 - 100001 - 222222 - - + l2sim-4glte-tdd + Testing 4G LTE L2 sim - FDD eNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb oai-lte-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy Cassandra Database - localhost - ci-scripts/yaml_files/4g_l2sim_fdd - cassandra db_init - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb oai-lte-ue + - - Deploy_Object - Deploy OAI 4G CoreNetwork - localhost - ci-scripts/yaml_files/4g_l2sim_fdd - oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 4G eNB L2 sim - localhost - ci-scripts/yaml_files/4g_l2sim_fdd - oai_enb - + + Deploy_Object + Deploy Cassandra Database + localhost + ci-scripts/yaml_files/4g_l2sim_fdd + cassandra db_init + - - Deploy_Object - Deploy OAI L2 sim 4G LTE-UE 1 and Proxy - localhost - ci-scripts/yaml_files/4g_l2sim_fdd - proxy oai_ue1 - + + Deploy_Object + Deploy OAI 4G CoreNetwork + localhost + ci-scripts/yaml_files/4g_l2sim_fdd + oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen + - - Attach_UE - Attach OAI UE - l2sim4g_ue - localhost - + + Deploy_Object + Deploy OAI 4G eNB L2 sim + localhost + ci-scripts/yaml_files/4g_l2sim_fdd + oai_enb + - - Ping - Ping trf-gen from LTE-UE 1 - l2sim4g_ue - localhost - l2sim4g_ext_dn - localhost - -c 20 - 0 - + + Deploy_Object + Deploy OAI L2 sim 4G LTE-UE 1 and Proxy + localhost + ci-scripts/yaml_files/4g_l2sim_fdd + proxy oai_ue1 + - - Ping - Ping LTE-UE 1 from trf-gen - l2sim4g_ext_dn - localhost - l2sim4g_ue - localhost - -c 20 - 0 - + + Attach_UE + Attach OAI UE + l2sim4g_ue + localhost + - - Iperf - Iperf UDP Downlink - l2sim4g_ue - localhost - l2sim4g_ext_dn - localhost - -u -t 30 -b 1M -R - 25 - 80 - + + Ping + Ping trf-gen from LTE-UE 1 + l2sim4g_ue + localhost + l2sim4g_ext_dn + localhost + -c 20 + 0 + - - Iperf - Iperf UDP Uplink - l2sim4g_ue - localhost - l2sim4g_ext_dn - localhost - -u -t 30 -b 3M - 25 - 80 - + + Ping + Ping LTE-UE 1 from trf-gen + l2sim4g_ext_dn + localhost + l2sim4g_ue + localhost + -c 20 + 0 + - - Undeploy_Object - true - localhost - Undeploy all OAI 4G stack - ci-scripts/yaml_files/4g_l2sim_fdd - + + Iperf + Iperf UDP Downlink + l2sim4g_ue + localhost + l2sim4g_ext_dn + localhost + -u -t 30 -b 1M -R + 25 + 80 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb oai-lte-ue - + + Iperf + Iperf UDP Uplink + l2sim4g_ue + localhost + l2sim4g_ext_dn + localhost + -u -t 30 -b 3M + 25 + 80 + + + + Undeploy_Object + true + localhost + Undeploy all OAI 4G stack + ci-scripts/yaml_files/4g_l2sim_fdd + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb oai-lte-ue + diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml index 3606957af6..adad131ef7 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml @@ -21,151 +21,140 @@ --> - rfsim-4glte-fdd05mhz - Monolithic eNB - FDD 05MHz - wrench - - 111111 - 800813 - 000011 - 000001 - 000012 - 000002 - 000013 - 000001 - 000014 - 000015 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - - - Create_Workspace - Create new Workspace - localhost - - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb-asan oai-lte-ue-asan - + rfsim-4glte-fdd05mhz + Monolithic eNB - FDD 05MHz + wrench - - Deploy_Object - Deploy Cassandra Database - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz - cassandra db_init - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb-asan oai-lte-ue-asan + - - IdleSleep - Sleep - 30 - + + Create_Workspace + Create new Workspace + localhost + - - IdleSleep - Sleep - 10 - + + Deploy_Object + Deploy Cassandra Database + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz + cassandra db_init + - - Deploy_Object - Deploy OAI 4G CoreNetwork - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz - oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - + + IdleSleep + Sleep + 30 + - - Deploy_Object - Deploy OAI 4G eNB RF sim (FDD 05MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz - oai_enb0 - + + Deploy_Object + Deploy OAI 4G CoreNetwork + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz + oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (FDD 05MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim4g_ue - localhost - + + Deploy_Object + Deploy OAI 4G eNB RF sim (FDD 05MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz + oai_enb0 + - - Ping - Ping Traffic-Gen from LTE-UE - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -c 20 - 5 - + + IdleSleep + Sleep + 30 + - - Ping - Ping LTE-UE from Traffic-Gen - rfsim4g_ext_dn - localhost - rfsim4g_ue - localhost - -c 20 - 5 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (FDD 05MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz + oai_ue0 + - - Iperf - Iperf UDP DL - rfsim4g_ue - rfsim4g_ext_dn - -u -t 30 -b 2M -R - 25 - 80 - localhost - localhost - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim4g_ue + localhost + - - Iperf - Iperf UDP UL - rfsim4g_ue - rfsim4g_ext_dn - -u -t 30 -b 1M - 25 - 80 - localhost - localhost - + + Ping + Ping Traffic-Gen from LTE-UE + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -c 20 + 5 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz - + + Ping + Ping LTE-UE from Traffic-Gen + rfsim4g_ext_dn + localhost + rfsim4g_ue + localhost + -c 20 + 5 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb-asan oai-lte-ue-asan - + + Iperf + Iperf UDP UL + rfsim4g_ue + rfsim4g_ext_dn + -u -t 30 -b 1M + 25 + 80 + localhost + localhost + + + + Iperf + Iperf UDP DL + rfsim4g_ue + rfsim4g_ext_dn + -u -t 30 -b 2M -R + 25 + 80 + localhost + localhost + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb-asan oai-lte-ue-asan + diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml index 1d7194f44f..0879e27170 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml @@ -21,124 +21,111 @@ --> - rfsim-4glte-fdd05mhz-noS1 - Monolithic eNB - FDD 05MHz - noS1 - wrench - - 111111 -800813 - 000013 - 000002 - 000014 - 000001 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + rfsim-4glte-fdd05mhz-noS1 + Monolithic eNB - FDD 05MHz - noS1 + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb-asan oai-lte-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - IdleSleep - Sleep - 30 - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb-asan oai-lte-ue-asan + - - IdleSleep - Sleep - 10 - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 4G eNB RF sim (FDD 05MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 - oai_enb0 - + + Deploy_Object + Deploy OAI 4G eNB RF sim (FDD 05MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 + oai_enb0 + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (FDD 05MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Ping - Ping Traffic-Gen from LTE-UE - rfsim4g_ue - localhost - rfsim4g_enb_nos1 - localhost - -c 20 - 5 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (FDD 05MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 + oai_ue0 + - - Ping - Ping LTE-UE from eNB - rfsim4g_enb_nos1 - localhost - rfsim4g_ue - localhost - -c 20 - 5 - + + IdleSleep + Sleep + 30 + - - Iperf - Iperf UDP DL - rfsim4g_ue - localhost - rfsim4g_enb_nos1 - localhost - -u -t 30 -b 2M -R - 25 - 80 - + + Ping + Ping Traffic-Gen from LTE-UE + rfsim4g_ue + localhost + rfsim4g_enb_nos1 + localhost + -c 20 + 5 + - - Iperf - Iperf UDP UL - rfsim4g_ue - localhost - rfsim4g_enb_nos1 - localhost - -u -t 30 -b 1M - 25 - 80 - + + Ping + Ping LTE-UE from eNB + rfsim4g_enb_nos1 + localhost + rfsim4g_ue + localhost + -c 20 + 5 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 - + + Iperf + Iperf UDP DL + rfsim4g_ue + localhost + rfsim4g_enb_nos1 + localhost + -u -t 30 -b 2M -R + 25 + 80 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb-asan oai-lte-ue-asan - + + Iperf + Iperf UDP UL + rfsim4g_ue + localhost + rfsim4g_enb_nos1 + localhost + -u -t 30 -b 1M + 25 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb-asan oai-lte-ue-asan + diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml index a5b642ebe0..acde953fe8 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml @@ -21,151 +21,140 @@ --> - rfsim-4glte-fdd10mhz - Monolithic eNB - FDD 10MHz - wrench - - 111111 - 800813 - 000011 - 000001 - 000012 - 000002 - 000013 - 000001 - 000014 - 000015 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + rfsim-4glte-fdd10mhz + Monolithic eNB - FDD 10MHz + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb-asan oai-lte-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy Cassandra Database - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz - cassandra db_init - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb-asan oai-lte-ue-asan + - - IdleSleep - Sleep - 30 - + + Create_Workspace + Create new Workspace + localhost + - - IdleSleep - Sleep - 10 - + + Deploy_Object + Deploy Cassandra Database + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz + cassandra db_init + - - Deploy_Object - Deploy OAI 4G CoreNetwork - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz - oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - + + IdleSleep + Sleep + 30 + - - Deploy_Object - Deploy OAI 4G eNB RF sim (FDD 10MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz - oai_enb0 - + + Deploy_Object + Deploy OAI 4G CoreNetwork + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz + oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (FDD 10MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim4g_ue - localhost - + + Deploy_Object + Deploy OAI 4G eNB RF sim (FDD 10MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz + oai_enb0 + - - Ping - Ping Traffic-Gen from LTE-UE - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -c 20 - 5 - + + IdleSleep + Sleep + 30 + - - Ping - Ping LTE-UE from Traffic-Gen - rfsim4g_ext_dn - localhost - rfsim4g_ue - localhost - -c 20 - 5 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (FDD 10MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz + oai_ue0 + - - Iperf - Iperf UDP DL - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -u -t 30 -b 2M -R - 25 - 80 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim4g_ue + localhost + - - Iperf - Iperf UDP UL - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -u -t 30 -b 1M - 25 - 80 - + + Ping + Ping Traffic-Gen from LTE-UE + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -c 20 + 5 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz - + + Ping + Ping LTE-UE from Traffic-Gen + rfsim4g_ext_dn + localhost + rfsim4g_ue + localhost + -c 20 + 5 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb-asan oai-lte-ue-asan - + + Iperf + Iperf UDP DL + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -u -t 30 -b 2M -R + 25 + 80 + + + + Iperf + Iperf UDP UL + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -u -t 30 -b 1M + 25 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb-asan oai-lte-ue-asan + diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml index 592c80de68..cf6eb1d838 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml @@ -21,151 +21,140 @@ --> - rfsim-4glte-fdd20mhz - Monolithic eNB - FDD 20MHz - wrench - - 111111 - 800813 - 000011 - 000001 - 000012 - 000002 - 000013 - 000001 - 000014 - 000015 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + rfsim-4glte-fdd20mhz + Monolithic eNB - FDD 20MHz + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb-asan oai-lte-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy Cassandra Database - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz - cassandra db_init - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb-asan oai-lte-ue-asan + - - IdleSleep - Sleep - 30 - + + Create_Workspace + Create new Workspace + localhost + - - IdleSleep - Sleep - 10 - + + Deploy_Object + Deploy Cassandra Database + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz + cassandra db_init + - - Deploy_Object - Deploy OAI 4G CoreNetwork - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz - oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - + + IdleSleep + Sleep + 30 + - - Deploy_Object - Deploy OAI 4G eNB RF sim (FDD 20MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz - oai_enb0 - + + Deploy_Object + Deploy OAI 4G CoreNetwork + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz + oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (FDD 20MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim4g_ue - localhost - + + Deploy_Object + Deploy OAI 4G eNB RF sim (FDD 20MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz + oai_enb0 + - - Ping - Ping Traffic-Gen from LTE-UE - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -c 20 - 5 - + + IdleSleep + Sleep + 30 + - - Ping - Ping LTE-UE from Traffic-Gen - rfsim4g_ext_dn - localhost - rfsim4g_ue - localhost - -c 20 - 5 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (FDD 20MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz + oai_ue0 + - - Iperf - Iperf UDP DL - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -u -t 30 -b 2M -R - 25 - 80 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim4g_ue + localhost + - - Iperf - Iperf UDP UL - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -u -t 30 -b 1M - 25 - 80 - + + Ping + Ping Traffic-Gen from LTE-UE + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -c 20 + 5 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz - + + Ping + Ping LTE-UE from Traffic-Gen + rfsim4g_ext_dn + localhost + rfsim4g_ue + localhost + -c 20 + 5 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb-asan oai-lte-ue-asan - + + Iperf + Iperf UDP DL + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -u -t 30 -b 2M -R + 25 + 80 + + + + Iperf + Iperf UDP UL + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -u -t 30 -b 1M + 25 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb-asan oai-lte-ue-asan + diff --git a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml index 21d2acc4eb..f03fb12e76 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml @@ -21,87 +21,77 @@ --> - rfsim-4glte-fembms - Monolithic eNB - FeMBMS - wrench - - 111111 - 800813 - 000013 - 000002 - 000014 - 000001 - 030011 - 100011 - 222222 - - + rfsim-4glte-fembms + Monolithic eNB - FeMBMS + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb-asan oai-lte-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - IdleSleep - Sleep - 30 - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb-asan oai-lte-ue-asan + - - IdleSleep - Sleep - 10 - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 4G eNB RF sim (FeMBMS) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fembms - oai_enb0 - + + Deploy_Object + Deploy OAI 4G eNB RF sim (FeMBMS) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fembms + oai_enb0 + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (FeMBMS) - localhost - ci-scripts/yaml_files/4g_rfsimulator_fembms - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Iperf2_Unidir - Iperf2 UDP DL - rfsim4g_ue_fembms - localhost - rfsim4g_enb_fembms - localhost - -u -t 30 -b 2M - 25 - 80 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (FeMBMS) + localhost + ci-scripts/yaml_files/4g_rfsimulator_fembms + oai_ue0 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_fembms - + + IdleSleep + Sleep + 30 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb-asan oai-lte-ue-asan - + + Iperf2_Unidir + Iperf2 UDP DL + rfsim4g_ue_fembms + localhost + rfsim4g_enb_fembms + localhost + -u -t 30 -b 2M + 25 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_fembms + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb-asan oai-lte-ue-asan + diff --git a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml index 70d5db33cb..f41aa98a9f 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml @@ -21,87 +21,77 @@ --> - rfsim-4glte-mbms - Monolithic eNB - MBMS - wrench - - 111111 - 800813 - 000013 - 000002 - 000014 - 000001 - 030011 - 100011 - 222222 - - + rfsim-4glte-mbms + Monolithic eNB - MBMS + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb-asan oai-lte-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - IdleSleep - Sleep - 30 - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb-asan oai-lte-ue-asan + - - IdleSleep - Sleep - 10 - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 4G eNB RF sim (MBMS) - localhost - ci-scripts/yaml_files/4g_rfsimulator_mbms - oai_enb0 - + + Deploy_Object + Deploy OAI 4G eNB RF sim (MBMS) + localhost + ci-scripts/yaml_files/4g_rfsimulator_mbms + oai_enb0 + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (MBMS) - localhost - ci-scripts/yaml_files/4g_rfsimulator_mbms - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Iperf - Iperf UDP DL - rfsim4g_ue - localhost - rfsim4g_enb_nos1 - localhost - -u -t 30 -b 2M -R - 25 - 80 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (MBMS) + localhost + ci-scripts/yaml_files/4g_rfsimulator_mbms + oai_ue0 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_mbms - + + IdleSleep + Sleep + 30 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb-asan oai-lte-ue-asan - + + Iperf + Iperf UDP DL + rfsim4g_ue + localhost + rfsim4g_enb_nos1 + localhost + -u -t 30 -b 2M -R + 25 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_mbms + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb-asan oai-lte-ue-asan + diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml index 60054cb305..f57ff9eb14 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml @@ -21,144 +21,139 @@ --> - rfsim-4glte-tdd05mhz - Monolithic eNB - TDD 05MHz - wrench - - 111111 - 800813 - 000011 - 000001 - 000012 - 000002 - 000013 - 000001 - 000014 - 000002 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + rfsim-4glte-tdd05mhz + Monolithic eNB - TDD 05MHz + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-enb oai-lte-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy Cassandra Database - localhost - ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz - cassandra db_init - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-enb oai-lte-ue + - - IdleSleep - Sleep - 30 - + + Create_Workspace + Create new Workspace + localhost + - - IdleSleep - Sleep - 10 - + + Deploy_Object + Deploy Cassandra Database + localhost + ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz + cassandra db_init + - - Deploy_Object - Deploy OAI 4G CoreNetwork - localhost - ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz - oai_hss oai_mme oai_spgwc oai_spgwu trf_gen - + + IdleSleep + Sleep + 30 + - - Deploy_Object - Deploy OAI 4G eNB RF sim (TDD 05MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz - oai_enb0 - + + Deploy_Object + Deploy OAI 4G CoreNetwork + localhost + ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz + oai_hss oai_mme oai_spgwc oai_spgwu trf_gen + - - Deploy_Object - Deploy OAI 4G LTE-UE RF sim (TDD 05MHz) - localhost - ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz - oai_ue0 - + + IdleSleep + Sleep + 10 + - - Ping - Ping Traffic-Gen from LTE-UE - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -c 20 - 5 - + + Deploy_Object + Deploy OAI 4G eNB RF sim (TDD 05MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz + oai_enb0 + - - Ping - Ping LTE-UE from Traffic-Gen - rfsim4g_ext_dn - localhost - rfsim4g_ue - localhost - -c 20 - 5 - + + IdleSleep + Sleep + 30 + - - Iperf - Iperf UDP DL - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -u -t 30 -b 2M -R - 25 - 80 - + + Deploy_Object + Deploy OAI 4G LTE-UE RF sim (TDD 05MHz) + localhost + ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz + oai_ue0 + - - Iperf - Iperf UDP UL - rfsim4g_ue - localhost - rfsim4g_ext_dn - localhost - -u -t 30 -b 1M - 25 - 80 - + + IdleSleep + Sleep + 10 + - - Undeploy_Object - true - Undeploy all OAI 4G stack - localhost - ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz - + + Ping + Ping Traffic-Gen from LTE-UE + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -c 20 + 5 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-enb oai-lte-ue - + + Ping + Ping LTE-UE from Traffic-Gen + rfsim4g_ext_dn + localhost + rfsim4g_ue + localhost + -c 20 + 5 + + + + Iperf + Iperf UDP DL + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -u -t 30 -b 2M -R + 25 + 80 + + + + Iperf + Iperf UDP UL + rfsim4g_ue + localhost + rfsim4g_ext_dn + localhost + -u -t 30 -b 1M + 25 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 4G stack + localhost + ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-enb oai-lte-ue + diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index 5c0fa2b99e..fc3be58e2d 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -21,91 +21,81 @@ --> - rfsim-5gnr-e1 - CUCP-CUUP-DU E1+F1 split - wrench - - 111111 - 800813 - 000021 - 000022 - 000023 - 000024 - 020021 - 100021 - 222222 - - + rfsim-5gnr-e1 + CUCP-CUUP-DU E1+F1 split + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb oai-nr-cuup oai-nr-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_e1 - mysql oai-amf oai-smf oai-upf - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb oai-nr-cuup oai-nr-ue + - - Deploy_Object - Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs) - localhost - ci-scripts/yaml_files/5g_rfsimulator_e1 - oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3 - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G NR-UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_e1 - oai-nr-ue oai-nr-ue2 oai-nr-ue3 - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_e1 + mysql oai-amf oai-smf oai-upf + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 - localhost - + + Deploy_Object + Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs) + localhost + ci-scripts/yaml_files/5g_rfsimulator_e1 + oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3 + - - Ping - Ping ext-dn from all NR-UEs - rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 - localhost - rfsim5g_5gc_fixed_ip - localhost - -c 20 -i0.25 - 5 - + + Deploy_Object + Deploy OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_e1 + oai-nr-ue oai-nr-ue2 oai-nr-ue3 + - - Undeploy_Object - true - localhost - Undeploy all OAI 5G stack - ci-scripts/yaml_files/5g_rfsimulator_e1 - 1,0,0,0 - 1,0,0,0 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 + localhost + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb oai-nr-cuup oai-nr-ue - + + Ping + Ping ext-dn from all NR-UEs + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 + localhost + rfsim5g_5gc_fixed_ip + localhost + -c 20 -i0.25 + 5 + + + + Undeploy_Object + true + localhost + Undeploy all OAI 5G stack + ci-scripts/yaml_files/5g_rfsimulator_e1 + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb oai-nr-cuup oai-nr-ue + diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml index f17be0215d..1ffba40f77 100644 --- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml @@ -21,235 +21,306 @@ --> - rfsim-5gnr-f1 - CU-DU F1 split - wrench - - 111111 - 800813 - 000021 - 000022 - 000023 - 020021 - 030020 - 030021 - 030022 - 040001 - 020022 - 040002 - 030021 - 030022 - 040021 - 000030 - 040022 - 040023 - 020022 - 040024 - 000024 - 000030 - 040025 - 000031 - 030021 - 040027 - 040025 - 000031 - 020022 - 040026 - 040025 - 000031 - 020022 - 040027 - 100021 - 222222 - - + rfsim-5gnr-f1 + CU-DU F1 split + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_f1_rfsimulator - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Deploy_Object - Deploy OAI 5G CU + DU-PCI0 + UE RF sim SA - localhost - ci-scripts/yaml_files/5g_f1_rfsimulator - oai-cu oai-du-pci0 oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - IdleSleep - Sleep - 15 - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_f1_rfsimulator + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - IdleSleep - Sleep - 2 - + + Deploy_Object + Deploy OAI 5G CU + DU-PCI0 + UE RF sim SA + localhost + ci-scripts/yaml_files/5g_f1_rfsimulator + oai-cu oai-du-pci0 oai-nr-ue + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Deploy_Object - Deploy OAI 5G (target) DU-PCI1 RF sim SA - localhost - ci-scripts/yaml_files/5g_f1_rfsimulator - oai-du-pci1 - + + Ping + Ping ext-dn from all NR-UEs + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.25 + 5 + - - Ping - Ping ext-dn from all NR-UEs - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i0.25 - 5 - + + Custom_Command + Simulate a DL radio channel with noise (3 dB) + localhost + echo channelmod modify 0 noise_power_dB 3 | ncat --send-only 192.168.71.181 8091 + - - Custom_Command - Simulate a DL radio channel with noise (3 dB) - localhost - echo channelmod modify 0 noise_power_dB 3 | ncat --send-only 192.168.71.181 8091 - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Iperf - Iperf (DL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Iperf + Iperf (UL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Iperf - Iperf (UL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Custom_Command + Trigger Reestablishment + localhost + echo ci force_reestab | ncat 192.168.71.171 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' + - - Custom_Command - Trigger Reestablishment - localhost - echo ci force_reestab | ncat 192.168.71.171 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 -w25 + 80 + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i0.5 -w25 - 80 - + + Custom_Command + Verify Reestablishment + localhost + echo ci get_reestab_count | ncat 192.168.71.150 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' + - - Custom_Command - Verify Reestablishment - localhost - echo ci get_reestab_count | ncat 192.168.71.150 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Simulate a disruption of DL radio channel (ploss 55) - localhost - echo channelmod modify 0 ploss 55 | ncat 192.168.71.181 8091 - + + Iperf + Iperf (UL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Get UE sync state (UE ID 0) - localhost - echo ciUE sync_state 0 | ncat 192.168.71.181 8091 | grep -E UE_NOT_SYNC - + + Custom_Command + Simulate a disruption of DL radio channel (ploss 55) + localhost + echo channelmod modify 0 ploss 55 | ncat 192.168.71.181 8091 + - - Custom_Command - Restoration of the original DL channel conditions (ploss 20) - localhost - echo channelmod modify 0 ploss 20 | ncat 192.168.71.181 8091 - + + IdleSleep + Sleep + 15 + - - Custom_Command - Get UE sync state (UE ID 0) - localhost - echo ciUE sync_state 0 | ncat 192.168.71.181 8091 | grep -E UE_CONNECTED - + + Custom_Command + Get UE sync state (UE ID 0) + localhost + echo ciUE sync_state 0 | ncat 192.168.71.181 8091 | grep -E UE_NOT_SYNC + - - Custom_Command - Trigger Handover - localhost - echo ci trigger_f1_ho | ncat 192.168.71.150 9090 - + + Custom_Command + Restoration of the original DL channel conditions (ploss 20) + localhost + echo channelmod modify 0 ploss 20 | ncat 192.168.71.181 8091 + - - Custom_Command - UE (1) connected to DU-PCI 0? - localhost - echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584" - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 -w25 + 80 + - - Custom_Command - UE (1) connected to DU-PCI 1? - localhost - echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3585" - + + Custom_Command + Get UE sync state (UE ID 0) + localhost + echo ciUE sync_state 0 | ncat 192.168.71.181 8091 | grep -E UE_CONNECTED + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_f1_rfsimulator - 30,100,100,100 - 30,100,100,100 - + + Deploy_Object + Deploy OAI 5G (target) DU-PCI1 RF sim SA + localhost + ci-scripts/yaml_files/5g_f1_rfsimulator + oai-du-pci1 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + IdleSleep + Sleep + 15 + + + + Custom_Command + Trigger Handover + localhost + echo ci trigger_f1_ho | ncat 192.168.71.150 9090 + + + + IdleSleep + Sleep + 2 + + + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + + + + Custom_Command + UE (1) connected to DU-PCI 1? + localhost + echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3585" + + + + Custom_Command + Trigger Handover + localhost + echo ci trigger_f1_ho | ncat 192.168.71.150 9090 + + + + IdleSleep + Sleep + 2 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 -w25 + 80 + + + + Custom_Command + UE (1) connected to DU-PCI 0? + localhost + echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584" + + + + Custom_Command + Trigger Handover + localhost + echo ci trigger_f1_ho | ncat 192.168.71.150 9090 + + + + IdleSleep + Sleep + 2 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 -w25 + 80 + + + + Custom_Command + UE (1) connected to DU-PCI 1? + localhost + echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3585" + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_f1_rfsimulator + 30,100,100,100 + 30,100,100,100 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml index 44ccb3a3d2..b4383feeaf 100644 --- a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml @@ -21,120 +21,108 @@ --> - rfsim-5gnr-fdd - Monolithic FDD gNB with SDAP - wrench - - 111111 - 800813 - 000011 - 000012 - 000013 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + rfsim-5gnr-fdd + Monolithic FDD gNB with SDAP + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb oai-nr-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_fdd_rfsimulator - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb oai-nr-ue + - - Deploy_Object - Deploy OAI 5G gNB+UE RF sim SA - localhost - ci-scripts/yaml_files/5g_fdd_rfsimulator - oai-gnb oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_fdd_rfsimulator + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G gNB+UE RF sim SA + localhost + ci-scripts/yaml_files/5g_fdd_rfsimulator + oai-gnb oai-nr-ue + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Iperf - Iperf (DL/3Mbps/UDP)(30 sec) - -u -b 3M -t 30 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (UL/3Mbps/UDP)(30 sec) - -u -b 3M -t 30 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_fdd_rfsimulator - 1,0,0,0 - 1,0,0,0 - + + Iperf + Iperf (DL/3Mbps/UDP)(30 sec) + -u -b 3M -t 30 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb oai-nr-ue - + + Iperf + Iperf (UL/3Mbps/UDP)(30 sec) + -u -b 3M -t 30 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_fdd_rfsimulator + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb oai-nr-ue + diff --git a/ci-scripts/xml_files/container_5g_flexric_rfsim.xml b/ci-scripts/xml_files/container_5g_flexric_rfsim.xml index 135eab6b68..78fb296697 100644 --- a/ci-scripts/xml_files/container_5g_flexric_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_flexric_rfsim.xml @@ -21,236 +21,206 @@ --> - rfsim-5gnr-flexric - Monolithic SA TDD gNB and FlexRic Integration - wrench - 1 - - 111110 - 111111 - 111112 - 000001 - 000002 - 000003 - 010000 - 000004 - 333333 - 010001 - 010002 - 010003 - 020005 - 002006 - 444444 - 100002 - 100003 - 100004 - 100005 - 100006 - 100007 - 100008 - 100009 - 100001 - 222221 - 222222 - - + rfsim-5gnr-flexric + Monolithic SA TDD gNB and FlexRic Integration + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb oai-nr-ue - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb oai-nr-ue + - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-flexric - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-flexric + - - Clean_Test_Server_Images - Clean Test Images on Test Server - localhost - oai-gnb oai-nr-ue - true - + + Custom_Command + Updating CN5G images + localhost + docker compose -f ../doc/tutorial_resources/oai-cn5g/docker-compose.yaml pull + - - Clean_Test_Server_Images - Clean Test Images on Test Server - localhost - oai-flexric - true - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + doc/tutorial_resources/oai-cn5g + mysql oai-nrf oai-udr oai-udm oai-ausf oai-amf oai-smf oai-upf oai-ext-dn + - - Custom_Command - Updating CN5G images - localhost - docker compose -f ../doc/tutorial_resources/oai-cn5g/docker-compose.yaml pull - + + Deploy_Object + Deploy OAI nearRT-RIC + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + nearRT-RIC + - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - doc/tutorial_resources/oai-cn5g - mysql oai-nrf oai-udr oai-udm oai-ausf oai-amf oai-smf oai-upf oai-ext-dn - + + Deploy_Object + Deploy OAI 5G gNB in RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-gnb + - - Deploy_Object - Deploy OAI nearRT-RIC - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - nearRT-RIC - + + Deploy_Object + Deploy RC monitoring + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-rc-moni + - - Deploy_Object - Deploy OAI 5G gNB in RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - oai-gnb - + + Deploy_Object + Deploy 2 OAI 5G NR-UEs in RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-nr-ue oai-nr-ue2 + - - Deploy_Object - Deploy 2 OAI 5G NR-UEs in RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - oai-nr-ue oai-nr-ue2 - + + Attach_UE + Attach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + carabe + - - Ping - Ping ext-dn from both UEs - rfsim5g_ue rfsim5g_ue2 - carabe - oai_ext_dn - carabe - -c 20 - 5 - + + Deploy_Object + Deploy KPM monitoring + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-kpm-moni + - - Attach_UE - Attach OAI UE 1 and 2 - rfsim5g_ue rfsim5g_ue2 - carabe - + + Deploy_Object + Deploy KPM monitoring and RC control + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-kpm-rc + - - Detach_UE - Detach OAI UE 1 and 2 - rfsim5g_ue rfsim5g_ue2 - carabe - + + Deploy_Object + Deploy custom SMs monitoring + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-gtp-mac-rlc-pdcp-moni + - - Undeploy_Object - Undeploy Core Network - localhost - doc/tutorial_resources/oai-cn5g - true - + + Ping + Ping ext-dn from both UEs + rfsim5g_ue rfsim5g_ue2 + carabe + oai_ext_dn + carabe + -c 20 + 5 + - - Stop_Object - Stop RC monitoring xApp - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-rc-moni - + + Detach_UE + Detach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + carabe + - - Stop_Object - Stop KPM monitoring xApp - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-kpm-moni - + + Stop_Object + Stop RC monitoring xApp + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-rc-moni + - - Stop_Object - Stop KPM monitoring and RC control xApp - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-kpm-rc - + + Stop_Object + Stop KPM monitoring xApp + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-kpm-moni + - - Stop_Object - Stop custom SMs monitoring xApp - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-gtp-mac-rlc-pdcp-moni - + + Stop_Object + Stop KPM monitoring and RC control xApp + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-kpm-rc + - - Stop_Object - Stop OAI UEs - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - oai-nr-ue oai-nr-ue2 - + + Stop_Object + Stop custom SMs monitoring xApp + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + xapp-gtp-mac-rlc-pdcp-moni + - - Stop_Object - Stop OAI gNB - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - oai-gnb - + + Stop_Object + Stop OAI UEs + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-nr-ue oai-nr-ue2 + - - Stop_Object - Stop nearRT-RIC - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - nearRT-RIC - + + Stop_Object + Stop OAI gNB + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-gnb + - - Undeploy_Object - Undeploy RAN and FlexRIC - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - true - + + Stop_Object + Stop nearRT-RIC + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + nearRT-RIC + - - Deploy_Object - Deploy RC monitoring - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-rc-moni - + + Undeploy_Object + Undeploy RAN and FlexRIC + localhost + ci-scripts/yaml_files/5g_rfsimulator_flexric + true + - - Deploy_Object - Deploy KPM monitoring - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-kpm-moni - + + Undeploy_Object + Undeploy Core Network + localhost + doc/tutorial_resources/oai-cn5g + true + - - Deploy_Object - Deploy KPM monitoring and RC control - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-kpm-rc - + + Clean_Test_Server_Images + Clean Test Images on Test Server + localhost + oai-gnb oai-nr-ue + true + - - Deploy_Object - Deploy custom SMs monitoring - localhost - ci-scripts/yaml_files/5g_rfsimulator_flexric - xapp-gtp-mac-rlc-pdcp-moni - + + Clean_Test_Server_Images + Clean Test Images on Test Server + localhost + oai-flexric + true + diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index 43d2072040..58199ab5d9 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -21,240 +21,238 @@ --> - rfsim-5gnr-tdd - Monolithic SA TDD gNB - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 000004 - 000005 - 000006 - 000007 - 000008 - 020001 - 020002 - 020003 - 020004 - 020105 - 444445 - 030001 - 030002 - 444444 - 333333 - 020005 - 444444 - 333333 - 020005 - 100001 - 222222 - - + rfsim-5gnr-tdd + Monolithic SA TDD gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue + - - Deploy_Object - Deploy OAI 5G gNB RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-gnb - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G NR-UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-nr-ue - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Deploy_Object - Deploy Second OAI 5G NR-UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-nr-ue2 - + + Deploy_Object + Deploy OAI 5G gNB RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-gnb + - - Deploy_Object - Deploy OAI 5G NR-UEs (#3, #4, #5) RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-nr-ue3 oai-nr-ue4 oai-nr-ue5 - + + Deploy_Object + Deploy OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue + - - Deploy_Object - Deploy OAI 5G NR-UEs (#6, #7, #8) RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-nr-ue6 oai-nr-ue7 oai-nr-ue8 - + + Deploy_Object + Deploy Second OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue2 + - - Deploy_Object - Deploy OAI 5G NR-UEs (#9, #10) RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-nr-ue9 oai-nr-ue10 - + + Deploy_Object + Deploy OAI 5G NR-UEs (#3, #4, #5) RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue3 oai-nr-ue4 oai-nr-ue5 + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 - localhost - + + Deploy_Object + Deploy OAI 5G NR-UEs (#6, #7, #8) RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue6 oai-nr-ue7 oai-nr-ue8 + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G NR-UEs (#9, #10) RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue9 oai-nr-ue10 + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 + localhost + - - Ping - Ping ext-dn from Second NR-UE - rfsim5g_ue2 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping Second NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue2 - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from both UEs - rfsim5g_ue rfsim5g_ue2 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from Second NR-UE + rfsim5g_ue2 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from all UEs - rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 -s 1016 - 5 - + + Ping + Ping Second NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue2 + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (DL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from all UEs + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 -s 1016 + 5 + - - Iperf - Iperf (UL/1Mbps/UDP)(20 sec) - -u -b 1M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Detach_UE + Detach OAI UE 3 to 10 + rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 + localhost + - - Attach_UE - Attach OAI UE 1 and 2 - rfsim5g_ue rfsim5g_ue2 - localhost - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Detach_UE - Detach OAI UE 1 and 2 - rfsim5g_ue rfsim5g_ue2 - localhost - + + Iperf + Iperf (UL/1Mbps/UDP)(20 sec) + -u -b 1M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Detach_UE - Detach OAI UE 3 to 10 - rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 - localhost - + + Detach_UE + Detach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + localhost + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator - 1,0,0,0 - 1,0,0,0 - + + Attach_UE + Attach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + localhost + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue - + + Ping + Ping ext-dn from both UEs + rfsim5g_ue rfsim5g_ue2 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + + + + Detach_UE + Detach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + localhost + + + + Attach_UE + Attach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + localhost + + + + Ping + Ping ext-dn from both UEs + rfsim5g_ue rfsim5g_ue2 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue + diff --git a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml index b8e01c7edc..1e7128a6e8 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml @@ -21,156 +21,250 @@ --> - rfsim-24prb-5gnr-tdd - Monolithic SA TDD gNB 24PRB - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 020001 - 020002 - 030001 - 030002 - 040002 - 000004 - 020001 - 040002 - 000004 - 020001 - 040002 - 000004 - 020001 - 040002 - 000004 - 020001 - 040002 - 000004 - 020001 - 040001 - 000004 - 020001 - 100001 - 222222 - - + rfsim-24prb-5gnr-tdd + Monolithic SA TDD gNB 24PRB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_24prb - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Deploy_Object - Deploy OAI 5G gNB+UE RFsim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_24prb - oai-gnb oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_24prb + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - IdleSleep - Sleep - 1 - + + Deploy_Object + Deploy OAI 5G gNB+UE RFsim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_24prb + oai-gnb oai-nr-ue + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i0.5 - 80 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i0.2 - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + - - Iperf - Iperf (DL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i0.2 + 5 + - - Iperf - Iperf (UL/1Mbps/UDP)(20 sec) - -u -b 1M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Force Msg3 C-RNTI RA - localhost - echo ciUE force_crnti_ra | ncat 192.168.71.150 8091 - + + Iperf + Iperf (UL/1Mbps/UDP)(20 sec) + -u -b 1M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Force RRC_IDLE (UE ID 0) - localhost - echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091 - + + Custom_Command + Force RRC_IDLE (UE ID 0) + localhost + echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_24prb - + + IdleSleep + Sleep + 1 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + + + + Custom_Command + Force RRC_IDLE (UE ID 0) + localhost + echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091 + + + + IdleSleep + Sleep + 1 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + + + + Custom_Command + Force RRC_IDLE (UE ID 0) + localhost + echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091 + + + + IdleSleep + Sleep + 1 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + + + + Custom_Command + Force RRC_IDLE (UE ID 0) + localhost + echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091 + + + + IdleSleep + Sleep + 1 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + + + + Custom_Command + Force RRC_IDLE (UE ID 0) + localhost + echo ciUE force_RRC_IDLE | ncat 192.168.71.150 8091 + + + + IdleSleep + Sleep + 1 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + + + + Custom_Command + Force Msg3 C-RNTI RA + localhost + echo ciUE force_crnti_ra | ncat 192.168.71.150 8091 + + + + IdleSleep + Sleep + 1 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 + 80 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_24prb + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml index 236106d966..06cb9b63db 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml @@ -21,120 +21,108 @@ --> - rfsim-5gnr-tdd-2x2 - Monolithic SA TDD 2x2 gNB - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 020001 - 020002 - 030001 - 030002 - 100001 - 222222 - - + rfsim-5gnr-tdd-2x2 + Monolithic SA TDD 2x2 gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_2x2 - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Deploy_Object - Deploy OAI 5G gNB+UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_2x2 - oai-gnb oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_2x2 + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G gNB+UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_2x2 + oai-gnb oai-nr-ue + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Iperf - Iperf (DL/10Mbps/UDP)(20 sec) - -u -b 10M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (UL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_2x2 - 1,0,0,0 - 1,0,0,0 - + + Iperf + Iperf (DL/10Mbps/UDP)(20 sec) + -u -b 10M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Iperf + Iperf (UL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_2x2 + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml index 4b695063e7..4fbb0f6f7e 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml @@ -21,120 +21,108 @@ --> - rfsim-5gnr-fdd-phytest - Monolithic FDD phytest gNB - wrench - - 111111 - 800813 - 004000 - 000010 - 000011 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + rfsim-5gnr-fdd-phytest + Monolithic FDD phytest gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Custom_Command - Clean-Up any residual volume - localhost - docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config -f - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G gNB RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest - oai-gnb - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G NR-UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest - oai-nr-ue - + + Custom_Command + Clean-Up any residual volume + localhost + docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config -f + - - Ping - Ping gNB from NR-UE - rfsim5g_ue - localhost - rfsim5g_gnb_nos1 - localhost - -c20 -i0.2 - 0 - + + Deploy_Object + Deploy OAI 5G gNB RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest + oai-gnb + - - Ping - Ping NR-UE from gNB - rfsim5g_gnb_nos1 - localhost - rfsim5g_ue - localhost - -c20 -i0.2 - 0 - + + Deploy_Object + Deploy OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest + oai-nr-ue + - - Iperf - Iperf (DL/30kbps/UDP)(20 sec) - -u -b 0.03M -t 20 -R -c 10.0.1.1 - rfsim5g_ue - localhost - rfsim5g_gnb_nos1 - localhost - 5 - 90 - + + Ping + Ping gNB from NR-UE + rfsim5g_ue + localhost + rfsim5g_gnb_nos1 + localhost + -c20 -i0.2 + 0 + - - Iperf - Iperf (UL/30kbps/UDP)(20 sec) - -u -b 0.03M -t 20 -c 10.0.1.1 - rfsim5g_ue - localhost - rfsim5g_gnb_nos1 - localhost - 5 - 90 - + + Ping + Ping NR-UE from gNB + rfsim5g_gnb_nos1 + localhost + rfsim5g_ue + localhost + -c20 -i0.2 + 0 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest - 10,100,100,100 - 10,100,100,100 - + + Iperf + Iperf (DL/30kbps/UDP)(20 sec) + -u -b 0.03M -t 20 -R -c 10.0.1.1 + rfsim5g_ue + localhost + rfsim5g_gnb_nos1 + localhost + 5 + 90 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Iperf + Iperf (UL/30kbps/UDP)(20 sec) + -u -b 0.03M -t 20 -c 10.0.1.1 + rfsim5g_ue + localhost + rfsim5g_gnb_nos1 + localhost + 5 + 90 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest + 10,100,100,100 + 10,100,100,100 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml index 224a64c757..5eab626ece 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml @@ -21,96 +21,84 @@ --> - rfsim-fr2-32prb-5gnr-tdd - Monolithic FR2 gNB - wrench - - 111111 - 800813 - 000000 - 000001 - 000013 - 020001 - 020002 - 100001 - 222222 - - + rfsim-fr2-32prb-5gnr-tdd + Monolithic FR2 gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Create_Workspace - Create new Workspace - localhost - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI gNB - localhost - ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Deploy_Object + Deploy OAI gNB + localhost + ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Deploy_Object - Deploy OAI NR-UE - localhost - ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb - oai-gnb oai-nr-ue - + + Deploy_Object + Deploy OAI NR-UE + localhost + ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb + oai-gnb oai-nr-ue + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i0.2 - 0 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.2 + 0 + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i0.2 - 0 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i0.2 + 0 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb - 10,0,0,0 - 10,0,0,0 - + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb + 10,0,0,0 + 10,0,0,0 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_multiue.xml b/ci-scripts/xml_files/container_5g_rfsim_multiue.xml index 8022741c6c..83bd857c4a 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_multiue.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_multiue.xml @@ -21,185 +21,156 @@ --> - rfsim-5gnr-tdd-multiue - Monolithic SA TDD gNB multiue - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 000008 - 020001 - 020002 - 020003 - 020004 - 020105 - 444445 - 030001 - 030002 - 444444 - 100001 - 222222 - - + rfsim-5gnr-tdd-multiue + Monolithic SA TDD gNB multiue + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_multiue - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue + - - Deploy_Object - Deploy OAI 5G gNB RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_multiue - oai-gnb - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G NR-UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_multiue - oai-nr-ue - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_multiue + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_multiue1 rfsim5g_multiue2 rfsim5g_multiue3 rfsim5g_multiue4 rfsim5g_multiue5 rfsim5g_multiue6 rfsim5g_multiue7 rfsim5g_multiue8 rfsim5g_multiue9 rfsim5g_multiue10 - localhost - + + Deploy_Object + Deploy OAI 5G gNB RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_multiue + oai-gnb + - - Ping - Ping ext-dn from NR-UE - rfsim5g_multiue1 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_multiue + oai-nr-ue + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_multiue1 - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_multiue1 rfsim5g_multiue2 rfsim5g_multiue3 rfsim5g_multiue4 rfsim5g_multiue5 rfsim5g_multiue6 rfsim5g_multiue7 rfsim5g_multiue8 rfsim5g_multiue9 rfsim5g_multiue10 + localhost + - - Ping - Ping ext-dn from Second NR-UE - rfsim5g_multiue2 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_multiue1 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping Second NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_multiue2 - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_multiue1 + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from both UEs - rfsim5g_multiue1 rfsim5g_multiue2 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from Second NR-UE + rfsim5g_multiue2 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from all UEs - rfsim5g_multiue1 rfsim5g_multiue2 rfsim5g_multiue3 rfsim5g_multiue4 rfsim5g_multiue5 rfsim5g_multiue6 rfsim5g_multiue7 rfsim5g_multiue8 rfsim5g_multiue9 rfsim5g_multiue10 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 -s 1016 - 5 - + + Ping + Ping Second NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_multiue2 + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (DL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_multiue1 - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from all UEs + rfsim5g_multiue1 rfsim5g_multiue2 rfsim5g_multiue3 rfsim5g_multiue4 rfsim5g_multiue5 rfsim5g_multiue6 rfsim5g_multiue7 rfsim5g_multiue8 rfsim5g_multiue9 rfsim5g_multiue10 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 -s 1016 + 5 + - - Iperf - Iperf (UL/1Mbps/UDP)(20 sec) - -u -b 1M -t 20 - rfsim5g_multiue1 - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_multiue1 + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Detach_UE - Detach OAI UEs - rfsim5g_multiue1 - localhost - + + Iperf + Iperf (UL/1Mbps/UDP)(20 sec) + -u -b 1M -t 20 + rfsim5g_multiue1 + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - ci-scripts/yaml_files/5g_rfsimulator_multiue - 1,0,0,0 - 1,0,0,0 - localhost - + + Detach_UE + Detach OAI UEs + rfsim5g_multiue1 + localhost + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue - + + Undeploy_Object + true + Undeploy all OAI 5G stack + ci-scripts/yaml_files/5g_rfsimulator_multiue + 1,0,0,0 + 1,0,0,0 + localhost + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue + diff --git a/ci-scripts/xml_files/container_5g_rfsim_n2_ho.xml b/ci-scripts/xml_files/container_5g_rfsim_n2_ho.xml index 37cab0ddb5..6a4d43f93a 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_n2_ho.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_n2_ho.xml @@ -21,179 +21,222 @@ --> - rfsim-5gnr-f1-n2-ho - F1 SA TDD N2 Handover - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 020001 - 000004 - 040001 - 050001 - 020001 - 020002 - 050002 - 030001 - 030002 - 050003 - 020001 - 020002 - 050004 - 050001 - 020001 - 020002 - 050002 - 100001 - 222222 - - + rfsim-5gnr-f1-n2-ho + F1 SA TDD N2 Handover + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan + - - Create_Workspace - Create new Workspace - localhost - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_n2_ho - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_n2_ho + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Deploy_Object - Deploy OAI 5G CU-CP/CU-UP/DU 0 + UE RFsim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_n2_ho - oai-cucp-0 oai-cuup-0 oai-du-0 oai-nr-ue - + + Deploy_Object + Deploy OAI 5G CU-CP/CU-UP/DU 0 + UE RFsim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_n2_ho + oai-cucp-0 oai-cuup-0 oai-du-0 oai-nr-ue + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Deploy_Object - Deploy OAI 5G CU-CP/CU-UP/DU 1 RFsim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_n2_ho - oai-cucp-1 oai-cuup-1 oai-du-1 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 50 -i 0.25 + 5 + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 50 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G CU-CP/CU-UP/DU 1 RFsim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_n2_ho + oai-cucp-1 oai-cuup-1 oai-du-1 + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 50 -i 0.25 - 10 - + + IdleSleep + Sleep + 5 + - - Iperf - Iperf (DL/10Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Custom_Command + Trigger N2 Handover + localhost + echo ci trigger_n2_ho 1,1 | ncat 192.168.71.150 9090 + yes + - - Iperf - Iperf (UL/4Mbps/UDP)(20 sec) - -u -b 1M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 50 -i 0.25 + 5 + - - IdleSleep - Sleep - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 50 -i 0.25 + 10 + - - Custom_Command - Trigger N2 Handover - localhost - echo ci trigger_n2_ho 1,1 | ncat 192.168.71.150 9090 - yes - + + Custom_Command + UE (1) connected to DU-PCI 1? + localhost + echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.180 9090 | grep "1234" + - - Custom_Command - UE (1) connected to DU-PCI 1? - localhost - echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.180 9090 | grep "1234" - + + Iperf + Iperf (DL/10Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Trigger N2 Handover - localhost - echo ci trigger_n2_ho 0,1 | ncat 192.168.71.180 9090 - yes - + + Iperf + Iperf (UL/4Mbps/UDP)(20 sec) + -u -b 1M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - UE (1) connected to DU-PCI 0? - localhost - echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584" - + + Custom_Command + Trigger N2 Handover + localhost + echo ci trigger_n2_ho 0,1 | ncat 192.168.71.180 9090 + yes + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_n2_ho - 10,100,100,100 - 10,100,100,100 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 50 -i 0.25 + 5 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 50 -i 0.25 + 10 + + + + Custom_Command + UE (1) connected to DU-PCI 0? + localhost + echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.150 9090 | grep "3584" + + + + Custom_Command + Trigger N2 Handover + localhost + echo ci trigger_n2_ho 1,1 | ncat 192.168.71.150 9090 + yes + + + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 50 -i 0.25 + 5 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 50 -i 0.25 + 10 + + + + Custom_Command + UE (1) connected to DU-PCI 1? + localhost + echo ci fetch_du_by_ue_id 1 | ncat 192.168.71.180 9090 | grep "1234" + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_n2_ho + 10,100,100,100 + 10,100,100,100 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml index 66f725ca53..7e291b86fb 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml @@ -21,125 +21,131 @@ --> - rfsim-5gnr-ntn-geo - Monolithic SA NTN GEO gNB - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 020001 - 020002 - 040001 - 020022 - 040002 - 020001 - 020002 - 100001 - 222222 - - + rfsim-5gnr-ntn-geo + Monolithic SA NTN GEO gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_ntn_geo - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G gNB+nrUE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_ntn_geo - oai-gnb oai-nr-ue - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_ntn_geo + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G gNB+nrUE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_ntn_geo + oai-gnb oai-nr-ue + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Custom_Command - Trigger Reestablishment - localhost - echo ci force_reestab | ncat 192.168.71.140 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - yes - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i0.5 -w25 - 80 - + + Custom_Command + Trigger Reestablishment + localhost + echo ci force_reestab | ncat 192.168.71.140 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' + yes + - - Custom_Command - Verify Reestablishment - localhost - echo ci get_reestab_count | ncat 192.168.71.140 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' - yes - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 -w25 + 80 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_ntn_geo - + + Custom_Command + Verify Reestablishment + localhost + echo ci get_reestab_count | ncat 192.168.71.140 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' + yes + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + + + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_ntn_geo + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml b/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml index f00e6b26f1..cac6f5f4ee 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml @@ -21,125 +21,131 @@ --> - rfsim-5gnr-ntn-Leo - Monolithic SA NTN LEO gNB - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 020001 - 020002 - 040001 - 020022 - 040002 - 020001 - 020002 - 100001 - 222222 - - + rfsim-5gnr-ntn-Leo + Monolithic SA NTN LEO gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_ntn_leo - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G gNB+nrUE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_ntn_leo - oai-gnb oai-nr-ue - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_ntn_leo + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G gNB+nrUE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_ntn_leo + oai-gnb oai-nr-ue + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Custom_Command - Trigger Reestablishment - localhost - echo ci force_reestab | ncat 192.168.71.140 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - yes - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i0.5 -w25 - 80 - + + Custom_Command + Trigger Reestablishment + localhost + echo ci force_reestab | ncat 192.168.71.140 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' + yes + - - Custom_Command - Verify Reestablishment - localhost - echo ci get_reestab_count | ncat 192.168.71.140 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' - yes - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i0.5 -w25 + 80 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_ntn_leo - + + Custom_Command + Verify Reestablishment + localhost + echo ci get_reestab_count | ncat 192.168.71.140 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' + yes + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + + + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_ntn_leo + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_prs.xml b/ci-scripts/xml_files/container_5g_rfsim_prs.xml index bbc287ff76..2485e7d503 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_prs.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_prs.xml @@ -21,80 +21,69 @@ --> - rfsim-5gnr-prs - Monolithic gNB with PRS - wrench - - 111111 - 800813 - 000012 - 000013 - 040001 - 040023 - 100011 - 222222 - - + rfsim-5gnr-prs + Monolithic gNB with PRS + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Create_Workspace - Create new Workspace - localhost - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G gNB+UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_prs - oai-gnb oai-nr-ue - + + Deploy_Object + Deploy OAI 5G gNB+UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_prs + oai-gnb oai-nr-ue + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - IdleSleep - Sleep - 2 - + + IdleSleep + Sleep + 2 + - - Custom_Script - true - Set and verify distance at 50, 100, 150 m - localhost - - 50 100 150 - + + Custom_Script + true + Set and verify distance at 50, 100, 150 m + localhost + + 50 100 150 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_prs - 30,100,100,100 - 30,100,100,100 - + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_prs + 30,100,100,100 + 30,100,100,100 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml index 6ddd6d13b7..f434bb600c 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml @@ -21,79 +21,68 @@ --> - rfsim-5gnr-sidelink - Sidelink test - wrench - - 111111 - 800813 - 000002 - 000003 - 000004 - 000005 - 100001 - 222222 - - + rfsim-5gnr-sidelink + Sidelink test + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-nr-ue-asan + - - Create_Workspace - Create new Workspace - localhost - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI 5G UE 1 - localhost - ci-scripts/yaml_files/5g_rfsimulator_sidelink - oai-nr-ue-1 - - - - Deploy_Object - Deploy OAI 5G UE 2 - localhost - ci-scripts/yaml_files/5g_rfsimulator_sidelink - oai-nr-ue-2 - + + Deploy_Object + Deploy OAI 5G UE 1 + localhost + ci-scripts/yaml_files/5g_rfsimulator_sidelink + oai-nr-ue-1 + - - IdleSleep - Sleep - 20 - + + Deploy_Object + Deploy OAI 5G UE 2 + localhost + ci-scripts/yaml_files/5g_rfsimulator_sidelink + oai-nr-ue-2 + - - Custom_Command - Check that UE synched - localhost - docker logs rfsim5g-oai-nr-ue-2 | grep -m 1 "PSBCH RX:OK" - + + IdleSleep + Sleep + 20 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_sidelink - 1,0,0,0 - 1,0,0,0 - + + Custom_Command + Check that UE synched + localhost + docker logs rfsim5g-oai-nr-ue-2 | grep -m 1 "PSBCH RX:OK" + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-nr-ue-asan - + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_sidelink + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_simple.xml b/ci-scripts/xml_files/container_5g_rfsim_simple.xml index 3dd5a560e0..be4912d2b2 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_simple.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_simple.xml @@ -21,77 +21,67 @@ --> - rfsim-5gnr-tdd - Monolithic SA TDD gNB - wrench - - 000001 - 000002 - 000003 - 000008 - 020001 - 444444 - 100001 - - + rfsim-5gnr-tdd + Monolithic SA TDD gNB + wrench - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Deploy_Object - Deploy OAI 5G gNB RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-gnb - + + Deploy_Object + Deploy OAI 5G gNB RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-gnb + - - Deploy_Object - Deploy OAI 5G NR-UE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator - oai-nr-ue - + + Deploy_Object + Deploy OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Detach_UE - Detach OAI UE 1 - rfsim5g_ue - localhost - + + Detach_UE + Detach OAI UE 1 + rfsim5g_ue + localhost + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator - 1,0,0,0 - 1,0,0,0 - + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator + 1,0,0,0 + 1,0,0,0 + diff --git a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml index 6a09b8138d..83209d664e 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml @@ -21,102 +21,97 @@ --> - rfsim-tdd-dora-5gnr-tdd - Monolithic do-ra TDD gNB - wrench - - 111111 - 800813 - 004000 - 000000 - 000001 - 000030 - 020001 - 020002 - 100001 - 004000 - 222222 - - + rfsim-tdd-dora-5gnr-tdd + Monolithic do-ra TDD gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Custom_Command - Clean-Up any residual volume - localhost - docker volume rm 5g_rfsimulator_tdd_dora_rrc.config -f - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI gNB - localhost - ci-scripts/yaml_files/5g_rfsimulator_tdd_dora - oai-gnb - + + Create_Workspace + Create new Workspace + localhost + - - Deploy_Object - Deploy OAI NR-UE - localhost - ci-scripts/yaml_files/5g_rfsimulator_tdd_dora - oai-nr-ue - + + Custom_Command + Clean-Up any residual volume + localhost + docker volume rm 5g_rfsimulator_tdd_dora_rrc.config -f + - - IdleSleep - Sleep - 5 - + + Deploy_Object + Deploy OAI gNB + localhost + ci-scripts/yaml_files/5g_rfsimulator_tdd_dora + oai-gnb + - - Ping - Ping gNB from NR-UE - rfsim5g_ue - localhost - rfsim5g_gnb_nos1 - localhost - -c20 -i0.2 - 0 - + + Deploy_Object + Deploy OAI NR-UE + localhost + ci-scripts/yaml_files/5g_rfsimulator_tdd_dora + oai-nr-ue + - - Ping - Ping NR-UE from gNB - rfsim5g_gnb_nos1 - localhost - rfsim5g_ue - localhost - -c20 -i0.2 - 0 - + + IdleSleep + Sleep + 5 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_tdd_dora - 0,0,0,0 - 0,0,0,0 - + + Ping + Ping gNB from NR-UE + rfsim5g_ue + localhost + rfsim5g_gnb_nos1 + localhost + -c20 -i0.2 + 0 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Ping + Ping NR-UE from gNB + rfsim5g_gnb_nos1 + localhost + rfsim5g_ue + localhost + -c20 -i0.2 + 0 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_tdd_dora + 0,0,0,0 + 0,0,0,0 + + + + Custom_Command + Clean-Up any residual volume + localhost + docker volume rm 5g_rfsimulator_tdd_dora_rrc.config -f + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml index 3bb99de4ab..060f539cde 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml @@ -21,166 +21,169 @@ --> - rfsim-5gnr-fdd-u0-25prb - VNF-PNF nFAPI FDD u0 25PRB gNB - wrench - - 111111 - 800813 - 000001 - 000002 - 000003 - 020001 - 020002 - 000004 - 020003 - 030001 - 030002 - 050001 - 050002 - 050003 - 020001 - 020002 - 100001 - 222222 - - + rfsim-5gnr-fdd-u0-25prb + VNF-PNF nFAPI FDD u0 25PRB gNB + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb-asan oai-nr-ue-asan - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_rfsimulator_u0_25prb - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb-asan oai-nr-ue-asan + - - Deploy_Object - Deploy OAI 5G VNF+PNF+nrUE RF sim SA - localhost - ci-scripts/yaml_files/5g_rfsimulator_u0_25prb - oai-vnf oai-pnf oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator_u0_25prb + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G VNF+PNF+nrUE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator_u0_25prb + oai-vnf oai-pnf oai-nr-ue + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Attach_UE - Verify 2nd PDU session is up - rfsim5g_ue_pdu_2 - localhost - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Ping - Ping ext-dn from NR-UE on PDU session ID 2 - rfsim5g_ue_pdu_2 - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (DL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Attach_UE + Verify 2nd PDU session is up + rfsim5g_ue_pdu_2 + localhost + - - Iperf - Iperf (UL/1Mbps/UDP)(20 sec) - -u -b 1M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from NR-UE on PDU session ID 2 + rfsim5g_ue_pdu_2 + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Custom_Command - Trigger PDU Session Release via gNB telnet - acamas - echo ci pdu_session_release 2 | ncat 192.168.71.140 9090 - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Add PDU Session via UE telnet - acamas - echo ci add_pdu_session 6,7 | ncat 192.168.71.150 8091 - + + Iperf + Iperf (UL/1Mbps/UDP)(20 sec) + -u -b 1M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Custom_Command - Trigger PDU Session Release via gNB telnet - acamas - echo ci pdu_session_release 6 | ncat 192.168.71.140 9090 - + + Custom_Command + Trigger PDU Session Release via gNB telnet + acamas + echo ci pdu_session_release 2 | ncat 192.168.71.140 9090 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_rfsimulator_u0_25prb - 1,0,0,0 - 1,0,0,0 - + + Custom_Command + Add PDU Session via UE telnet + acamas + echo ci add_pdu_session 6,7 | ncat 192.168.71.150 8091 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb-asan oai-nr-ue-asan - + + Custom_Command + Trigger PDU Session Release via gNB telnet + acamas + echo ci pdu_session_release 6 | ncat 192.168.71.140 9090 + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + + + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator_u0_25prb + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb-asan oai-nr-ue-asan + diff --git a/ci-scripts/xml_files/container_5g_vrtsim_chanmod.xml b/ci-scripts/xml_files/container_5g_vrtsim_chanmod.xml index 6bd16eff1f..c844228640 100644 --- a/ci-scripts/xml_files/container_5g_vrtsim_chanmod.xml +++ b/ci-scripts/xml_files/container_5g_vrtsim_chanmod.xml @@ -21,120 +21,108 @@ --> - vrtsim-5gnr-chanmod - Monolithic gNB vrtsim + chanmod - wrench - - 111111 - 800813 - 000011 - 000012 - 000013 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + vrtsim-5gnr-chanmod + Monolithic gNB vrtsim + chanmod + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb oai-nr-ue - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_vrtsim_chanmod - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb oai-nr-ue + - - Deploy_Object - Deploy OAI 5G gNB+UE RF sim SA - localhost - ci-scripts/yaml_files/5g_vrtsim_chanmod - oai-gnb oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_vrtsim_chanmod + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G gNB+UE RF sim SA + localhost + ci-scripts/yaml_files/5g_vrtsim_chanmod + oai-gnb oai-nr-ue + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Iperf - Iperf (DL/3Mbps/UDP)(20 sec) - -u -b 3M -t 20 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (UL/1Mbps/UDP)(20 sec) - -u -b 1M -t 20 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_vrtsim_chanmod - 1,0,0,0 - 1,0,0,0 - + + Iperf + Iperf (DL/3Mbps/UDP)(20 sec) + -u -b 3M -t 20 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb oai-nr-ue - + + Iperf + Iperf (UL/1Mbps/UDP)(20 sec) + -u -b 1M -t 20 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_vrtsim_chanmod + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb oai-nr-ue + diff --git a/ci-scripts/xml_files/container_5g_vrtsim_chanmod_gh.xml b/ci-scripts/xml_files/container_5g_vrtsim_chanmod_gh.xml index 3d3fd6ee59..3d3a9a5e41 100644 --- a/ci-scripts/xml_files/container_5g_vrtsim_chanmod_gh.xml +++ b/ci-scripts/xml_files/container_5g_vrtsim_chanmod_gh.xml @@ -21,121 +21,109 @@ --> - vrtsim-5gnr-chanmod-gh - Monolithic gNB vrtsim + chanmod - wrench - - 111111 - 800813 - 000011 - 000012 - 000013 - 020011 - 020012 - 030011 - 030012 - 100011 - 222222 - - + vrtsim-5gnr-chanmod-gh + Monolithic gNB vrtsim + chanmod + wrench - - Pull_Local_Registry - Pull Images from Local Registry - localhost - oai-gnb oai-nr-ue - arm_ - - - Create_Workspace - Create new Workspace - localhost - - - Deploy_Object - Deploy OAI 5G CoreNetwork - localhost - ci-scripts/yaml_files/5g_vrtsim_chanmod - mysql oai-amf oai-smf oai-upf oai-ext-dn - + + Pull_Local_Registry + Pull Images from Local Registry + localhost + oai-gnb oai-nr-ue + arm_ + - - Deploy_Object - Deploy OAI 5G gNB+UE RF sim SA - localhost - ci-scripts/yaml_files/5g_vrtsim_chanmod - oai-gnb oai-nr-ue - + + Create_Workspace + Create new Workspace + localhost + - - Attach_UE - Attach OAI UE (Wait for IP) - rfsim5g_ue - localhost - + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_vrtsim_chanmod + mysql oai-amf oai-smf oai-upf oai-ext-dn + - - Ping - Ping ext-dn from NR-UE - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - -c 20 -i 0.25 - 5 - + + Deploy_Object + Deploy OAI 5G gNB+UE RF sim SA + localhost + ci-scripts/yaml_files/5g_vrtsim_chanmod + oai-gnb oai-nr-ue + - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - localhost - rfsim5g_ue - localhost - -c 20 -i 0.25 - 5 - + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + - - Iperf - Iperf (DL/3Mbps/UDP)(30 sec) - -u -b 3M -t 30 -R - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + - - Iperf - Iperf (UL/1Mbps/UDP)(30 sec) - -u -b 1M -t 30 - rfsim5g_ue - localhost - rfsim5g_ext_dn - localhost - 5 - 90 - + + Ping + Ping NR-UE from ext-dn + rfsim5g_ext_dn + localhost + rfsim5g_ue + localhost + -c 20 -i 0.25 + 5 + - - Undeploy_Object - true - Undeploy all OAI 5G stack - localhost - ci-scripts/yaml_files/5g_vrtsim_chanmod - 1,0,0,0 - 1,0,0,0 - + + Iperf + Iperf (DL/3Mbps/UDP)(30 sec) + -u -b 3M -t 30 -R + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - localhost - oai-gnb oai-nr-ue - + + Iperf + Iperf (UL/1Mbps/UDP)(30 sec) + -u -b 1M -t 30 + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + 5 + 90 + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_vrtsim_chanmod + 1,0,0,0 + 1,0,0,0 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + localhost + oai-gnb oai-nr-ue + diff --git a/ci-scripts/xml_files/container_build_run_tests.xml b/ci-scripts/xml_files/container_build_run_tests.xml index 087c5af598..85e0cd53da 100644 --- a/ci-scripts/xml_files/container_build_run_tests.xml +++ b/ci-scripts/xml_files/container_build_run_tests.xml @@ -21,19 +21,15 @@ --> - build-run-test-tab - Build and Run Unit Tests - wrench - - 030201 - - + build-run-test-tab + Build and Run Unit Tests + wrench - - Build_Run_Tests - Build and Run UnitTests - obelix - all - + + Build_Run_Tests + Build and Run UnitTests + obelix + all + diff --git a/ci-scripts/xml_files/container_image_build.xml b/ci-scripts/xml_files/container_image_build.xml index afd58d4d6d..85966f0214 100644 --- a/ci-scripts/xml_files/container_image_build.xml +++ b/ci-scripts/xml_files/container_image_build.xml @@ -21,32 +21,27 @@ --> - build-tab - Build Container Images - wrench - - 800813 - 000001 - 000010 - - + build-tab + Build Container Images + wrench - - Create_Workspace - Create new Workspace for server 0 - obelix - - - Build_Image - Build all Images - obelix - all - + + Create_Workspace + Create new Workspace for server 0 + obelix + - - Push_Local_Registry - Push Images to Local Registry - obelix - + + Build_Image + Build all Images + obelix + all + + + + Push_Local_Registry + Push Images to Local Registry + obelix + diff --git a/ci-scripts/xml_files/container_image_build_arm.xml b/ci-scripts/xml_files/container_image_build_arm.xml index f5daa348aa..1d83101fdd 100644 --- a/ci-scripts/xml_files/container_image_build_arm.xml +++ b/ci-scripts/xml_files/container_image_build_arm.xml @@ -21,33 +21,28 @@ --> - build-tab - Build Container Images for ARM - wrench - - 800813 - 000001 - 000010 - - + build-tab + Build Container Images for ARM + wrench - - Create_Workspace - Create new Workspace for server 0 - gracehopper3-oai - - - Build_Image - Build all Images - gracehopper3-oai - native_armv9 - + + Create_Workspace + Create new Workspace for server 0 + gracehopper3-oai + - - Push_Local_Registry - Push Images to Local Registry - gracehopper3-oai - arm_ - + + Build_Image + Build all Images + gracehopper3-oai + native_armv9 + + + + Push_Local_Registry + Push Images to Local Registry + gracehopper3-oai + arm_ + diff --git a/ci-scripts/xml_files/container_image_build_cross.xml b/ci-scripts/xml_files/container_image_build_cross.xml index ab94d847c8..592d097a73 100644 --- a/ci-scripts/xml_files/container_image_build_cross.xml +++ b/ci-scripts/xml_files/container_image_build_cross.xml @@ -21,24 +21,21 @@ --> - build-tab - Build Container Images - wrench - - 100001 - 000001 - - - - Create_Workspace - Create new Workspace - alambix - - - Build_Image - Cross-Compile for ARM64 - build_cross_arm64 - alambix - + build-tab + Build Container Images + wrench + + + Create_Workspace + Create new Workspace + alambix + + + + Build_Image + Cross-Compile for ARM64 + build_cross_arm64 + alambix + diff --git a/ci-scripts/xml_files/container_image_build_jetson.xml b/ci-scripts/xml_files/container_image_build_jetson.xml index 3cdac5efcb..7b77a77277 100644 --- a/ci-scripts/xml_files/container_image_build_jetson.xml +++ b/ci-scripts/xml_files/container_image_build_jetson.xml @@ -21,33 +21,28 @@ --> - build-tab - Build Container Images for ARM - wrench - - 800813 - 000001 - 000010 - - + build-tab + Build Container Images for ARM + wrench - - Create_Workspace - Create new Workspace for server 0 - jetson3-oai - - - Build_Image - Build all Images - jetson3-oai - native_armv8 - + + Create_Workspace + Create new Workspace for server 0 + jetson3-oai + - - Push_Local_Registry - Push Images to Local Registry - jetson3-oai - armv8_ - + + Build_Image + Build all Images + jetson3-oai + native_armv8 + + + + Push_Local_Registry + Push Images to Local Registry + jetson3-oai + armv8_ + diff --git a/ci-scripts/xml_files/container_l2sim_proxy.xml b/ci-scripts/xml_files/container_l2sim_proxy.xml index c2f19f9471..4f1cea9263 100644 --- a/ci-scripts/xml_files/container_l2sim_proxy.xml +++ b/ci-scripts/xml_files/container_l2sim_proxy.xml @@ -21,19 +21,15 @@ --> - l2sim-4glte-5gnr-proxy-build - Build L2sim proxy image - wrench - - 000001 - - + l2sim-4glte-5gnr-proxy-build + Build L2sim proxy image + wrench - - Build_Proxy - Build L2sim Proxy Image - localhost - b64d9bce986b38ca59e8582864ade3fcdd05c0dc - + + Build_Proxy + Build L2sim Proxy Image + localhost + b64d9bce986b38ca59e8582864ade3fcdd05c0dc + diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml index 10ab1fd3b0..614acee309 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml @@ -23,195 +23,182 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml --> - test-fdd-05-tm1 - Test-FDD-05MHz-TM1 - tasks - -100000 -111110 -300000 -040101 -800813 -030101 -040301 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 -030201 -200000 -222222 - - + test-fdd-05-tm1 + Test-FDD-05MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - + + Custom_Command + Disable Sleep States + hutch + sudo cpupower idle-set -D 0 + - - Custom_Command - Disable Sleep States - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - hutch - sudo cpupower idle-set -E - - - Custom_Command - Reset USRP - hutch - sudo -S b2xx_fx3_utils --reset-device - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy eNB (FDD/Band7/5MHz/B200) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1 - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - IdleSleep - Sleep - 5 - + + Custom_Command + Reset USRP + hutch + sudo -S b2xx_fx3_utils --reset-device + - - Undeploy_Object - true - Undeploy eNB - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UEs - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UEs - adb_ue_1 adb_ue_2 - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - Ping - ping (5MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy eNB (FDD/Band7/5MHz/B200) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1 + - - Iperf - iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile) - -u -b 15M -t 30 -R - 50 - 50 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UEs + adb_ue_1 adb_ue_2 + - - Iperf - iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile) - -u -b 15M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Ping + ping (5MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile) - -u -b 15M -t 30 -R - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile) + -u -b 15M -t 30 -R + 50 + 50 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile) + -u -b 15M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - DL/TCP)(30 sec)(balanced profile) - -t 30 -R - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile) + -u -b 15M -t 30 -R + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile) - -u -b 9M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) + -t 30 -R + adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile) - -u -b 9M -t 30 - 50 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec)(balanced profile) + -t 30 -R + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec)(single-ue profile) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile) + -u -b 9M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec)(balanced profile) - -t 30 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile) + -u -b 9M -t 30 + 50 + 50 + adb_ue_1 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - hutch - oai-enb - + + Iperf + iperf (5MHz - UL/TCP)(30 sec)(single-ue profile) + -t 30 + adb_ue_1 + ltebox-nano + + + + Iperf + iperf (5MHz - UL/TCP)(30 sec)(balanced profile) + -t 30 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UEs + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1 + + + + Custom_Command + true + Enable Sleep States + hutch + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + hutch + oai-enb + - diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml index ebc59e746d..243243658b 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml @@ -21,178 +21,166 @@ --> - test-fdd-05-tm1-if4-5 - Test-FDD-05MHz-TM1-IF4.5 - tasks - -100000 -111110 -300000 -040101 -800813 -030131 -030132 -040301 040531 040633 040634 040636 040671 040672 040673 040401 040201 -030231 -200000 -222222 - - + test-fdd-05-tm1-if4-5 + Test-FDD-05MHz-TM1-IF4.5 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - + + Custom_Command + Disable Sleep States + hutch + sudo cpupower idle-set -D 0 + - - Custom_Command - Disable Sleep States - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - hutch - sudo cpupower idle-set -E - - - Custom_Command - Reset USRP - hutch - sudo -S b2xx_fx3_utils --reset-device - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy RRU (FDD/Band7/5MHz/B200) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 - rru_fdd - - - Deploy_Object - Deploy RCC (FDD/Band7/5MHz) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 - rcc_fdd - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - IdleSleep - Sleep - 5 - + + Custom_Command + Reset USRP + hutch + sudo -S b2xx_fx3_utils --reset-device + - - Undeploy_Object - true - Undeploy RCC/RRU - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UEs - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UEs - adb_ue_1 adb_ue_2 - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - Ping - ping (5MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy RRU (FDD/Band7/5MHz/B200) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 + rru_fdd + - - Iperf - iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile) - -u -b 15M -t 30 -R - 50 - 50 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy RCC (FDD/Band7/5MHz) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 + rcc_fdd + - - Iperf - iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile) - -u -b 15M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Attach_UE + Attach UEs + adb_ue_1 adb_ue_2 + - - Iperf - iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - adb_ue_2 - ltebox-nano - + + Ping + ping (5MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile) - -u -b 9M -t 30 - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile) + -u -b 15M -t 30 -R + 50 + 50 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile) - -u -b 9M -t 30 - 50 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile) + -u -b 15M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec)(single-ue profile) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) + -t 30 -R + adb_ue_2 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - hutch - oai-enb - + + Iperf + iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile) + -u -b 9M -t 30 + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Iperf + iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile) + -u -b 9M -t 30 + 50 + 50 + adb_ue_1 + ltebox-nano + + + + Iperf + iperf (5MHz - UL/TCP)(30 sec)(single-ue profile) + -t 30 + adb_ue_1 + ltebox-nano + + + + Detach_UE + true + Detach UEs + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy RCC/RRU + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 + + + + Custom_Command + true + Enable Sleep States + hutch + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + hutch + oai-enb + diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml index 8936a3928e..bd7400cb13 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml @@ -23,161 +23,155 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm --> - test-fdd-05-rrc-inactivity - Test-FDD-05MHz-TM1-RRC-Inactivity - tasks - -100000 -111110 -040101 -800813 -030102 -000010 040301 040502 000011 040302 000001 000012 040303 000002 000013 040503 040401 040201 -030202 -200000 -222222 - - + test-fdd-05-rrc-inactivity + Test-FDD-05MHz-TM1-RRC-Inactivity + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - - - Custom_Command - Disable Sleep States - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - hutch - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy eNB (FDD/Band7/5MHz/B200) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1_no_rrc_activity - + + Custom_Command + Disable Sleep States + hutch + sudo cpupower idle-set -D 0 + - - Undeploy_Object - true - Undeploy eNB - hutch - ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1_no_rrc_activity - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - IdleSleep - Waiting for 55 seconds - 55 - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - IdleSleep - Waiting for 10 seconds - 10 - + + Deploy_Object + Deploy eNB (FDD/Band7/5MHz/B200) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1_no_rrc_activity + - - CheckStatusUE - Check UE(s) status before attachment - 0 - adb_ue_1 adb_ue_2 - + + CheckStatusUE + Check UE(s) status before attachment + 0 + adb_ue_1 adb_ue_2 + - - CheckStatusUE - Check UE(s) status before data disabling - 2 - adb_ue_1 adb_ue_2 - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - CheckStatusUE - Check UE(s) status after data disabling - 0 - adb_ue_1 adb_ue_2 - + + Ping + ping (5MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + - - CheckStatusUE - Check UE(s) status after data re-enabling - 2 - adb_ue_1 adb_ue_2 - + + CheckStatusUE + Check UE(s) status before data disabling + 2 + adb_ue_1 adb_ue_2 + - - DataDisable_UE - Disabling Data Service on UE - adb_ue_1 adb_ue_2 - + + DataDisable_UE + Disabling Data Service on UE + adb_ue_1 adb_ue_2 + - - DataEnable_UE - Enabling Data Service on UE - adb_ue_1 adb_ue_2 - + + IdleSleep + Waiting for 55 seconds + 55 + - - Ping - ping (5MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + CheckStatusUE + Check UE(s) status after data disabling + 0 + adb_ue_1 adb_ue_2 + - - Ping - ping (5MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + DataEnable_UE + Enabling Data Service on UE + adb_ue_1 adb_ue_2 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - hutch - oai-enb - + + IdleSleep + Waiting for 10 seconds + 10 + + + + CheckStatusUE + Check UE(s) status after data re-enabling + 2 + adb_ue_1 adb_ue_2 + + + + Ping + ping (5MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + hutch + ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1_no_rrc_activity + + + + Custom_Command + true + Enable Sleep States + hutch + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + hutch + oai-enb + - diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml index 1456418475..92f4376676 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml @@ -24,189 +24,166 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml 040301 040511 040613 040614 040615 040616 040617 040651 040652 040653 040654 040401 040201 --> - test-fdd-10-tm1 - Test-FDD-10MHz-TM1 - tasks - -100000 -111110 -040101 -800813 -030111 -000001 -040301 040511 040613 040614 040615 040651 040652 040653 040654 040401 040201 -030211 -200000 -222222 - - + test-fdd-10-tm1 + Test-FDD-10MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - - - Custom_Command - Disable Sleep States - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - hutch - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy eNB (FDD/Band7/10MHz/B200) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1 - + + Custom_Command + Disable Sleep States + hutch + sudo cpupower idle-set -D 0 + - - IdleSleep - Sleep - 5 - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - Undeploy_Object - true - Undeploy eNB - hutch - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - Ping - ping (10MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy eNB (FDD/Band7/10MHz/B200) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1 + - - Iperf - iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile) - -u -b 30M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + IdleSleep + Sleep + 5 + - - Iperf - iperf (10MHz - DL/30Mbps/UDP)(30 sec)(single-ue profile) - -u -b 30M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (10MHz - DL/30Mbps/UDP)(30 sec)(unbalanced profile) - -u -b 30M -t 30 -R - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Ping + ping (10MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile) + -u -b 30M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - DL/TCP)(30 sec)(balanced profile) - -t 30 -R - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - DL/30Mbps/UDP)(30 sec)(single-ue profile) + -u -b 30M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (10MHz - UL/18Mbps/UDP)(30 sec)(balanced profile) - -u -b 18M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - DL/30Mbps/UDP)(30 sec)(unbalanced profile) + -u -b 30M -t 30 -R + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - UL/18Mbps/UDP)(30 sec)(single-ue profile) - -u -b 18M -t 30 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (10MHz - UL/18Mbps/UDP)(30 sec)(balanced profile) + -u -b 18M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - UL/TCP)(30 sec)(single-ue profile) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (10MHz - UL/18Mbps/UDP)(30 sec)(single-ue profile) + -u -b 18M -t 30 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (10MHz - UL/TCP)(30 sec)(balanced profile) - -t 30 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - UL/TCP)(30 sec)(single-ue profile) + -t 30 + adb_ue_1 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - hutch - oai-enb - + + Iperf + iperf (10MHz - UL/TCP)(30 sec)(balanced profile) + -t 30 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + hutch + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1 + + + + Custom_Command + true + Enable Sleep States + hutch + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + hutch + oai-enb + - diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml index aafcdff6ea..5e3b64e01b 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml @@ -23,122 +23,115 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml --> - test-fdd-10-cdrx-tm1 - Test-FDD-10MHz-CDRX-TM1 - tasks - -100000 -111110 -040101 -800813 -030112 -040301 040302 040512 040612 040650 040401 -040201 -030212 -200000 -222222 - - + test-fdd-10-cdrx-tm1 + Test-FDD-10MHz-CDRX-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - - - Custom_Command - Disable Sleep States - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - hutch - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy eNB (FDD/Band7/10MHz/B200) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_cdrx - + + Custom_Command + Disable Sleep States + hutch + sudo cpupower idle-set -D 0 + - - Undeploy_Object - true - Undeploy eNB - hutch - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_cdrx - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Ping - ping (10MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - Iperf - iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile) - -u -b 30M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy eNB (FDD/Band7/10MHz/B200) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_cdrx + - - Iperf - iperf (10MHz - UL/20Mbps/UDP)(30 sec)(balanced profile) - -u -b 20M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - hutch - oai-enb - + + Ping + ping (10MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Iperf + iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile) + -u -b 30M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Iperf + iperf (10MHz - UL/20Mbps/UDP)(30 sec)(balanced profile) + -u -b 20M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + hutch + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_cdrx + + + + Custom_Command + true + Enable Sleep States + hutch + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + hutch + oai-enb + - diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml index f50330ab89..5133c17f14 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml @@ -21,180 +21,164 @@ --> - test-fdd-10-tm1 - Test-FDD-10MHz-TM1 - tasks - -100000 -100001 -111110 -111111 -800813 -030111 -000001 -800814 -030311 -000002 -040511 040613 040616 040651 -030411 -000001 -030211 -200000 -200001 -222222 -333333 - - + test-fdd-10-tm1 + Test-FDD-10MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - - - Pull_Local_Registry - Pull Images from Local Registry - carabe - oai-lte-ue - - - Custom_Command - Disable Sleep States (hutch) - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - Disable Sleep States (carabe) - carabe - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States (hutch) - hutch - sudo cpupower idle-set -E - - - Custom_Command - true - Enable Sleep States (carabe) - carabe - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy eNB (FDD/Band7/10MHz/B200) in a container - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma - hutch - - - Create_Workspace - Create new Workspace for server 1 - carabe - - - Deploy_Object - Deploy LTE-UE (FDD/Band7/10MHz/B200) in a container - carabe - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma - + + Custom_Command + Disable Sleep States (hutch) + hutch + sudo cpupower idle-set -D 0 + - - IdleSleep - Sleep - 5 - + + Custom_Command + Disable Sleep States (carabe) + carabe + sudo cpupower idle-set -D 0 + - - IdleSleep - Sleep - 10 - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - Undeploy_Object - true - Undeploy eNB - hutch - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma - + + Pull_Local_Registry + Pull Images from Local Registry + carabe + oai-lte-ue + - - Undeploy_Object - true - Undeploy LTE-UE - carabe - ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - Ping - ping (10MHz - 20 sec) - -c 20 - 5 - lte_oai_ue_carabe - nano-cn4g - + + Deploy_Object + Deploy eNB (FDD/Band7/10MHz/B200) in a container + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma + hutch + - - Iperf - iperf (10MHz - DL/10Mbps/UDP)(30 sec)(balanced profile) - -u -b 10M -t 30 -R - 50 - lte_oai_ue_carabe - nano-cn4g - + + IdleSleep + Sleep + 5 + - - Iperf - iperf (10MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - 50 - lte_oai_ue_carabe - nano-cn4g - + + Create_Workspace + Create new Workspace for server 1 + carabe + - - Iperf - iperf (10MHz - UL/10Mbps/UDP)(30 sec)(balanced profile) - -u -b 10M -t 30 - 50 - lte_oai_ue_carabe - nano-cn4g - + + Deploy_Object + Deploy LTE-UE (FDD/Band7/10MHz/B200) in a container + carabe + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma + - - Iperf - iperf (10MHz - UL/TCP)(30 sec)(balanced profile) - -t 30 - 50 - balanced - lte_oai_ue_carabe - nano-cn4g - + + IdleSleep + Sleep + 10 + - - Clean_Test_Server_Images - true - Clean Test Images on eNB Test Server - hutch - oai-enb - + + Ping + ping (10MHz - 20 sec) + -c 20 + 5 + lte_oai_ue_carabe + nano-cn4g + - - Clean_Test_Server_Images - true - Clean Test Images on LTE-UE Test Server - carabe - oai-lte-ue - + + Iperf + iperf (10MHz - DL/10Mbps/UDP)(30 sec)(balanced profile) + -u -b 10M -t 30 -R + 50 + lte_oai_ue_carabe + nano-cn4g + + + + Iperf + iperf (10MHz - DL/TCP)(30 sec)(single-ue profile) + -t 30 -R + 50 + lte_oai_ue_carabe + nano-cn4g + + + + Iperf + iperf (10MHz - UL/10Mbps/UDP)(30 sec)(balanced profile) + -u -b 10M -t 30 + 50 + lte_oai_ue_carabe + nano-cn4g + + + + Undeploy_Object + true + Undeploy LTE-UE + carabe + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma + + + + IdleSleep + Sleep + 5 + + + + Undeploy_Object + true + Undeploy eNB + hutch + ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma + + + + Custom_Command + true + Enable Sleep States (hutch) + hutch + sudo cpupower idle-set -E + + + + Custom_Command + true + Enable Sleep States (carabe) + carabe + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on eNB Test Server + hutch + oai-enb + + + + Clean_Test_Server_Images + true + Clean Test Images on LTE-UE Test Server + carabe + oai-lte-ue + diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml index 52dbcb8972..cf092b2653 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml @@ -23,190 +23,139 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml --> - test-fdd-20-tm1 - Test-FDD-20MHz-TM1 - tasks - -100000 -111110 -040101 -800813 -030121 -000001 -040301 040521 040623 040624 040625 040662 040401 040201 -030221 -200000 -222222 - - + test-fdd-20-tm1 + Test-FDD-20MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - hutch - oai-enb - - - Custom_Command - Disable Sleep States - hutch - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - hutch - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - hutch - - - Deploy_Object - Deploy eNB (FDD/Band7/20MHz/B200) in a container - hutch - ci-scripts/yaml_files/lte_b200_fdd_20Mhz_tm1 - + + Custom_Command + Disable Sleep States + hutch + sudo cpupower idle-set -D 0 + - - IdleSleep - Sleep - 5 - + + Pull_Local_Registry + Pull Images from Local Registry + hutch + oai-enb + - - Undeploy_Object - true - Undeploy eNB - hutch - ci-scripts/yaml_files/lte_b200_fdd_20Mhz_tm1 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Create_Workspace + Create new Workspace for server 0 + hutch + - - Ping - ping (20MHz - 20 sec) - -c 20 - 5 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy eNB (FDD/Band7/20MHz/B200) in a container + hutch + ci-scripts/yaml_files/lte_b200_fdd_20Mhz_tm1 + - - Iperf - iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile) - -u -b 70M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + IdleSleep + Sleep + 5 + - - Iperf - iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile) - -u -b 70M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (20MHz - DL/70Mbps/UDP)(30 sec)(unbalanced profile) - -u -b 70M -t 30 -R - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Ping + ping (20MHz - 20 sec) + -c 20 + 5 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile) + -u -b 70M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/TCP)(30 sec)(balanced profile) - -t 30 -R - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile) + -u -b 70M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - UL/12Mbps/UDP)(30 sec)(balanced profile) - -u -b 12M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/70Mbps/UDP)(30 sec)(unbalanced profile) + -u -b 70M -t 30 -R + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - UL/17Mbps/UDP)(30 sec)(single-ue profile) - -u -b 17M -t 30 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - UL/17Mbps/UDP)(30 sec)(single-ue profile) + -u -b 17M -t 30 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - UL/TCP)(30 sec)(single-ue profile) - -t 30 - adb_ue_1 - ltebox-nano - + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (20MHz - UL/TCP)(30 sec)(balanced profile) - -t 30 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - hutch - oai-enb - + + Undeploy_Object + true + Undeploy eNB + hutch + ci-scripts/yaml_files/lte_b200_fdd_20Mhz_tm1 + + + + Custom_Command + true + Enable Sleep States + hutch + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + hutch + oai-enb + - diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml index f46697a106..849d6e0140 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml @@ -23,206 +23,193 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml --> - test-tdd-05-tm1 - Test-TDD-05MHz-TM1 - tasks - -300000 -100000 -111110 -040101 -800813 -030104 -040301 040501 040602 040601 040603 040604 040605 040642 040641 040643 040644 040645 040401 040201 -030204 -200000 -222222 - - + test-tdd-05-tm1 + Test-TDD-05MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - starsky - oai-enb - + + Custom_Command + Reset USRP + starsky + sudo -S b2xx_fx3_utils --reset-device + - - Custom_Command - Disable Sleep States - starsky - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - starsky - sudo cpupower idle-set -E - + + Custom_Command + Disable Sleep States + starsky + sudo cpupower idle-set -D 0 + - - Custom_Command - Reset USRP - starsky - sudo -S b2xx_fx3_utils --reset-device - - - Create_Workspace - Create new Workspace for server 0 - starsky - - - Deploy_Object - Deploy eNB (TDD/Band40/5MHz/B200) in a container - starsky - ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm1 - + + Pull_Local_Registry + Pull Images from Local Registry + starsky + oai-enb + - - IdleSleep - Sleep - 5 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Undeploy_Object - true - Undeploy eNB - starsky - ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm1 - + + Create_Workspace + Create new Workspace for server 0 + starsky + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Deploy_Object + Deploy eNB (TDD/Band40/5MHz/B200) in a container + starsky + ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm1 + - - Ping - ping (5MHz - 20 sec) - -c 20 - 25 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) - -u -b 6.5M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Ping + ping (5MHz - 20 sec) + -c 20 + 25 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue) - -u -b 6.5M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue) + -u -b 6.5M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced) - -u -b 6.5M -t 30 -R - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) + -u -b 6.5M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced) + -u -b 6.5M -t 30 -R + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/TCP)(30 sec) - -t 30 -R - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) + -t 30 -R + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced) - -u -b 2M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec) + -t 30 -R + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue) - -u -b 2M -t 30 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue) + -u -b 2M -t 30 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced) - -u -b 2M -t 30 - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced) + -u -b 2M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec)(single-ue) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced) + -u -b 2M -t 30 + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec) - -t 30 - 50 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - UL/TCP)(30 sec)(single-ue) + -t 30 + adb_ue_1 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - starsky - oai-enb - + + Iperf + iperf (5MHz - UL/TCP)(30 sec) + -t 30 + 50 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + starsky + ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm1 + + + + Custom_Command + true + Enable Sleep States + starsky + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + starsky + oai-enb + diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml index da187e2120..3b2e5a8022 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml @@ -21,193 +21,175 @@ --> - test-tdd-05-if4-5 - Test-TDD-05MHz-TM1-IF4.5 - tasks - -300000 -100000 -111110 -800813 -030134 -030135 -040301 040532 040631 040632 040634 040635 040681 040682 040684 040685 040401 040201 -030231 -200000 -222222 - - + test-tdd-05-if4-5 + Test-TDD-05MHz-TM1-IF4.5 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - starsky - oai-enb - + + Custom_Command + Reset USRP + starsky + sudo -S b2xx_fx3_utils --reset-device + - - Custom_Command - Disable Sleep States - starsky - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - starsky - sudo cpupower idle-set -E - + + Custom_Command + Disable Sleep States + starsky + sudo cpupower idle-set -D 0 + - - Custom_Command - Reset USRP - starsky - sudo -S b2xx_fx3_utils --reset-device - - - Create_Workspace - Create new Workspace for server 0 - starsky - - - Deploy_Object - Deploy RRU (TDD/Band40/5MHz/B200) in a container - starsky - ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 - rru_tdd - - - Deploy_Object - Deploy RCC (TDD/Band40/5MHz) in a container - starsky - ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 - rcc_tdd - + + Pull_Local_Registry + Pull Images from Local Registry + starsky + oai-enb + - - IdleSleep - Sleep - 5 - + + Create_Workspace + Create new Workspace for server 0 + starsky + - - Undeploy_Object - true - Undeploy RRU/RCC - starsky - ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 - + + Deploy_Object + Deploy RRU (TDD/Band40/5MHz/B200) in a container + starsky + ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 + rru_tdd + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Deploy_Object + Deploy RCC (TDD/Band40/5MHz) in a container + starsky + ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 + rcc_tdd + - - Ping - ping (5MHz - 20 sec) - -c 20 - 25 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) - -u -b 6.5M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Ping + ping (5MHz - 20 sec) + -c 20 + 25 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue) - -u -b 6.5M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced) + -u -b 6.5M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue) + -u -b 6.5M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - DL/TCP)(30 sec) - -t 30 -R - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec)(single-ue profile) + -t 30 -R + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced) - -u -b 2M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - DL/TCP)(30 sec) + -t 30 -R + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue) - -u -b 2M -t 30 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced) + -u -b 2M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec)(single-ue) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue) + -u -b 2M -t 30 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (5MHz - UL/TCP)(30 sec) - -t 30 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (5MHz - UL/TCP)(30 sec)(single-ue) + -t 30 + adb_ue_1 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - starsky - oai-enb - + + Iperf + iperf (5MHz - UL/TCP)(30 sec) + -t 30 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy RRU/RCC + starsky + ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 + + + + Custom_Command + true + Enable Sleep States + starsky + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + starsky + oai-enb + diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml index 88b3330508..a947c6774c 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml @@ -23,197 +23,186 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml --> - test-tdd-10-tm1 - Test-TDD-10MHz-TM1 - tasks - -100000 -111110 -040101 -800813 -030114 -040301 040511 040612 040611 040613 040614 040615 040652 040651 040653 040654 040655 040401 040201 -030214 -200000 -222222 - - + test-tdd-10-tm1 + Test-TDD-10MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - starsky - oai-enb - - - Custom_Command - Disable Sleep States - starsky - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - starsky - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - starsky - - - Deploy_Object - Deploy eNB (TDD/Band40/10MHz/B200) in a container - starsky - ci-scripts/yaml_files/lte_b200_tdd_10Mhz_tm1 - + + Custom_Command + Disable Sleep States + starsky + sudo cpupower idle-set -D 0 + - - IdleSleep - Sleep - 5 - + + Pull_Local_Registry + Pull Images from Local Registry + starsky + oai-enb + - - Undeploy_Object - true - Undeploy eNB - starsky - ci-scripts/yaml_files/lte_b200_tdd_10Mhz_tm1 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Create_Workspace + Create new Workspace for server 0 + starsky + - - Ping - ping (10MHz - 20 sec) - -c 20 - 25 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy eNB (TDD/Band40/10MHz/B200) in a container + starsky + ci-scripts/yaml_files/lte_b200_tdd_10Mhz_tm1 + - - Iperf - iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced) - -u -b 13.5M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) - -u -b 13.5M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Ping + ping (10MHz - 20 sec) + -c 20 + 25 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced) - -u -b 13.5M -t 30 -R - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) + -u -b 13.5M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (10MHz - DL/TCP)(30 sec)(single-ue) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced) + -u -b 13.5M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - DL/TCP)(30 sec) - -t 30 -R - 50 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced) + -u -b 13.5M -t 30 -R + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - UL/2Mbps/UDP)(30 sec)(balanced) - -u -b 2M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - DL/TCP)(30 sec)(single-ue) + -t 30 -R + adb_ue_1 + ltebox-nano + - - Iperf - iperf (10MHz - UL/2Mbps/UDP)(30 sec)(single-ue) - -u -b 2M -t 30 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (10MHz - DL/TCP)(30 sec) + -t 30 -R + 50 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - UL/2Mbps/UDP)(30 sec)(unbalanced) - -u -b 2M -t 30 - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - UL/2Mbps/UDP)(30 sec)(single-ue) + -u -b 2M -t 30 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (10MHz - UL/TCP)(30 sec)(single-ue) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (10MHz - UL/2Mbps/UDP)(30 sec)(balanced) + -u -b 2M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (10MHz - UL/TCP)(30 sec) - -t 30 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (10MHz - UL/2Mbps/UDP)(30 sec)(unbalanced) + -u -b 2M -t 30 + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - starsky - oai-enb - + + Iperf + iperf (10MHz - UL/TCP)(30 sec)(single-ue) + -t 30 + adb_ue_1 + ltebox-nano + + + + Iperf + iperf (10MHz - UL/TCP)(30 sec) + -t 30 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + starsky + ci-scripts/yaml_files/lte_b200_tdd_10Mhz_tm1 + + + + Custom_Command + true + Enable Sleep States + starsky + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + starsky + oai-enb + diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml index 65f4dfc6b4..0888891cb3 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml @@ -23,195 +23,132 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml --> - test-tdd-20-tm1 - Test-TDD-20MHz-TM1 - tasks - -100000 -111110 -040101 -800813 -030124 -040301 040521 040622 040621 040623 040662 040401 040201 -030224 -200000 -222222 - - + test-tdd-20-tm1 + Test-TDD-20MHz-TM1 + tasks - - Pull_Local_Registry - Pull Images from Local Registry - starsky - oai-enb - - - Custom_Command - Disable Sleep States - starsky - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - starsky - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - starsky - - - Deploy_Object - Deploy eNB (TDD/Band40/20MHz/B200) in a container - starsky - ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1 - + + Custom_Command + Disable Sleep States + starsky + sudo cpupower idle-set -D 0 + - - IdleSleep - Sleep - 5 - + + Pull_Local_Registry + Pull Images from Local Registry + starsky + oai-enb + - - Undeploy_Object - true - Undeploy eNB - starsky - ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Create_Workspace + Create new Workspace for server 0 + starsky + - - Ping - ping (20MHz - 20 sec) - -c 20 - 25 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Deploy_Object + Deploy eNB (TDD/Band40/20MHz/B200) in a container + starsky + ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1 + - - Iperf - iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(balanced) - -u -b 13.5M -t 30 -R - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) - -u -b 13.5M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Ping + ping (20MHz - 20 sec) + -c 20 + 25 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced) - -u -b 13.5M -t 30 -R - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue) + -u -b 13.5M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - DL/TCP)(30 sec)(single-ue) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(balanced) + -u -b 13.5M -t 30 -R + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/TCP)(30 sec) - -t 30 -R - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced) + -u -b 13.5M -t 30 -R + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - UL/2Mbps/UDP)(30 sec)(balanced) - -u -b 2M -t 30 -R - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - UL/2Mbps/UDP)(30 sec)(single-ue) + -u -b 2M -t 30 -R + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - UL/2Mbps/UDP)(30 sec)(single-ue) - -u -b 2M -t 30 -R - 50 - adb_ue_1 - ltebox-nano - + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (20MHz - UL/2Mbps/UDP)(30 sec)(unbalanced) - -u -b 2M -t 30 - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (20MHz - UL/TCP)(30 sec)(single-ue) - -t 30 - adb_ue_1 - ltebox-nano - + + Undeploy_Object + true + Undeploy eNB + starsky + ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1 + - - Iperf - iperf (20MHz - UL/TCP)(30 sec) - -t 30 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Custom_Command + true + Enable Sleep States + starsky + sudo cpupower idle-set -E + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - starsky - oai-enb - + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + starsky + oai-enb + diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml index 6a0cb0f892..636abb1a66 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml @@ -23,200 +23,188 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml --> - test-tdd-20-tm1-def-sched - Test-TDD-20MHz-TM1-Default-Scheduler - tasks - -100000 -111110 -040101 -800813 -030125 -040301 040522 040627 040626 040628 040629 040630 040667 040666 040668 040669 040670 040401 040201 -030225 -200000 -222222 - - + test-tdd-20-tm1-def-sched + Test-TDD-20MHz-TM1-Default-Scheduler + tasks - - Pull_Local_Registry - Pull Images from Local Registry - starsky - oai-enb - + + Custom_Command + Disable Sleep States + starsky + sudo cpupower idle-set -D 0 + - - Custom_Command - Disable Sleep States - starsky - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - starsky - sudo cpupower idle-set -E - - - Create_Workspace - Create new Workspace for server 0 - starsky - - - Deploy_Object - Deploy eNB (TDD/Band40/20MHz/B200) in a container - starsky - ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1_default_scheduler - + + Pull_Local_Registry + Pull Images from Local Registry + starsky + oai-enb + - - IdleSleep - Sleep - 5 - + + Initialize_UE + Initialize UE + adb_ue_1 adb_ue_2 + - - Undeploy_Object - true - Undeploy eNB - starsky - ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1_default_scheduler - + + Create_Workspace + Create new Workspace for server 0 + starsky + - - Initialize_UE - Initialize UE - adb_ue_1 adb_ue_2 - - - Terminate_UE - true - Terminate UE - adb_ue_1 adb_ue_2 - - - Attach_UE - Attach UE - adb_ue_1 adb_ue_2 - - - Detach_UE - true - Detach UE - adb_ue_1 adb_ue_2 - + + Deploy_Object + Deploy eNB (TDD/Band40/20MHz/B200) in a container + starsky + ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1_default_scheduler + - - Ping - ping (20MHz - 20 sec) - -c 20 - 25 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Attach_UE + Attach UE + adb_ue_1 adb_ue_2 + - - Iperf - iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced) - -u -b 27.5M -t 30 -R - 50 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Ping + ping (20MHz - 20 sec) + -c 20 + 25 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue) - -u -b 27.5M -t 30 -R - 50 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue) + -u -b 27.5M -t 30 -R + 50 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced) - -u -b 27.5M -t 30 -R - 50 - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced) + -u -b 27.5M -t 30 -R + 50 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/TCP)(30 sec)(single-ue) - -t 30 -R - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced) + -u -b 27.5M -t 30 -R + 50 + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - DL/TCP)(30 sec) - -t 30 -R - 50 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/TCP)(30 sec)(single-ue) + -t 30 -R + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - UL/7Mbps/UDP)(30 sec)(balanced) - -u -b 7M -t 30 - 50 - balanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - DL/TCP)(30 sec) + -t 30 -R + 50 + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - UL/7Mbps/UDP)(30 sec)(single-ue) - -u -b 7M -t 30 - 50 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - UL/7Mbps/UDP)(30 sec)(single-ue) + -u -b 7M -t 30 + 50 + adb_ue_1 + ltebox-nano + - - Iperf - iperf (20MHz - UL/7Mbps/UDP)(30 sec)(unbalanced) - -u -b 7M -t 30 - 50 - unbalanced - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - UL/7Mbps/UDP)(30 sec)(balanced) + -u -b 7M -t 30 + 50 + balanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - UL/TCP)(30 sec)(single-ue) - -t 30 - adb_ue_1 - ltebox-nano - + + Iperf + iperf (20MHz - UL/7Mbps/UDP)(30 sec)(unbalanced) + -u -b 7M -t 30 + 50 + unbalanced + adb_ue_1 adb_ue_2 + ltebox-nano + - - Iperf - iperf (20MHz - UL/TCP)(30 sec) - -t 30 - adb_ue_1 adb_ue_2 - ltebox-nano - + + Iperf + iperf (20MHz - UL/TCP)(30 sec)(single-ue) + -t 30 + adb_ue_1 + ltebox-nano + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - starsky - oai-enb - + + Iperf + iperf (20MHz - UL/TCP)(30 sec) + -t 30 + adb_ue_1 adb_ue_2 + ltebox-nano + + + + Detach_UE + true + Detach UE + adb_ue_1 adb_ue_2 + + + + Terminate_UE + true + Terminate UE + adb_ue_1 adb_ue_2 + + + + Undeploy_Object + true + Undeploy eNB + starsky + ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1_default_scheduler + + + + Custom_Command + true + Enable Sleep States + starsky + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + starsky + oai-enb + diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml index 3337bba999..39ac1a7df4 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml @@ -25,71 +25,54 @@ TEST-LTE-2x2-N3XX-TM1 2.6 Ghz TDD LTE 2x2 TM1 tasks - -111111 -100000 -010010 -800833 -030101 -010001 -000001 -050000 -050001 -070000 -070001 -010010 -030201 -333333 - - - - - + Pull_Local_Registry Pull Images from Local Registry obelix oai-enb - + Custom_Command Disable Sleep States obelix sudo cpupower idle-set -D 0 - - Custom_Command - Enable Sleep States - obelix - sudo cpupower idle-set -E + + Detach_UE + true + Detach UE + up2 - + + Create_Workspace Create new Workspace obelix - + + Deploy_Object Deploy eNB (TDD/Band38/2.6Ghz/N3XX) in a container obelix ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm1 - - IdleSleep - Sleep - 5 - - - + Attach_UE Attach UE up2 - + + IdleSleep + Sleep + 5 + + + Ping Ping: 20 pings up2 @@ -99,7 +82,7 @@ 60 - + Ping Ping: 100 pings, size 1024 up2 @@ -107,9 +90,9 @@ -c 100 -s 1024 -i 0.2 1 60 - + - + Iperf iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile) -u -b 26M -t 60 -R @@ -117,44 +100,39 @@ porcepix-cn4g 5 95 - + - - Iperf - iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile) - -u -b 7M -t 60 - up2 - porcepix-cn4g - 5 - 95 - + + Iperf + iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile) + -u -b 7M -t 60 + up2 + porcepix-cn4g + 5 + 95 + - + Detach_UE true Detach UE up2 - + Undeploy_Object true Undeploy gNB obelix ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm1 - - - Clean_Test_Server_Images - true - Clean Test Images - obelix - oai-enb - + + Clean_Test_Server_Images + true + Clean Test Images + obelix + oai-enb + - diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml index a3e89df4a6..e2b9f7ae13 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml @@ -25,71 +25,54 @@ TEST-LTE-2x2-N3XXi-TM2 2.6 Ghz TDD LTE 2x2 TM2 tasks - -111111 -100000 -010010 -800833 -031101 -010001 -000001 -051000 -051001 -071000 -071001 -010010 -031201 -333333 - - - - - + Pull_Local_Registry Pull Images from Local Registry obelix oai-enb - + Custom_Command Disable Sleep States obelix sudo cpupower idle-set -D 0 - - Custom_Command - Enable Sleep States - obelix - sudo cpupower idle-set -E + + Detach_UE + true + Detach UE + up2 - + + Create_Workspace Create new Workspace obelix - + + Deploy_Object Deploy eNB (TDD/Band38/2.6Ghz/N3XX) in a container obelix ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm2 - - IdleSleep - Sleep - 5 - - - + Attach_UE Attach UE up2 - + + IdleSleep + Sleep + 5 + + + Ping Ping: 20 pings up2 @@ -99,7 +82,7 @@ 60 - + Ping Ping: 100 pings, size 1024 up2 @@ -107,9 +90,9 @@ -c 100 -s 1024 -i 0.2 1 60 - + - + Iperf iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile) -u -b 1M -t 60 -R @@ -117,45 +100,39 @@ porcepix-cn4g 5 95 - + - - Iperf - iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile) - -u -b 7M -t 60 - up2 - porcepix-cn4g - 5 - 95 - + + Iperf + iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile) + -u -b 7M -t 60 + up2 + porcepix-cn4g + 5 + 95 + - + Detach_UE true Detach UE up2 - + Undeploy_Object true Undeploy gNB obelix ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm2 - - - Clean_Test_Server_Images - true - Clean Test Images - obelix - oai-enb - - + + Clean_Test_Server_Images + true + Clean Test Images + obelix + oai-enb + - diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index c73c6dadca..a9e859886c 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -21,261 +21,226 @@ --> - TEST-NSA-FR1-TM1-B200 - NSA SanityCheck with QUECTEL - tasks - - 200000 - 100000 - 500000 - 111110 - 111111 - 000100 - 010000 - 800833 - 030101 - 800834 - 030102 - 010001 - 050000 - 050001 - 070001 - 070000 - 070002 - 050002 - 050003 - 010010 - 010002 - 030202 - 030201 - 060000 - 300000 - 600000 - 222220 - 222221 - - + TEST-NSA-FR1-TM1-B200 + NSA SanityCheck with QUECTEL + tasks - - Pull_Local_Registry - Pull Images from Local Registry - nepes - oai-enb - + + Custom_Command + Disable Sleep States (nepes) + nepes + sudo cpupower idle-set -D 0 + - - Pull_Local_Registry - Pull Images from Local Registry - ofqot - oai-gnb - + + Custom_Command + Reset USRP on nepes + nepes + sudo -S /usr/local/lib/uhd/utils/b2xx_fx3_utils --reset-device + - - Custom_Command - Reset USRP on nepes - nepes - sudo -S /usr/local/lib/uhd/utils/b2xx_fx3_utils --reset-device - + + Custom_Command + Disable Sleep States (ofqot) + ofqot + sudo cpupower idle-set -D 0 + - - Custom_Command - Disable Sleep States (nepes) - nepes - sudo cpupower idle-set -D 0 - - - Custom_Command + + Pull_Local_Registry + Pull Images from Local Registry + nepes + oai-enb + + + + Pull_Local_Registry + Pull Images from Local Registry + ofqot + oai-gnb + + + + DeployCoreNetwork + Start EPC + ltebox-nepes + + + + Initialize_UE + Initialize Quectel + idefix + + + + Create_Workspace + Create new Workspace + nepes + + + + Deploy_Object + Deploy eNB (FDD/Band7/5MHz/B200) in a container + nepes + ci-scripts/yaml_files/nsa_b200_enb + + + + Create_Workspace + Create new Workspace + ofqot + + + + Deploy_Object + Deploy gNB (TDD/Band78/40MHz/B200) in a container + ofqot + ci-scripts/yaml_files/nsa_b200_gnb + + + + Attach_UE + Attach UE + idefix + + + + Ping + Ping: 20pings in 20sec + idefix + ltebox-nepes + -c 20 + 1 + 15 + + + + Ping + Ping: 100pings in 20sec + idefix + ltebox-nepes + -c 100 -i 0.2 + 1 + 15 + + + + Iperf + iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile) + -u -b 8M -t 60 + idefix + ltebox-nepes + 1 + 95 + + + + Iperf + iperf (DL/70Mbps/UDP)(60 sec)(single-ue profile) + -u -b 70M -t 60 -R + idefix + ltebox-nepes + 25 + 80 + + + + Iperf + iperf (BIDIR TCP)(10 sec)(single-ue profile) + -t 10 --bidir + idefix + ltebox-nepes + + + + Ping + Ping: 20pings in 20sec + idefix + ltebox-nepes + -c 20 + 1 + 15 + + + + Ping + Ping: 100pings in 20sec + idefix + ltebox-nepes + -c 100 -i 0.2 + 1 + 15 + + + + Detach_UE true - Enable Sleep States (nepes) - nepes - sudo cpupower idle-set -E - - - Custom_Command - Disable Sleep States (ofqot) - ofqot - sudo cpupower idle-set -D 0 - - - Custom_Command + Detach UE + idefix + + + + Terminate_UE true - Enable Sleep States (ofqot) - ofqot - sudo cpupower idle-set -E - + Terminate Quectel + idefix + - - DeployCoreNetwork - Start EPC - ltebox-nepes - - - - Initialize_UE - Initialize Quectel - idefix - - - Terminate_UE + + Undeploy_Object true - Terminate Quectel - idefix - - - Attach_UE - Attach UE - idefix - - - Detach_UE + Undeploy gNB + ofqot + ci-scripts/yaml_files/nsa_b200_gnb + 10,100,100,100 + 10,100,100,100 + + + + Undeploy_Object true - Detach UE - idefix - - - Create_Workspace - Create new Workspace - nepes - - - Deploy_Object - Deploy eNB (FDD/Band7/5MHz/B200) in a container - nepes - ci-scripts/yaml_files/nsa_b200_enb - - - Create_Workspace - Create new Workspace - ofqot - - - Deploy_Object - Deploy gNB (TDD/Band78/40MHz/B200) in a container - ofqot - ci-scripts/yaml_files/nsa_b200_gnb - + Undeploy eNB + nepes + ci-scripts/yaml_files/nsa_b200_enb + - - IdleSleep - Sleep - 5 - - - - IdleSleep - Sleep - 20 - - - - - Ping - Ping: 20pings in 20sec - idefix - ltebox-nepes - -c 20 - 1 - 15 - - - - Ping - Ping: 100pings in 20sec - idefix - ltebox-nepes - -c 100 -i 0.2 - 1 - 15 - - - - Ping - Ping: 20pings in 20sec - idefix - ltebox-nepes - -c 20 - 1 - 15 - - - - Ping - Ping: 100pings in 20sec - idefix - ltebox-nepes - -c 100 -i 0.2 - 1 - 15 - - - - Iperf - iperf (DL/70Mbps/UDP)(60 sec)(single-ue profile) - -u -b 70M -t 60 -R - idefix - ltebox-nepes - 25 - 80 - - - - Iperf - iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile) - -u -b 8M -t 60 - idefix - ltebox-nepes - 1 - 95 - - - - Iperf - iperf (BIDIR TCP)(10 sec)(single-ue profile) - -t 10 --bidir - idefix - ltebox-nepes - - - - Undeploy_Object - true - Undeploy eNB - nepes - ci-scripts/yaml_files/nsa_b200_enb - - - - UndeployCoreNetwork - Terminate EPC - true - ltebox-nepes - - - - Undeploy_Object - true - Undeploy gNB - ofqot - ci-scripts/yaml_files/nsa_b200_gnb - 10,100,100,100 - 10,100,100,100 - - - - Clean_Test_Server_Images + + UndeployCoreNetwork + Terminate EPC true - Clean Test Images on Test Server - nepes - oai-enb - + ltebox-nepes + - - Clean_Test_Server_Images + + Custom_Command true - Clean Test Images on Test Server - ofqot - oai-gnb - + Enable Sleep States (nepes) + nepes + sudo cpupower idle-set -E + + + + Custom_Command + true + Enable Sleep States (ofqot) + ofqot + sudo cpupower idle-set -E + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + nepes + oai-enb + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + ofqot + oai-gnb + - diff --git a/ci-scripts/xml_files/container_sa_aerial_cn_start.xml b/ci-scripts/xml_files/container_sa_aerial_cn_start.xml index db622423ae..e29a8aa781 100644 --- a/ci-scripts/xml_files/container_sa_aerial_cn_start.xml +++ b/ci-scripts/xml_files/container_sa_aerial_cn_start.xml @@ -21,17 +21,14 @@ --> - TEST-AERIAL-SA-CN-START - Deploy 5GC - tasks - - 555000 - - - - DeployCoreNetwork - Initialize 5G Core - oc-cn5g-20897-aerial - - + TEST-AERIAL-SA-CN-START + Deploy 5GC + tasks + + DeployCoreNetwork + Initialize 5G Core + oc-cn5g-20897-aerial + + + diff --git a/ci-scripts/xml_files/container_sa_aerial_cn_stop.xml b/ci-scripts/xml_files/container_sa_aerial_cn_stop.xml index bf0bd9fb9c..f50c07a41f 100644 --- a/ci-scripts/xml_files/container_sa_aerial_cn_stop.xml +++ b/ci-scripts/xml_files/container_sa_aerial_cn_stop.xml @@ -21,18 +21,15 @@ --> - TEST-AERIAL-SA-CN-STOP - Undeploy 5GC - tasks - - 000555 - - - - UndeployCoreNetwork - true - Terminate 5G Core - oc-cn5g-20897-aerial - - + TEST-AERIAL-SA-CN-STOP + Undeploy 5GC + tasks + + UndeployCoreNetwork + true + Terminate 5G Core + oc-cn5g-20897-aerial + + + diff --git a/ci-scripts/xml_files/container_sa_aerial_quectel.xml b/ci-scripts/xml_files/container_sa_aerial_quectel.xml index bf3f702219..b5a2e11e50 100644 --- a/ci-scripts/xml_files/container_sa_aerial_quectel.xml +++ b/ci-scripts/xml_files/container_sa_aerial_quectel.xml @@ -21,136 +21,127 @@ --> - TEST-AERIAL-SA - AERIAL 100 MHz TDD SA - tasks - - 111111 - 000222 - 800813 - 002222 - 002223 - 000111 - 000011 - 000022 - 000033 - 200022 - 300033 - 000222 - 222222 - 333333 - - - - Pull_Local_Registry - Pull Images from Local Registry - gracehopper1-oai - oai-gnb-aerial - arm_ - + TEST-AERIAL-SA + AERIAL 100 MHz TDD SA + tasks - - Create_Workspace - Create new Workspace for server 0 - gracehopper1-oai - + + Pull_Local_Registry + Pull Images from Local Registry + gracehopper1-oai + oai-gnb-aerial + arm_ + - - Deploy_Object - Deploy PNF/Nvidia CUBB in a container - gracehopper1-oai - ci-scripts/yaml_files/sa_gnb_aerial - nv-cubb - + + Detach_UE + true + Detach Quectel + up2-aerial + - - Deploy_Object - Deploy VNF in a container - gracehopper1-oai - ci-scripts/yaml_files/sa_gnb_aerial - oai-gnb-aerial - + + Create_Workspace + Create new Workspace for server 0 + gracehopper1-oai + - - Attach_UE - Attach Quectel - up2-aerial - + + Deploy_Object + Deploy PNF/Nvidia CUBB in a container + gracehopper1-oai + ci-scripts/yaml_files/sa_gnb_aerial + nv-cubb + - - Ping - Ping: 100pings in 20sec - up2-aerial - oc-cn5g-20897-aerial - -c 100 -i 0.2 - 5 - + + Deploy_Object + Deploy VNF in a container + gracehopper1-oai + ci-scripts/yaml_files/sa_gnb_aerial + oai-gnb-aerial + - - Iperf - iperf (DL/UDP/800M)(30 sec)(single-ue profile) - -u -b 800M -t 30 -R - oc-cn5g-20897-aerial - up2-aerial - 25 - 80 - + + Attach_UE + Attach Quectel + up2-aerial + - - Iperf - iperf (UL/UDP/150M)(30 sec)(single-ue profile) - -u -b 150M -t 30 -l 1428 - oc-cn5g-20897-aerial - up2-aerial - 25 - 80 - + + Ping + Ping: 100pings in 20sec + up2-aerial + oc-cn5g-20897-aerial + -c 100 -i 0.2 + 5 + - - Iperf - Optional iperf (DL/UDP/1000M)(30 sec)(single-ue profile) - true - -u -b 1000M -t 30 -R - oc-cn5g-20897-aerial - up2-aerial - 25 - 80 - + + Iperf + iperf (DL/UDP/800M)(30 sec)(single-ue profile) + -u -b 800M -t 30 -R + oc-cn5g-20897-aerial + up2-aerial + 25 + 80 + - - Iperf - Optional iperf (UL/UDP/200M)(30 sec)(single-ue profile) - true - -u -b 200M -t 30 -l 1428 - oc-cn5g-20897-aerial - up2-aerial - 25 - 80 - + + Iperf + iperf (UL/UDP/150M)(30 sec)(single-ue profile) + -u -b 150M -t 30 -l 1428 + oc-cn5g-20897-aerial + up2-aerial + 25 + 80 + - - Detach_UE - true - Detach Quectel - up2-aerial - + + Iperf + Optional iperf (DL/UDP/1000M)(30 sec)(single-ue profile) + true + -u -b 1000M -t 30 -R + oc-cn5g-20897-aerial + up2-aerial + 25 + 80 + - - Undeploy_Object - true - Undeploy gNB - gracehopper1-oai - ci-scripts/yaml_files/sa_gnb_aerial - 20,100,100,100 - 20,100,100,100 - + + Iperf + Optional iperf (UL/UDP/200M)(30 sec)(single-ue profile) + true + -u -b 200M -t 30 -l 1428 + oc-cn5g-20897-aerial + up2-aerial + 25 + 80 + + + + Detach_UE + true + Detach Quectel + up2-aerial + + + + Undeploy_Object + true + Undeploy gNB + gracehopper1-oai + ci-scripts/yaml_files/sa_gnb_aerial + 20,100,100,100 + 20,100,100,100 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + gracehopper1-oai + oai-gnb-aerial + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - gracehopper1-oai - oai-gnb-aerial - - diff --git a/ci-scripts/xml_files/container_sa_aerial_quectel_ul_heavy.xml b/ci-scripts/xml_files/container_sa_aerial_quectel_ul_heavy.xml index baf525f167..c577236887 100644 --- a/ci-scripts/xml_files/container_sa_aerial_quectel_ul_heavy.xml +++ b/ci-scripts/xml_files/container_sa_aerial_quectel_ul_heavy.xml @@ -21,124 +21,116 @@ --> - TEST-AERIAL-SA-UL-Heavy - AERIAL 100 MHz DSUUU SA - tasks - - 111111 - 000222 - 800813 - 002222 - 002223 - 000111 - 000011 - 000032 - 000033 - 000022 - 000222 - 222222 - 333333 - - - - Pull_Local_Registry - Pull Images from Local Registry - gracehopper1-oai - oai-gnb-aerial - arm_ - + TEST-AERIAL-SA-UL-Heavy + AERIAL 100 MHz DSUUU SA + tasks - - Create_Workspace - Create new Workspace for server 0 - gracehopper1-oai - + + Pull_Local_Registry + Pull Images from Local Registry + gracehopper1-oai + oai-gnb-aerial + arm_ + - - Deploy_Object - Deploy PNF/Nvidia CUBB in a container - gracehopper1-oai - ci-scripts/yaml_files/sa_gnb_aerial_ul - nv-cubb - + + Detach_UE + true + Detach Quectel + up2-aerial + - - Deploy_Object - Deploy VNF in a container - gracehopper1-oai - ci-scripts/yaml_files/sa_gnb_aerial_ul - oai-gnb-aerial - + + Create_Workspace + Create new Workspace for server 0 + gracehopper1-oai + - - Attach_UE - Attach Quectel - up2-aerial - + + Deploy_Object + Deploy PNF/Nvidia CUBB in a container + gracehopper1-oai + ci-scripts/yaml_files/sa_gnb_aerial_ul + nv-cubb + - - Ping - Ping: 100pings in 20sec - up2-aerial - oc-cn5g-20897-aerial - -c 100 -i 0.2 - 5 - + + Deploy_Object + Deploy VNF in a container + gracehopper1-oai + ci-scripts/yaml_files/sa_gnb_aerial_ul + oai-gnb-aerial + - - Iperf - iperf (DL/UDP/200M)(30 sec)(single-ue profile) - -u -b 200M -t 30 -R - oc-cn5g-20897-aerial - up2-aerial - 25 - 80 - + + Attach_UE + Attach Quectel + up2-aerial + - - Iperf - iperf (UL/UDP/300M)(30 sec)(single-ue profile) - -u -b 300M -t 30 -l 1428 - oc-cn5g-20897-aerial - up2-aerial - 10 - 90 - + + Ping + Ping: 100pings in 20sec + up2-aerial + oc-cn5g-20897-aerial + -c 100 -i 0.2 + 5 + - - Iperf - iperf (UL/UDP/380M)(30 sec)(single-ue profile) - true - -u -b 380M -t 30 -l 1428 - oc-cn5g-20897-aerial - up2-aerial - 10 - 90 - + + Iperf + iperf (UL/UDP/300M)(30 sec)(single-ue profile) + -u -b 300M -t 30 -l 1428 + oc-cn5g-20897-aerial + up2-aerial + 10 + 90 + - - Detach_UE - true - Detach Quectel - up2-aerial - + + Iperf + iperf (UL/UDP/380M)(30 sec)(single-ue profile) + true + -u -b 380M -t 30 -l 1428 + oc-cn5g-20897-aerial + up2-aerial + 10 + 90 + - - Undeploy_Object - true - Undeploy gNB - gracehopper1-oai - ci-scripts/yaml_files/sa_gnb_aerial_ul - 20,100,100,100 - 20,100,100,100 - + + Iperf + iperf (DL/UDP/200M)(30 sec)(single-ue profile) + -u -b 200M -t 30 -R + oc-cn5g-20897-aerial + up2-aerial + 25 + 80 + + + + Detach_UE + true + Detach Quectel + up2-aerial + + + + Undeploy_Object + true + Undeploy gNB + gracehopper1-oai + ci-scripts/yaml_files/sa_gnb_aerial_ul + 20,100,100,100 + 20,100,100,100 + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + gracehopper1-oai + oai-gnb-aerial + - - Clean_Test_Server_Images - true - Clean Test Images on Test Server - gracehopper1-oai - oai-gnb-aerial - - diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue.xml b/ci-scripts/xml_files/container_sa_aw2s_asue.xml index e5d32c181f..6dfbc83187 100644 --- a/ci-scripts/xml_files/container_sa_aw2s_asue.xml +++ b/ci-scripts/xml_files/container_sa_aw2s_asue.xml @@ -24,34 +24,8 @@ TEST-5G-AW2S 20 MHz TDD SA tasks - 1 - - 110000 - 101000 - 100813 - 120000 - 102000 - 102001 - 302001 - 102002 - 302002 - 102003 - 100100 - 100010 - 100020 - 100030 - 100040 - 102016 - 100200 - 103000 - 104000 - 100002 - 130000 - 444444 - - - + Pull_Cluster_Image Pull Images from Cluster oaicicd-ran @@ -59,58 +33,68 @@ avra - + Initialize_UE Initialize Amarisoft UE amarisoft_ue - + Create_Workspace Creating new Workspace avra - + Deploy_Object Deploy gNB (TDD/Band78/20MHz/aw2s) in a container avra ci-scripts/yaml_files/sa_aw2s_gnb - + Attach_UE Attach UE 1 amarisoft_ue_1 - + Custom_Command Verify UE 1 is normal (no RedCap) avra [ $(docker logs oai-gnb-aw2s | grep -E "UE with RNTI [0-9a-f]{4} is RedCap" | wc -l) -eq 0 ] - + Attach_UE Attach (RedCap) UE 2 amarisoft_ue_2 - + Custom_Command Verify UE 2 is RedCap avra [ $(docker logs oai-gnb-aw2s | grep -m1 -E "UE with RNTI [0-9a-f]{4} is RedCap" | wc -l) -eq 1 ] - + Attach_UE Attach UE 3 - 15 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 - + + Ping + Ping: 50 pings in 10sec, multi-ue + amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 + oc-cn5g + -c 50 -i 0.2 + 5 + 25 + + + Iperf iperf (DL/3Mbps/UDP)(30 sec) -u -b 45M -t 30 -R @@ -121,16 +105,7 @@ oc-cn5g - - Iperf - iperf (DL/TCP)(30 sec) - -t 30 -R - amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 - 2 - oc-cn5g - - - + Iperf iperf (UL/1Mbps/UDP)(30 sec) -u -b 15M -t 30 @@ -141,7 +116,16 @@ oc-cn5g - + + Iperf + iperf (DL/TCP)(30 sec) + -t 30 -R + amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 + 2 + oc-cn5g + + + Iperf iperf (UL/TCP)(30 sec) -t 30 @@ -151,23 +135,13 @@ oc-cn5g - - Ping - Ping: 50 pings in 10sec, multi-ue - amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 - oc-cn5g - -c 50 -i 0.2 - 5 - 25 - - - + Attach_UE Attach (RedCap) UE 16 amarisoft_ue_16 - + Ping Ping: 50pings in 10sec, multi-ue amarisoft_ue_16 @@ -177,27 +151,27 @@ 30 - + Detach_UE true Detach UE amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 amarisoft_ue_16 - + Terminate_UE true Terminate UE amarisoft_ue - + IdleSleep Sleep 5 - + Undeploy_Object true Undeploy gNB @@ -205,7 +179,7 @@ ci-scripts/yaml_files/sa_aw2s_gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml b/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml index 4a2dd6c420..c7e5ab5721 100644 --- a/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml +++ b/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml @@ -24,158 +24,135 @@ TEST-5G-2x2-AW2S 20 MHz TDD 2x2 SA tasks - - 010000 - 001000 - 800813 - 020000 - 002000 - 002001 - 002002 - 002003 - 002004 - 002005 - 002006 - 002007 - 002008 - 002009 - 002010 - 002011 - 002012 - 002013 - 002014 - 002015 - 000100 - 000010 - 000020 - 000030 - 000040 - 002016 - 000200 - 003000 - 004000 - 000002 - 030000 - 333333 - - - + Pull_Cluster_Image Pull Images from Cluster oaicicd-ran oai-gnb-aw2s avra - + + + Initialize_UE + Initialize Amarisoft UE + amarisoft_ue_2x2 + + + Create_Workspace Create new Workspace avra - + + Deploy_Object Deploy gNB (TDD/Band78/20MHz/aw2s) in a container avra ci-scripts/yaml_files/sa_aw2s_2x2_gnb - - Initialize_UE - Initialize Amarisoft UE - amarisoft_ue_2x2 - - - + Attach_UE Attach UE amarisoft_ue_1 - + Attach_UE Attach UE amarisoft_ue_2 - + Attach_UE Attach UE amarisoft_ue_3 - + Attach_UE Attach UE amarisoft_ue_4 - + Attach_UE Attach UE amarisoft_ue_5 - + Attach_UE Attach UE amarisoft_ue_6 - + Attach_UE Attach UE amarisoft_ue_7 - + Attach_UE Attach UE amarisoft_ue_8 - + Attach_UE Attach UE amarisoft_ue_9 - + Attach_UE Attach UE amarisoft_ue_10 - + Attach_UE Attach UE amarisoft_ue_11 - + Attach_UE Attach UE amarisoft_ue_12 - + Attach_UE Attach UE amarisoft_ue_13 - + Attach_UE Attach UE amarisoft_ue_14 - + Attach_UE Attach UE amarisoft_ue_15 - + + Ping + Ping: 20pings in 20sec, multi-ue + amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 + oc-cn5g + -c 20 + 5 + 25 + + + Iperf iperf (DL/4Mbps/UDP)(30 sec) -u -b 60M -t 30 -R @@ -186,16 +163,7 @@ oc-cn5g - - Iperf - iperf (DL/TCP)(30 sec) - -t 30 -R - amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 - 3.9 - oc-cn5g - - - + Iperf iperf (UL/1.5Mbps/UDP)(30 sec) -u -b 22.5M -t 30 @@ -206,7 +174,16 @@ oc-cn5g - + + Iperf + iperf (DL/TCP)(30 sec) + -t 30 -R + amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 + 3.9 + oc-cn5g + + + Iperf iperf (UL/TCP)(30 sec) -t 30 @@ -216,23 +193,13 @@ oc-cn5g - - Ping - Ping: 20pings in 20sec, multi-ue - amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 - oc-cn5g - -c 20 - 5 - 25 - - - + Attach_UE Attach UE amarisoft_ue_16 - + Ping Ping: 50pings in 10sec, multi-ue amarisoft_ue_16 @@ -242,27 +209,27 @@ 30 - + Detach_UE true Detach UE amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15 amarisoft_ue_16 - + Terminate_UE true Terminate UE amarisoft_ue_2x2 - + IdleSleep Sleep 5 - + Undeploy_Object true Undeploy gNB @@ -270,7 +237,7 @@ ci-scripts/yaml_files/sa_aw2s_2x2_gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml index 7b42e42b0c..cb64146091 100644 --- a/ci-scripts/xml_files/container_sa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml @@ -24,110 +24,47 @@ TEST-SA-FR1-B200 20 MHz TDD SA tasks - - 100000 - 111111 - 010000 - 800813 - 030101 - 010001 - 050000 - 050001 - 070000 - 070001 - 070002 - 070003 - 070004 - 060001 - 000002 - 060002 - 050000 - 010010 - 010001 - 050001 - 010010 - 010001 - 050000 - 010010 - 010002 - 030201 - 200000 - 222222 - - - + + Custom_Command + Disable Sleep States + ofqot + sudo cpupower idle-set -D 0 + + + Pull_Local_Registry Pull Images from Local Registry ofqot oai-gnb - - Custom_Command - Disable Sleep States - ofqot - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - ofqot - sudo cpupower idle-set -E - - - + Initialize_UE Initialize Quectel idefix - - Terminate_UE - true - Terminate Quectel - idefix - - - Attach_UE - Attach UE - idefix - - - Detach_UE - true - Detach UE - idefix - - + + Create_Workspace Create new Workspace for server 0 ofqot - + + Deploy_Object Deploy gNB (TDD/Band78/40MHz/B200) in a container ofqot ci-scripts/yaml_files/sa_b200_gnb - - IdleSleep - Sleep - 5 - - - - Ping - Ping: 20pings + + Attach_UE + Attach UE idefix - sabox-nepes - -c 20 -i0.5 -w25 - 80 - - + Ping Ping: 20pings in 20sec idefix @@ -137,7 +74,7 @@ 15 - + Ping Ping: 100pings in 20sec idefix @@ -147,7 +84,7 @@ 15 - + Iperf iperf (DL/30Mbps/UDP)(30 sec)(single-ue profile) -u -b 30M -t 30 -R @@ -157,7 +94,7 @@ 80 - + Iperf iperf (UL/3.5Mbps/UDP)(30 sec)(single-ue profile) -u -b 3.5M -t 30 @@ -167,7 +104,7 @@ 95 - + Iperf iperf (BIDIR TCP)(10 sec)(single-ue profile) -t 10 --bidir @@ -175,7 +112,7 @@ sabox-nepes - + Iperf iperf (DL/TCP)(30 sec)(single-ue profile) -t 30 -R @@ -184,7 +121,7 @@ 40 - + Iperf iperf (UL/TCP)(30 sec)(single-ue profile) -t 30 @@ -193,20 +130,100 @@ 10 - + Custom_Command Trigger Reestablishment ofqot echo ci force_reestab | nc -N 127.0.0.1 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - + + + Ping + Ping: 20pings + idefix + sabox-nepes + -c 20 -i0.5 -w25 + 80 + + + Custom_Command Verify Reestablishment ofqot echo ci get_reestab_count | nc -N 127.0.0.1 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' - + + Ping + Ping: 20pings in 20sec + idefix + sabox-nepes + -c 20 + 1 + 15 + + + + Detach_UE + true + Detach UE + idefix + + + + Attach_UE + Attach UE + idefix + + + + Ping + Ping: 100pings in 20sec + idefix + sabox-nepes + -c 100 -i 0.2 + 1 + 15 + + + + Detach_UE + true + Detach UE + idefix + + + + Attach_UE + Attach UE + idefix + + + + Ping + Ping: 20pings in 20sec + idefix + sabox-nepes + -c 20 + 1 + 15 + + + + Detach_UE + true + Detach UE + idefix + + + + Terminate_UE + true + Terminate Quectel + idefix + + + Undeploy_Object true Undeploy gNB @@ -216,7 +233,15 @@ 10,100,100,100 - + + Custom_Command + true + Enable Sleep States + ofqot + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -225,4 +250,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml index d0a65801a3..ce9e1121c3 100644 --- a/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml @@ -24,77 +24,34 @@ TEST-SA-FR1-F1-E1-B200 40 MHz TDD F1+E1 SA tasks - - 333333 - 300000 - 310000 - 800813 - 330101 - 310001 - 400001 - 350000 - 370003 - 370004 - 370002 - 360001 - 100002 - 360002 - 350000 - 410002 - 370012 - 400002 - 410003 - 370013 - 400003 - 410000 - 350000 - 400000 - 410001 - 350000 - 400001 - 310011 - 310002 - 330201 - 200000 - 222222 - - - + Pull_Local_Registry Pull Images from Local Registry ofqot oai-gnb oai-nr-cuup - + + Custom_Command + Disable Sleep States + ofqot + sudo cpupower idle-set -D 0 + + + Initialize_UE Initialize Quectel idefix - - Terminate_UE - true - Terminate Quectel - idefix - - - Attach_UE - Attach Quectel - idefix - - - Detach_UE - true - Detach Quectel - idefix - - + + Create_Workspace Create new Workspace ofqot - + + Deploy_Object Deploy gNB-CU-CP/gNB-CU-UP/gNB-DU (TDD/n76/40MHz/B200) ofqot @@ -102,21 +59,20 @@ gnb_cucp gnb_cuup gnb_du_tdd - - Custom_Command - Disable Sleep States - ofqot - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - ofqot - sudo cpupower idle-set -E + + Attach_UE + Attach Quectel + idefix - + + Custom_Command + Check UE is on dedicated BWP ID 1 + ofqot + echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 1 (dedicated) UL BWP ID 1 (dedicated)' + + + Ping Ping: 50pings in 10sec idefix @@ -126,89 +82,7 @@ 25 - - Custom_Command - Check UE is on dedicated BWP ID 1 - ofqot - echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 1 (dedicated) UL BWP ID 1 (dedicated)' - - - - Custom_Command - Switch to dedicated BWP ID 1 - ofqot - echo ci trigger_bwp_switch 1 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 1 for UE' - - - - Custom_Command - Check UE is on initial BWP ID 0 - ofqot - echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 0 (initial) UL BWP ID 0 (initial)' - - - - Custom_Command - Switch to dedicated BWP ID 2 - ofqot - echo ci trigger_bwp_switch 2 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 2 for UE' - - - - Iperf - iperf (DL/TCP)(10 sec)(single-ue profile) - -t 10 -R - idefix - sabox-nepes - 35 - - - - Custom_Command - Check UE is on dedicated BWP ID 2 - ofqot - echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 2 (dedicated) UL BWP ID 2 (dedicated)' - - - - Custom_Command - Switch to dedicated BWP ID 3 - ofqot - echo ci trigger_bwp_switch 3 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 3 for UE' - - - - Iperf - iperf (DL/TCP)(10 sec)(single-ue profile) - -t 10 -R - idefix - sabox-nepes - 65 - - - - Custom_Command - Check UE is on dedicated BWP ID 3 - ofqot - echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 3 (dedicated) UL BWP ID 3 (dedicated)' - - - - Custom_Command - Switch to initial BWP ID 0 - ofqot - echo ci trigger_bwp_switch 0 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 0 for UE' - - - - Iperf - iperf (BIDIR TCP)(20 sec)(single-ue profile) - -t 20 --bidir - idefix - sabox-nepes - - - + Iperf iperf (DL/TCP)(20 sec)(single-ue profile) -t 20 -R @@ -217,7 +91,7 @@ 140 - + Iperf iperf (UL/TCP)(20 sec)(single-ue profile) -t 20 @@ -226,20 +100,22 @@ 15 - + + Iperf + iperf (BIDIR TCP)(20 sec)(single-ue profile) + -t 20 --bidir + idefix + sabox-nepes + + + Custom_Command Trigger Reestablishment (on DU) ofqot echo ci force_reestab | nc -N 127.0.0.1 9091 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - - Custom_Command - Verify Reestablishment (on CU) - ofqot - echo ci get_reestab_count | nc -N 127.0.0.1 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' - - + Ping Ping: 20pings idefix @@ -248,7 +124,132 @@ 80 - + + Custom_Command + Verify Reestablishment (on CU) + ofqot + echo ci get_reestab_count | nc -N 127.0.0.1 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' + + + + Ping + Ping: 50pings in 10sec + idefix + sabox-nepes + -c 20 -i 0.2 + 1 + 25 + + + + Custom_Command + Switch to dedicated BWP ID 2 + ofqot + echo ci trigger_bwp_switch 2 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 2 for UE' + + + + Iperf + iperf (DL/TCP)(10 sec)(single-ue profile) + -t 10 -R + idefix + sabox-nepes + 35 + + + + Custom_Command + Check UE is on dedicated BWP ID 2 + ofqot + echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 2 (dedicated) UL BWP ID 2 (dedicated)' + + + + Custom_Command + Switch to dedicated BWP ID 3 + ofqot + echo ci trigger_bwp_switch 3 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 3 for UE' + + + + Iperf + iperf (DL/TCP)(10 sec)(single-ue profile) + -t 10 -R + idefix + sabox-nepes + 65 + + + + Custom_Command + Check UE is on dedicated BWP ID 3 + ofqot + echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 3 (dedicated) UL BWP ID 3 (dedicated)' + + + + Custom_Command + Switch to initial BWP ID 0 + ofqot + echo ci trigger_bwp_switch 0 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 0 for UE' + + + + Ping + Ping: 50pings in 10sec + idefix + sabox-nepes + -c 20 -i 0.2 + 1 + 25 + + + + Custom_Command + Check UE is on initial BWP ID 0 + ofqot + echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 0 (initial) UL BWP ID 0 (initial)' + + + + Custom_Command + Switch to dedicated BWP ID 1 + ofqot + echo ci trigger_bwp_switch 1 | nc -N 127.0.0.1 9091 | grep 'triggered BWP switch to BWP ID 1 for UE' + + + + Ping + Ping: 50pings in 10sec + idefix + sabox-nepes + -c 20 -i 0.2 + 1 + 25 + + + + Custom_Command + Check UE is on dedicated BWP ID 1 + ofqot + echo ci get_current_bwp | nc -N 127.0.0.1 9091 | grep 'DL BWP ID 1 (dedicated) UL BWP ID 1 (dedicated)' + + + + Detach_UE + true + Detach Quectel + idefix + + + + Terminate_UE + true + Terminate Quectel + idefix + + + Undeploy_Object true Undeploy CUCP/CU-UP/DU @@ -258,7 +259,15 @@ 10,100,100,100 - + + Custom_Command + true + Enable Sleep States + ofqot + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -267,4 +276,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml index 3ae295597f..35103d01e7 100644 --- a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml @@ -24,85 +24,43 @@ TEST-SA-FR1-F1-B200 10 MHz FDD F1 SA tasks - - 111111 - 100000 - 110002 - 800813 - 130101 - 130102 - 100001 - 110000 - 110001 - 100001 - 150000 - 150001 - 110011 - 110001 - 150001 - 160001 - 100002 - 160002 - 150001 - 110011 - 110001 - 150000 - 170001 - 170000 - 170002 - 170003 - 170004 - 110011 - 110002 - 100001 - 130201 - 200000 - 222222 - - - + Pull_Local_Registry Pull Images from Local Registry ofqot oai-gnb - - Initialize_UE - Initialize Quectel - idefix + + Custom_Command + Disable Sleep States + ofqot + sudo cpupower idle-set -D 0 - + + Terminate_UE true Terminate Quectel idefix - - Attach_UE - Attach Quectel - idefix - - - Detach_UE - true - Detach Quectel - idefix - - + + Create_Workspace Create new Workspace ofqot - + + Deploy_Object Deploy gNB-CU in a container ofqot ci-scripts/yaml_files/sa_f1_b200_gnb gnb_cu - + + Deploy_Object Deploy gNB-DU (FDD/Band1/10MHz/B200) in a container ofqot @@ -110,36 +68,31 @@ gnb_du_fdd - - Custom_Command - Disable Sleep States - ofqot - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - ofqot - sudo cpupower idle-set -E - - - + IdleSleep Sleep 5 - - Ping - Ping: 20pings + + Initialize_UE + Initialize Quectel idefix - sabox-nepes - -c 20 -i0.5 -w25 - 80 - + + Attach_UE + Attach Quectel + idefix + + + + IdleSleep + Sleep + 5 + + + Ping Ping: 20pings in 20sec idefix @@ -149,7 +102,7 @@ 25 - + Ping Ping: 100pings in 20sec idefix @@ -159,37 +112,86 @@ 110 - + + Detach_UE + true + Detach Quectel + idefix + + + + Attach_UE + Attach Quectel + idefix + + + + Ping + Ping: 100pings in 20sec + idefix + sabox-nepes + -c 100 -i 0.2 + 1 + 110 + + + + Custom_Command + Trigger Reestablishment (on DU) + ofqot + echo ci force_reestab | nc -N 127.0.0.1 9091 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' + + + + Ping + Ping: 20pings + idefix + sabox-nepes + -c 20 -i0.5 -w25 + 80 + + + + Custom_Command + Verify Reestablishment (on CU) + ofqot + echo ci get_reestab_count | nc -N 127.0.0.1 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' + + + + Ping + Ping: 100pings in 20sec + idefix + sabox-nepes + -c 100 -i 0.2 + 1 + 110 + + + + Detach_UE + true + Detach Quectel + idefix + + + + Attach_UE + Attach Quectel + idefix + + + Ping Ping: 20pings in 20sec idefix sabox-nepes -c 20 1 - 110 + 25 - - Ping - Ping: 100pings in 20sec - idefix - sabox-nepes - -c 100 -i 0.2 - 1 - 110 - - - - Iperf - iperf (DL/50Mbps/UDP)(30 sec) - -u -b 50M -t 30 -R - idefix - sabox-nepes - 10 - 95 - - - + Iperf iperf (UL/25Mbps/UDP)(30 sec) -u -b 25M -t 30 @@ -199,7 +201,17 @@ 95 - + + Iperf + iperf (DL/50Mbps/UDP)(30 sec) + -u -b 50M -t 30 -R + idefix + sabox-nepes + 10 + 95 + + + Iperf iperf (BIDIR TCP)(60 sec)(single-ue profile) -t 60 --bidir @@ -207,7 +219,7 @@ sabox-nepes - + Iperf iperf (DL/TCP)(30 sec)(single-ue profile) -t 30 -R @@ -216,7 +228,7 @@ 45 - + Iperf iperf (UL/TCP)(30 sec)(single-ue profile) -t 30 @@ -225,20 +237,27 @@ 25 - - Custom_Command - Trigger Reestablishment (on DU) - ofqot - echo ci force_reestab | nc -N 127.0.0.1 9091 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - - - Custom_Command - Verify Reestablishment (on CU) - ofqot - echo ci get_reestab_count | nc -N 127.0.0.1 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' + + Detach_UE + true + Detach Quectel + idefix - + + Terminate_UE + true + Terminate Quectel + idefix + + + + IdleSleep + Sleep + 5 + + + Undeploy_Object true Undeploy CU-DU @@ -248,7 +267,15 @@ 10,100,100,100 - + + Custom_Command + true + Enable Sleep States + ofqot + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -257,4 +284,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_f1_ho_b210_quectel.xml b/ci-scripts/xml_files/container_sa_f1_ho_b210_quectel.xml index 07a5c5f401..ff36947a57 100644 --- a/ci-scripts/xml_files/container_sa_f1_ho_b210_quectel.xml +++ b/ci-scripts/xml_files/container_sa_f1_ho_b210_quectel.xml @@ -24,79 +24,47 @@ TEST-F1-HO-B210 F1 Handover 20 MHz TDD SA tasks - - 000001 - 000002 - 000003 - 000004 - 000005 - 000006 - 000007 - 000008 - 000009 - 000010 - 000011 - 000012 - 000013 - 000014 - 000015 - 000016 - 000017 - 000018 - 000019 - 000020 - 000021 - 000022 - 000023 - 000024 - 000025 - 000026 - 000027 - 000028 - - - - + DeployCoreNetwork Initialize 5G Core oc-cn5g-00103-ho - + Pull_Local_Registry Pull Images from Local Registry oai-gnb groot - + Pull_Local_Registry Pull Images from Local Registry oai-gnb rocket - + Create_Workspace Create new Workspace for groot groot - + Create_Workspace Create new Workspace on rocket rocket - + Custom_Command Set attenuator to 0 for DU0 and 17 for DU1 rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 25 - + Deploy_Object Deploy gNB-CU in a container ci-scripts/yaml_files/5g_sa_f1_b210_ho @@ -104,7 +72,7 @@ oai-cu - + Deploy_Object Deploy gNB-DU0 (TDD/Band77/20MHz/B210) in a container ci-scripts/yaml_files/5g_sa_f1_b210_ho @@ -112,7 +80,7 @@ groot - + Deploy_Object Deploy gNB-DU1 (TDD/Band77/20MHz/B210) in a container ci-scripts/yaml_files/5g_sa_f1_b210_ho @@ -120,13 +88,13 @@ oai-du1 - + Attach_UE Attach Quectel raspix - + Ping Ping: 100pings in 20sec raspix @@ -135,20 +103,20 @@ 5 - + IdleSleep Sleep 5 - + Custom_Command Attenuate DU0 by 15 and remove the attenuation on DU1 to trigger Handover rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 15 -r 3,4 0 -d 5 - + Ping Ping: 50pings in 10sec raspix @@ -157,21 +125,21 @@ 5 - + Custom_Command UE connected to DU1? groot echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3585" - - Custom_Command + + Custom_Command Attenuate DU1 by 17dB and remove attenuation on DU0 to trigger Handover rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 25 -d 5 - + Ping Ping: 50pings in 10sec raspix @@ -180,21 +148,21 @@ 5 - + Custom_Command UE connected to DU0? groot echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3584" - - Custom_Command + + Custom_Command Attenuate DU0 by 15 and remove the attenuation on DU1 to trigger Handover rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 15 -r 3,4 0 -d 5 - + Ping Ping: 50pings in 10sec raspix @@ -203,21 +171,21 @@ 5 - + Custom_Command UE connected to DU1? groot echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3585" - + Detach_UE true Detach Quectel raspix - + Undeploy_Object true Undeploy CU-DU0 @@ -225,23 +193,23 @@ ci-scripts/yaml_files/5g_sa_f1_b210_ho - + Undeploy_Object true - Undeploy DU1 + Undeploy DU1 rocket ci-scripts/yaml_files/5g_sa_f1_b210_ho - - Custom_Command + + Custom_Command Reset all channels on the attenuator to 0 rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1-4 0 true - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -249,7 +217,7 @@ oai-gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -257,7 +225,7 @@ oai-gnb - + UndeployCoreNetwork true Terminate 5G Core @@ -265,4 +233,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_fhi72_metanoia_up2_2x2.xml b/ci-scripts/xml_files/container_sa_fhi72_metanoia_up2_2x2.xml index 979aabbc5e..3129883744 100644 --- a/ci-scripts/xml_files/container_sa_fhi72_metanoia_up2_2x2.xml +++ b/ci-scripts/xml_files/container_sa_fhi72_metanoia_up2_2x2.xml @@ -24,60 +24,41 @@ test-5g-fhi72-metanoia-2x2 100 MHz TDD SA METANOIA tasks - - 200000 - 110000 - 800813 - 120000 - 102000 - 102001 - 100100 - 100010 - 100020 - 100030 - 100040 - 103000 - 100002 - 130000 - 777777 - 888888 - - - + Custom_Script Setup sriov and network interfaces Metanoia cacofonix - + Pull_Local_Registry Pull Images from Local Registry cacofonix oai-gnb-fhi72 - + Create_Workspace Create new Workspace for server 0 cacofonix - + Deploy_Object Deploy gNB (TDD/Band78/100MHz/Metanoia) in a container cacofonix ci-scripts/yaml_files/sa_fhi_7.2_metanoia_2x2_gnb - + Attach_UE Attach UE up2-fhi72 - + Ping Ping: 100 pings in 10 sec up2-fhi72 @@ -87,7 +68,7 @@ 15 - + Iperf iperf (DL/570Mbps/UDP)(30 sec) -u -b 570M -t 30 -R @@ -98,16 +79,7 @@ oc-cn5g-20897 - - Iperf - iperf (DL/TCP)(30 sec) - -t 30 -R - up2-fhi72 - 80 - oc-cn5g-20897 - - - + Iperf iperf (UL/100Mbps/UDP)(30 sec) -u -b 100M -t 30 @@ -118,7 +90,16 @@ oc-cn5g-20897 - + + Iperf + iperf (DL/TCP)(30 sec) + -t 30 -R + up2-fhi72 + 80 + oc-cn5g-20897 + + + Iperf iperf (UL/TCP)(30 sec) -t 30 @@ -127,20 +108,20 @@ oc-cn5g-20897 - + Detach_UE true Detach UE up2-fhi72 - + IdleSleep Sleep 5 - + Undeploy_Object true Undeploy gNB @@ -148,7 +129,7 @@ ci-scripts/yaml_files/sa_fhi_7.2_metanoia_2x2_gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -156,7 +137,7 @@ oai-gnb-fhi72 - + Custom_Script true Set CPU to idle state, set kernel parameters to default values diff --git a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml index b8df43ef52..c02a12deac 100644 --- a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml +++ b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml @@ -24,59 +24,41 @@ test-5g-fhi72-vvdn 100 MHz TDD SA VVDN tasks - - 200000 - 110000 - 800813 - 120000 - 102000 - 102001 - 100100 - 100010 - 100020 - 100030 - 100040 - 100011 - 103000 - 100002 - 130000 - 777777 - 888888 - - - + Custom_Script Setup sriov and network interfaces VVDN cacofonix - + Pull_Local_Registry Pull Images from Local Registry cacofonix oai-gnb-fhi72 - + + Create_Workspace Create new Workspace for server 0 cacofonix - + + Deploy_Object Deploy gNB (TDD/Band78/100MHz/VVDN) in a container cacofonix ci-scripts/yaml_files/sa_fhi_7.2_vvdn_gnb - + Attach_UE Attach UE up2-fhi72 - + Ping Ping: 100 pings in 10 sec up2-fhi72 @@ -86,7 +68,7 @@ 15 - + Iperf iperf (DL/600Mbps/UDP)(30 sec) -u -b 600M -t 30 -R @@ -97,27 +79,7 @@ oc-cn5g-20897 - - Iperf - Optional iperf (DL/700Mbps/UDP)(30 sec) - true - -u -b 700M -t 30 -R - up2-fhi72 - 10 - 95 - oc-cn5g-20897 - - - - Iperf - iperf (DL/TCP)(30 sec) - -t 30 -R - up2-fhi72 - 40 - oc-cn5g-20897 - - - + Iperf iperf (UL/80Mbps/UDP)(30 sec) -u -b 80M -t 30 @@ -128,7 +90,16 @@ oc-cn5g-20897 - + + Iperf + iperf (DL/TCP)(30 sec) + -t 30 -R + up2-fhi72 + 40 + oc-cn5g-20897 + + + Iperf iperf (UL/TCP)(30 sec) -t 30 @@ -137,20 +108,31 @@ oc-cn5g-20897 - + + Iperf + Optional iperf (DL/700Mbps/UDP)(30 sec) + true + -u -b 700M -t 30 -R + up2-fhi72 + 10 + 95 + oc-cn5g-20897 + + + Detach_UE true Detach UE up2-fhi72 - + IdleSleep Sleep 5 - + Undeploy_Object true Undeploy gNB @@ -158,7 +140,7 @@ ci-scripts/yaml_files/sa_fhi_7.2_vvdn_gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -166,7 +148,7 @@ oai-gnb-fhi72 - + Custom_Script true Set CPU to idle state, set kernel parameters to default values @@ -174,5 +156,4 @@ - diff --git a/ci-scripts/xml_files/container_sa_n2_ho_b210_quectel.xml b/ci-scripts/xml_files/container_sa_n2_ho_b210_quectel.xml index 46707f70b4..84c5a5bea5 100644 --- a/ci-scripts/xml_files/container_sa_n2_ho_b210_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n2_ho_b210_quectel.xml @@ -24,73 +24,47 @@ TEST-MONO-N2-HO-B210 Monolithic N2 Handover 20 MHz TDD SA tasks - - 000001 - 000002 - 000023 - 000003 - 000004 - 000005 - 000006 - 000007 - 000008 - 000009 - 000010 - 000011 - 000012 - 000013 - 000014 - 000015 - 000017 - 000018 - 000019 - 000016 - 000020 - 000021 - 000022 - - - - + + DeployCoreNetwork Initialize 5G Core oc-cn5g-00103-ho - + Pull_Local_Registry Pull Images from Local Registry oai-gnb groot - + Pull_Local_Registry Pull Images from Local Registry oai-gnb rocket - + Create_Workspace Create new Workspace for groot groot - - Create_Workspace - Create new Workspace on rocket - rocket - - - + Custom_Command Set initial attenuation on target gNB rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 25 - + + Create_Workspace + Create new Workspace for rocket + rocket + + + Deploy_Object Deploy Monolithic gNB-PCI0 (TDD/Band77/20MHz/B210) in a container ci-scripts/yaml_files/5g_sa_n2_ho_b210 @@ -98,7 +72,7 @@ oai-gnb-pci0 - + Deploy_Object Deploy Monolithic gNB-PCI1 (TDD/Band77/20MHz/B210) in a container ci-scripts/yaml_files/5g_sa_n2_ho_b210 @@ -106,13 +80,13 @@ oai-gnb-pci1 - + Attach_UE Attach Quectel raspix - + Ping Ping: 100pings in 20sec raspix @@ -121,20 +95,20 @@ 5 - + IdleSleep Sleep 5 - + Custom_Command Gradually attenuate gNB-PCI0 (ch1-2=15dB) and gNB-PCI1 (ch3-4=0dB) over 5s to trigger N2 Handover to gNB-PCI1 rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 15 -r 3,4 0 -d 5 - + Ping Ping: 50pings in 10sec raspix @@ -143,21 +117,21 @@ 5 - + Custom_Command UE connected to gNB-PCI1? rocket echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3585" - + Custom_Command Gradually attenuate gNB-PCI0 (ch1-2=0dB) and gNB-PCI1 (ch3-4=15dB) over 5s to trigger N2 Handover back to gNB-PCI0 rocket python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 25 -d 5 - + Ping Ping: 50pings in 10sec raspix @@ -166,29 +140,21 @@ 5 - + Custom_Command UE connected to gNB-PCI0? groot echo ci fetch_du_by_ue_id 1 | ncat 127.0.0.1 9090 | grep "3584" - - Custom_Command - true - Reset all attenuators to 0dB - rocket - python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1-4 0 - - - + Detach_UE true Detach Quectel raspix - + Undeploy_Object true Undeploy Monolithic gNB-PCI0 @@ -196,7 +162,7 @@ ci-scripts/yaml_files/5g_sa_n2_ho_b210 - + Undeploy_Object true Undeploy Monolithic gNB-PCI1 @@ -204,7 +170,15 @@ ci-scripts/yaml_files/5g_sa_n2_ho_b210 - + + Custom_Command + true + Reset all attenuators to 0dB + rocket + python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1-4 0 + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -212,7 +186,7 @@ oai-gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -220,7 +194,7 @@ oai-gnb - + UndeployCoreNetwork true Terminate 5G Core diff --git a/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml index ad98afcd32..0c3cd35b2f 100644 --- a/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml @@ -24,65 +24,35 @@ TEST-SA-FR1-N310-2x2-100MHz 100 MHz TDD SA 2x2 tasks - - 100000 - 111111 - 010010 - 800813 - 040101 - 010001 - 051001 - 071100 - 071101 - 071002 - 010010 - 000001 - 040201 - 200000 - 033333 - - - - Pull_Cluster_Image - Pull Images from Cluster - oai-gnb - matix - - - + Custom_Command Disable Sleep States matix sudo cpupower idle-set -D 0 - - Custom_Command - true - Enable Sleep States + + Pull_Cluster_Image + Pull Images from Cluster + oai-gnb matix - sudo cpupower idle-set -E - - Attach_UE - Attach UE - up2 - - - + Detach_UE true Detach UE up2 - + + Create_Workspace Create new Workspace matix - + + Deploy_Object Deploy gNB (TDD/Band77/100MHz/N310) in a container matix @@ -90,19 +60,13 @@ 3 - - IdleSleep - Sleep - 5 + + Attach_UE + Attach UE + up2 - - IdleSleep - Sleep - 10 - - - + Ping Ping: 100pings in 20sec up2 @@ -112,7 +76,7 @@ 15 - + Iperf iperf (DL/650Mbps/UDP)(30 sec)(single-ue profile) -u -b 650M -t 30 -R -O 10 -l 9000 @@ -122,7 +86,7 @@ 70 - + Iperf iperf (UL/130Mbps/UDP)(30 sec)(single-ue profile) -u -b 130M -t 30 -O 10 @@ -132,7 +96,7 @@ 70 - + Iperf iperf (BIDIR TCP)(30 sec)(single-ue profile) -t 30 --bidir @@ -140,7 +104,20 @@ up2 - + + Detach_UE + true + Detach UE + up2 + + + + IdleSleep + Sleep + 5 + + + Undeploy_Object true Undeploy gNB @@ -150,7 +127,15 @@ 10,100,100,100 - + + Custom_Command + true + Enable Sleep States + matix + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -159,4 +144,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml index a809fafa2c..5d1b3dcd95 100644 --- a/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml @@ -24,85 +24,49 @@ TEST-SA-FR1-N310-2x2-60MHz 60 MHz 2x2 TDD SA DSUUU tasks - - 100000 - 111111 - 010010 - 800813 - 030101 - 010001 - 050001 - 071000 - 071001 - 070002 - 010010 - 000001 - 030201 - 200000 - 333333 - - - - Pull_Cluster_Image - Pull Images from Cluster - oai-gnb - matix - - - + Custom_Command Disable Sleep States matix sudo cpupower idle-set -D 0 - - Custom_Command - true - Enable Sleep States + + Pull_Cluster_Image + Pull Images from Cluster + oai-gnb matix - sudo cpupower idle-set -E - - Attach_UE - Attach UE - up2 - - - + Detach_UE true Detach UE up2 - - Create_Workspace - Create new Workspace - matix - - - Deploy_Object - Deploy gNB (TDD/Band77/60MHz/N310) in a container - matix - ci-scripts/yaml_files/5g_sa_n310_2x2_60MHz - 3 + + + Create_Workspace + Create new Workspace + matix - - IdleSleep - Sleep - 5 + + Deploy_Object + Deploy gNB (TDD/Band77/60MHz/N310) in a container + matix + ci-scripts/yaml_files/5g_sa_n310_2x2_60MHz + 3 - - IdleSleep - Sleep - 10 + + Attach_UE + Attach UE + up2 - + Ping Ping: 100pings in 20sec up2 @@ -112,7 +76,7 @@ 15 - + Iperf iperf (DL/150Mbps/UDP)(30 sec)(single-ue profile) -u -b 150M -t 30 -R @@ -122,7 +86,7 @@ 80 - + Iperf iperf (UL/250Mbps/UDP)(30 sec)(single-ue profile) -u -b 250M -t 30 @@ -132,7 +96,7 @@ 70 - + Iperf iperf (BIDIR TCP)(30 sec)(single-ue profile) -t 30 --bidir @@ -140,7 +104,20 @@ up2 - + + Detach_UE + true + Detach UE + up2 + + + + IdleSleep + Sleep + 5 + + + Undeploy_Object true Undeploy gNB @@ -150,7 +127,15 @@ 20,100,100,100 - + + Custom_Command + true + Enable Sleep States + matix + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -159,4 +144,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml index d4d0d51258..45d105de9e 100644 --- a/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml @@ -24,85 +24,49 @@ TEST-SA-FR1-N310-4x4-60MHz nFAPI 60 MHz 4x4 TDD SA tasks - - 100000 - 111111 - 010010 - 800813 - 030101 - 010001 - 050001 - 071000 - 071001 - 070002 - 010010 - 000001 - 030201 - 200000 - 333333 - - - - Pull_Cluster_Image - Pull Images from Cluster - oai-gnb - matix - - - + Custom_Command Disable Sleep States matix sudo cpupower idle-set -D 0 - - Custom_Command - true - Enable Sleep States + + Pull_Cluster_Image + Pull Images from Cluster + oai-gnb matix - sudo cpupower idle-set -E - - Attach_UE - Attach UE - up2 - - - + Detach_UE true Detach UE up2 - - Create_Workspace - Create new Workspace - matix - - - Deploy_Object - Deploy VNF-PNF (TDD/Band77/60MHz/N310) in a container - matix - ci-scripts/yaml_files/5g_sa_n310_4x4_60MHz - 3 + + + Create_Workspace + Create new Workspace + matix - - IdleSleep - Sleep - 5 + + Deploy_Object + Deploy VNF-PNF (TDD/Band77/60MHz/N310) in a container + matix + ci-scripts/yaml_files/5g_sa_n310_4x4_60MHz + 3 - - IdleSleep - Sleep - 10 + + Attach_UE + Attach UE + up2 - + Ping Ping: 100pings in 20sec up2 @@ -112,7 +76,7 @@ 15 - + Iperf iperf (DL/450Mbps/UDP)(30 sec)(single-ue profile) -u -b 450M -t 30 -R @@ -122,7 +86,7 @@ 80 - + Iperf iperf (UL/120Mbps/UDP)(30 sec)(single-ue profile) -u -b 120M -t 30 @@ -132,7 +96,7 @@ 70 - + Iperf iperf (BIDIR TCP)(30 sec)(single-ue profile) -t 30 --bidir @@ -140,7 +104,20 @@ up2 - + + Detach_UE + true + Detach UE + up2 + + + + IdleSleep + Sleep + 5 + + + Undeploy_Object true Undeploy VNF-PNF @@ -150,7 +127,15 @@ 10,100,100,100 - + + Custom_Command + true + Enable Sleep States + matix + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -159,4 +144,3 @@ - diff --git a/ci-scripts/xml_files/container_sa_n310_nrue.xml b/ci-scripts/xml_files/container_sa_n310_nrue.xml index 63088afc1c..64311b06cd 100644 --- a/ci-scripts/xml_files/container_sa_n310_nrue.xml +++ b/ci-scripts/xml_files/container_sa_n310_nrue.xml @@ -24,110 +24,62 @@ TEST-5G-NRUE 40 MHz TDD SA tasks - - 060000 - 010000 010001 - 800813 - 020000 - 800814 - 020001 - 000001 - 001000 - 002000 - 000100 - 000200 - 040001 040000 - 333333 - 444444 - 060001 - - - + DeployCoreNetwork Initialize 5G Core oc-cn5g - + Pull_Cluster_Image Pull Images from Cluster oai-gnb avra - + Pull_Cluster_Image Pull Images from Cluster oai-nr-ue caracal - - Custom_Command - Reboot USRP N310 - avra - ssh root@192.168.80.52 reboot ; sleep 45 - - - - Custom_Command - Reboot USRP N310 - caracal - ssh root@192.168.20.2 reboot ; sleep 45 - - + Create_Workspace Create new Workspace avra - + + Deploy_Object Deploy gNB (TDD/Band78/40MHz/N310) in a container avra ci-scripts/yaml_files/5g_sa_n310_gnb 3 - + + Create_Workspace Create new Workspace caracal - + + Deploy_Object Deploy nrUE (TDD/Band78/40MHz/N310) in a container ci-scripts/yaml_files/5g_sa_n310_nrue caracal 3 - - + + Attach_UE Attach OAIUE oai_ue_caracal - - Iperf - iperf (DL/60Mbps/UDP)(30 sec) - -u -b 60M -t 30 -i 1 -R - oai_ue_caracal - oc-cn5g - 25 - 80 - - - - Iperf - iperf (UL/20Mbps/UDP)(30 sec) - -u -b 20M -t 30 -i 1 - oai_ue_caracal - oc-cn5g - 25 - 80 - - - + Ping Ping: 20pings in 20sec oai_ue_caracal @@ -137,7 +89,7 @@ 25 - + Ping Ping: 100pings in 20sec oai_ue_caracal @@ -147,7 +99,35 @@ 30 - + + Iperf + iperf (DL/60Mbps/UDP)(30 sec) + -u -b 60M -t 30 -i 1 -R + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Iperf + iperf (UL/20Mbps/UDP)(30 sec) + -u -b 20M -t 30 -i 1 + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Undeploy_Object + true + Undeploy nr UE + caracal + ci-scripts/yaml_files/5g_sa_n310_nrue + + + Undeploy_Object true Undeploy gNB @@ -156,16 +136,8 @@ 20,100,100,100 20,100,100,100 - - - Undeploy_Object - true - Undeploy nr UE - caracal - ci-scripts/yaml_files/5g_sa_n310_nrue - - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -173,7 +145,7 @@ oai-gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -181,7 +153,7 @@ oai-nr-ue - + UndeployCoreNetwork Terminate 5G Core true diff --git a/ci-scripts/xml_files/container_sa_n310_nrue_longrun.xml b/ci-scripts/xml_files/container_sa_n310_nrue_longrun.xml index f0d8f4f3b6..6241a9d78d 100644 --- a/ci-scripts/xml_files/container_sa_n310_nrue_longrun.xml +++ b/ci-scripts/xml_files/container_sa_n310_nrue_longrun.xml @@ -24,60 +24,34 @@ LONGRUN-5G-NRUE Longrun 40 MHz TDD SA tasks - - 060000 - 010000 010001 - 800813 - 020000 - 800814 - 020001 - 000001 - 001000 - 000100 - 001000 - 000100 - 001000 - 000100 - 001000 - 000200 - 001000 - 000200 - 001000 - 000200 - 040001 040000 - 333333 - 444444 - 060001 - - - + DeployCoreNetwork Initialize 5G Core oc-cn5g - + Pull_Cluster_Image Pull Images from Cluster oai-gnb avra - + Pull_Cluster_Image Pull Images from Cluster oai-nr-ue caracal - + Create_Workspace Create new Workspace avra - + Deploy_Object Deploy gNB (TDD/Band78/40MHz/N310) in a container avra @@ -85,13 +59,13 @@ 3 - + Create_Workspace Create new Workspace caracal - + Deploy_Object Deploy nrUE (TDD/Band78/40MHz/N310) in a container ci-scripts/yaml_files/5g_sa_n310_nrue @@ -99,33 +73,13 @@ 3 - + Attach_UE Attach OAIUE oai_ue_caracal - - Iperf - iperf (DL/10Mbps/UDP)(10 min) - -u -b 10M -t 600 -i 1 -R - oai_ue_caracal - oc-cn5g - 25 - 80 - - - - Iperf - iperf (UL/2Mbps/UDP)(10 min) - -u -b 2M -t 600 -i 1 - oai_ue_caracal - oc-cn5g - 25 - 80 - - - + Ping Ping: 20pings in 20sec oai_ue_caracal @@ -135,7 +89,125 @@ 25 - + + Iperf + iperf (DL/10Mbps/UDP)(10 min) + -u -b 10M -t 600 -i 1 -R + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Ping + Ping: 20pings in 20sec + oai_ue_caracal + oc-cn5g + -c 20 + 1 + 25 + + + + Iperf + iperf (DL/10Mbps/UDP)(10 min) + -u -b 10M -t 600 -i 1 -R + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Ping + Ping: 20pings in 20sec + oai_ue_caracal + oc-cn5g + -c 20 + 1 + 25 + + + + Iperf + iperf (DL/10Mbps/UDP)(10 min) + -u -b 10M -t 600 -i 1 -R + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Ping + Ping: 20pings in 20sec + oai_ue_caracal + oc-cn5g + -c 20 + 1 + 25 + + + + Iperf + iperf (UL/2Mbps/UDP)(10 min) + -u -b 2M -t 600 -i 1 + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Ping + Ping: 20pings in 20sec + oai_ue_caracal + oc-cn5g + -c 20 + 1 + 25 + + + + Iperf + iperf (UL/2Mbps/UDP)(10 min) + -u -b 2M -t 600 -i 1 + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Ping + Ping: 20pings in 20sec + oai_ue_caracal + oc-cn5g + -c 20 + 1 + 25 + + + + Iperf + iperf (UL/2Mbps/UDP)(10 min) + -u -b 2M -t 600 -i 1 + oai_ue_caracal + oc-cn5g + 25 + 80 + + + + Undeploy_Object + true + Undeploy nr UE + caracal + ci-scripts/yaml_files/5g_sa_n310_nrue + + + Undeploy_Object true Undeploy gNB @@ -145,15 +217,7 @@ 20,100,100,100 - - Undeploy_Object - true - Undeploy nr UE - caracal - ci-scripts/yaml_files/5g_sa_n310_nrue - - - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -161,7 +225,7 @@ oai-gnb - + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -169,7 +233,7 @@ oai-nr-ue - + UndeployCoreNetwork Terminate 5G Core true diff --git a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml index d687120eb9..82cb032372 100644 --- a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml @@ -24,104 +24,47 @@ TEST-SA-FR1-SC-PATTERN2-FDMA-B200 40 MHz TDD (pattern2) SA with SC-FDMA tasks - - 300000 - 311111 - 210000 - 800813 - 230101 - 210001 - 250000 - 250001 - 270000 - 270001 - 270002 - 270003 - 270004 - 260001 - 200002 - 260002 - 250000 - 210010 - 210002 - 230201 - 400000 - 222222 - - - + + Custom_Command + Disable Sleep States + ofqot + sudo cpupower idle-set -D 0 + + + Pull_Local_Registry Pull Images from Local Registry ofqot oai-gnb - - Custom_Command - Disable Sleep States - ofqot - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - ofqot - sudo cpupower idle-set -E - - - + Initialize_UE Initialize Quectel idefix - - Terminate_UE - true - Terminate Quectel - idefix - - - Attach_UE - Attach UE - idefix - - - Detach_UE - true - Detach UE - idefix - - + + Create_Workspace Create new Workspace ofqot - + + Deploy_Object Deploy gNB (TDD/pattern2/Band78/40MHz/B200) with SC-FDMA in a container ofqot ci-scripts/yaml_files/sa_sc_b200_gnb - - IdleSleep - Sleep - 5 - - - - Ping - Ping: 20pings + + Attach_UE + Attach UE idefix - sabox-nepes - -c 20 -i0.5 -w25 - 80 - - + Ping Ping: 20pings in 20sec idefix @@ -131,7 +74,7 @@ 15 - + Ping Ping: 100pings in 20sec idefix @@ -141,7 +84,7 @@ 15 - + Iperf iperf (DL/80Mbps/UDP)(30 sec)(single-ue profile) -u -b 80M -t 30 -R @@ -151,7 +94,7 @@ 95 - + Iperf iperf (UL/18Mbps/UDP)(30 sec) -u -b 18M -t 30 @@ -161,7 +104,7 @@ 95 - + Iperf iperf (BIDIR TCP)(10 sec)(single-ue profile) -t 10 --bidir @@ -169,7 +112,7 @@ sabox-nepes - + Iperf iperf (DL/TCP)(30 sec)(single-ue profile) -t 30 -R @@ -178,7 +121,7 @@ 35 - + Iperf iperf (UL/TCP)(30 sec)(single-ue profile) -t 30 @@ -187,20 +130,54 @@ 5 - + Custom_Command Trigger Reestablishment ofqot echo ci force_reestab | nc -N 127.0.0.1 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment' - + + + Ping + Ping: 20pings + idefix + sabox-nepes + -c 20 -i0.5 -w25 + 80 + + + Custom_Command Verify Reestablishment ofqot echo ci get_reestab_count | nc -N 127.0.0.1 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1' - + + Ping + Ping: 20pings in 20sec + idefix + sabox-nepes + -c 20 + 1 + 15 + + + + Detach_UE + true + Detach UE + idefix + + + + Terminate_UE + true + Terminate Quectel + idefix + + + Undeploy_Object true Undeploy gNB @@ -210,7 +187,15 @@ 10,100,100,100 - + + Custom_Command + true + Enable Sleep States + ofqot + sudo cpupower idle-set -E + + + Clean_Test_Server_Images true Clean Test Images on Test Server @@ -219,4 +204,3 @@ - diff --git a/ci-scripts/xml_files/cppcheck.xml b/ci-scripts/xml_files/cppcheck.xml index daab4e01c2..7464f16a20 100644 --- a/ci-scripts/xml_files/cppcheck.xml +++ b/ci-scripts/xml_files/cppcheck.xml @@ -21,23 +21,20 @@ --> - build-tab - CPPCHECK Analysis - wrench - - 000002 - 000001 - - - - Create_Workspace - Create new Workspace - carabe - - - Cppcheck_Analysis - Static Code Analysis with cppcheck - carabe - + build-tab + CPPCHECK Analysis + wrench + + + Create_Workspace + Create new Workspace + carabe + + + + Cppcheck_Analysis + Static Code Analysis with cppcheck + carabe + diff --git a/ci-scripts/xml_files/formatting_check.xml b/ci-scripts/xml_files/formatting_check.xml index e54ee1973e..a2b6ddd39c 100644 --- a/ci-scripts/xml_files/formatting_check.xml +++ b/ci-scripts/xml_files/formatting_check.xml @@ -21,18 +21,14 @@ --> - formatting-tab - License and Formatting Checks - wrench - - 000002 - - + formatting-tab + License and Formatting Checks + wrench - - LicenceAndFormattingCheck - License and Formatting Checks - obelix - + + LicenceAndFormattingCheck + License and Formatting Checks + obelix + diff --git a/ci-scripts/xml_files/fr1_5gc_closure.xml b/ci-scripts/xml_files/fr1_5gc_closure.xml index fa524a60aa..3f31d5df55 100644 --- a/ci-scripts/xml_files/fr1_5gc_closure.xml +++ b/ci-scripts/xml_files/fr1_5gc_closure.xml @@ -21,18 +21,14 @@ --> - 5gc-closure - 5GC-Closure - log-out - -060000 - - + 5gc-closure + 5GC-Closure + log-out - - UndeployCoreNetwork - Terminate 5GC - sabox-nepes - + + UndeployCoreNetwork + Terminate 5GC + sabox-nepes + diff --git a/ci-scripts/xml_files/fr1_5gc_start.xml b/ci-scripts/xml_files/fr1_5gc_start.xml index 14bb55f612..8db61264df 100644 --- a/ci-scripts/xml_files/fr1_5gc_start.xml +++ b/ci-scripts/xml_files/fr1_5gc_start.xml @@ -21,19 +21,14 @@ --> - 5gc-start-tab - 5GC-Start - log-in - - 000100 - - - + 5gc-start-tab + 5GC-Start + log-in - - DeployCoreNetwork - Initialize 5GC - sabox-nepes - + + DeployCoreNetwork + Initialize 5GC + sabox-nepes + diff --git a/ci-scripts/xml_files/fr1_cn5g_basic_deploy.xml b/ci-scripts/xml_files/fr1_cn5g_basic_deploy.xml index 3561d11fc9..7baf9b6c54 100644 --- a/ci-scripts/xml_files/fr1_cn5g_basic_deploy.xml +++ b/ci-scripts/xml_files/fr1_cn5g_basic_deploy.xml @@ -21,18 +21,14 @@ --> - cn5g-start-tab - CN5G-Start - log-in - - 000100 - - - + cn5g-start-tab + CN5G-Start + log-in + + + DeployCoreNetwork + Initialize 5G Core + matix-cn5g + - - DeployCoreNetwork - Initialize 5G Core - matix-cn5g - diff --git a/ci-scripts/xml_files/fr1_cn5g_basic_undeploy.xml b/ci-scripts/xml_files/fr1_cn5g_basic_undeploy.xml index 56d7cf74c0..71d872f61a 100644 --- a/ci-scripts/xml_files/fr1_cn5g_basic_undeploy.xml +++ b/ci-scripts/xml_files/fr1_cn5g_basic_undeploy.xml @@ -21,19 +21,14 @@ --> - cn5g-stop-tab - CN5G-Stop - log-in - - 000300 - - - + cn5g-stop-tab + CN5G-Stop + log-in + + + UndeployCoreNetwork + Terminate 5G Core + matix-cn5g + - - UndeployCoreNetwork - Terminate 5G Core - matix-cn5g - - diff --git a/ci-scripts/xml_files/fr1_epc_closure.xml b/ci-scripts/xml_files/fr1_epc_closure.xml index 8f0349073c..72354cc12b 100644 --- a/ci-scripts/xml_files/fr1_epc_closure.xml +++ b/ci-scripts/xml_files/fr1_epc_closure.xml @@ -21,18 +21,14 @@ --> - epc-closure - EPC-Closure - log-out - -060000 - - + epc-closure + EPC-Closure + log-out - - UndeployCoreNetwork - Terminate EPC - ltebox-nano - + + UndeployCoreNetwork + Terminate EPC + ltebox-nano + diff --git a/ci-scripts/xml_files/fr1_epc_start.xml b/ci-scripts/xml_files/fr1_epc_start.xml index 0efaca6d57..246a3ed5d3 100644 --- a/ci-scripts/xml_files/fr1_epc_start.xml +++ b/ci-scripts/xml_files/fr1_epc_start.xml @@ -21,19 +21,14 @@ --> - epc-start-tab - EPC-Start - log-in - - 000100 - - - + epc-start-tab + EPC-Start + log-in - - DeployCoreNetwork - Initialize EPC - ltebox-nano - + + DeployCoreNetwork + Initialize EPC + ltebox-nano + diff --git a/ci-scripts/xml_files/fr1_epc_start_verizon.xml b/ci-scripts/xml_files/fr1_epc_start_verizon.xml index 19f5c03985..df46ba492e 100644 --- a/ci-scripts/xml_files/fr1_epc_start_verizon.xml +++ b/ci-scripts/xml_files/fr1_epc_start_verizon.xml @@ -21,29 +21,24 @@ --> - epc-start-tab - EPC-Start - log-in - - 000100 000101 000102 - - - + epc-start-tab + EPC-Start + log-in - - Initialize_HSS - Initialize HSS - + + Initialize_HSS + Initialize HSS + - - Initialize_MME - Initialize MME - - + + Initialize_MME + Initialize MME + + - - Initialize_SPGW - Initialize SPGW - + + Initialize_SPGW + Initialize SPGW + diff --git a/ci-scripts/xml_files/fr1_oai_cn_deploy.xml b/ci-scripts/xml_files/fr1_oai_cn_deploy.xml index 9cfec6ef58..845cf89086 100644 --- a/ci-scripts/xml_files/fr1_oai_cn_deploy.xml +++ b/ci-scripts/xml_files/fr1_oai_cn_deploy.xml @@ -21,19 +21,14 @@ --> - epc-deploy-tab - EPC-Deploy - log-in - - 000100 - - - + epc-deploy-tab + EPC-Deploy + log-in - - DeployCoreNetwork - Deploy EPC - porcepix-cn4g - + + DeployCoreNetwork + Deploy EPC + porcepix-cn4g + diff --git a/ci-scripts/xml_files/fr1_oai_cn_undeploy.xml b/ci-scripts/xml_files/fr1_oai_cn_undeploy.xml index 1be07ec180..656ef88c0d 100644 --- a/ci-scripts/xml_files/fr1_oai_cn_undeploy.xml +++ b/ci-scripts/xml_files/fr1_oai_cn_undeploy.xml @@ -21,19 +21,14 @@ --> - epc-undeploy-tab - EPC-Undeploy - log-out - - 000200 - - - + epc-undeploy-tab + EPC-Undeploy + log-out - - UndeployCoreNetwork - Undeploy EPC - porcepix-cn4g - + + UndeployCoreNetwork + Undeploy EPC + porcepix-cn4g + diff --git a/ci-scripts/xml_files/gnb_phytest_rfemulator_run_100_2x2.xml b/ci-scripts/xml_files/gnb_phytest_rfemulator_run_100_2x2.xml index 3d2efb5084..30f307612c 100644 --- a/ci-scripts/xml_files/gnb_phytest_rfemulator_run_100_2x2.xml +++ b/ci-scripts/xml_files/gnb_phytest_rfemulator_run_100_2x2.xml @@ -24,47 +24,44 @@ gNB-PHY-Test-100-2x2-RFemu Timing phytest 100 MHz 2x2 RFemulator tasks - -100000 390101 000001 390109 200000 - - - - Custom_Command - Disable Sleep States - caracal - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - caracal - sudo cpupower idle-set -E + + + Custom_Command + Disable Sleep States + caracal + sudo cpupower idle-set -D 0 - + Initialize_eNB Initialize gNB USRP - caracal + caracal -O ci-scripts/conf_files/gnb.band79.273prb.usrpn300.phytest-dora.conf --phy-test -q -U 768 -T 273 -t 23 -D 127 -m 23 -M 273 -l 2 --device.name rf_emulator --rf_emulator.noise_level_dBFS -36 --log_config.global_log_options level,nocolor,time datalog_rt_stats.100.2x2.yaml NR - numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 + numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 - + IdleSleep Sleep 60 - - + Terminate_eNB - caracal + caracal true Terminate gNB NR + + Custom_Command + true + Enable Sleep States + caracal + sudo cpupower idle-set -E + + diff --git a/ci-scripts/xml_files/gnb_phytest_usrp_run.xml b/ci-scripts/xml_files/gnb_phytest_usrp_run.xml index 5adeb17966..f6af5ee485 100644 --- a/ci-scripts/xml_files/gnb_phytest_usrp_run.xml +++ b/ci-scripts/xml_files/gnb_phytest_usrp_run.xml @@ -21,51 +21,48 @@ --> - gNB-PHY-Test-40 - Timing phytest 40 MHz - tasks - -100000 090101 000001 090109 200000 - - - - Custom_Command - Disable Sleep States - caracal - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - caracal - sudo cpupower idle-set -E - + gNB-PHY-Test-40 + Timing phytest 40 MHz + tasks - - Initialize_eNB - Initialize gNB USRP - caracal - -O ci-scripts/conf_files/gnb.band79.106prb.usrpn300.phytest-dora.conf --phy-test -q -U 768 -T 106 -t 23 -D 127 -m 28 -M 106 --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time + + Custom_Command + Disable Sleep States + caracal + sudo cpupower idle-set -D 0 + + + + Initialize_eNB + Initialize gNB USRP + caracal + -O ci-scripts/conf_files/gnb.band79.106prb.usrpn300.phytest-dora.conf --phy-test -q -U 768 -T 106 -t 23 -D 127 -m 28 -M 106 --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time datalog_rt_stats.default.yaml - NR - 192.168.20.2 - numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 - + NR + 192.168.20.2 + numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 + - - IdleSleep - Sleep - 60 - + + IdleSleep + Sleep + 60 + - - - Terminate_eNB + + Terminate_eNB true - Terminate gNB - caracal - NR - + Terminate gNB + caracal + NR + + + + Custom_Command + true + Enable Sleep States + caracal + sudo cpupower idle-set -E + diff --git a/ci-scripts/xml_files/gnb_phytest_usrp_run_100_2x2.xml b/ci-scripts/xml_files/gnb_phytest_usrp_run_100_2x2.xml index 7821be863c..93053dee90 100644 --- a/ci-scripts/xml_files/gnb_phytest_usrp_run_100_2x2.xml +++ b/ci-scripts/xml_files/gnb_phytest_usrp_run_100_2x2.xml @@ -24,25 +24,15 @@ gNB-PHY-Test-100-2x2 Timing phytest 100 MHz 2x2 tasks - -100000 390101 000001 390109 200000 - - - - Custom_Command - Disable Sleep States - caracal - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - caracal - sudo cpupower idle-set -E + + + Custom_Command + Disable Sleep States + caracal + sudo cpupower idle-set -D 0 - + Initialize_eNB Initialize gNB USRP caracal @@ -50,17 +40,16 @@ datalog_rt_stats.100.2x2.yaml NR 192.168.20.2 - numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 + numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 - + IdleSleep Sleep 60 - - + Terminate_eNB true Terminate gNB @@ -68,4 +57,12 @@ NR + + Custom_Command + true + Enable Sleep States + caracal + sudo cpupower idle-set -E + + diff --git a/ci-scripts/xml_files/gnb_phytest_usrp_run_60.xml b/ci-scripts/xml_files/gnb_phytest_usrp_run_60.xml index 72e4b5244e..2cd040a47a 100644 --- a/ci-scripts/xml_files/gnb_phytest_usrp_run_60.xml +++ b/ci-scripts/xml_files/gnb_phytest_usrp_run_60.xml @@ -24,25 +24,15 @@ gNB-PHY-Test-60 Timing phytest 60 MHz tasks - -100000 190101 000001 190109 200000 - - - - Custom_Command - Disable Sleep States - caracal - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - caracal - sudo cpupower idle-set -E + + + Custom_Command + Disable Sleep States + caracal + sudo cpupower idle-set -D 0 - + Initialize_eNB Initialize gNB USRP caracal @@ -50,17 +40,16 @@ datalog_rt_stats.1x1.60.yaml NR 192.168.20.2 - numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 + numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 - + IdleSleep Sleep 60 - - + Terminate_eNB true Terminate gNB @@ -68,4 +57,12 @@ NR + + Custom_Command + true + Enable Sleep States + caracal + sudo cpupower idle-set -E + + diff --git a/ci-scripts/xml_files/gnb_phytest_usrp_run_60_2x2.xml b/ci-scripts/xml_files/gnb_phytest_usrp_run_60_2x2.xml index 1be4a24477..7e5592fb6e 100644 --- a/ci-scripts/xml_files/gnb_phytest_usrp_run_60_2x2.xml +++ b/ci-scripts/xml_files/gnb_phytest_usrp_run_60_2x2.xml @@ -24,25 +24,15 @@ gNB-PHY-Test-60-2x2 Timing phytest 60 MHz 2x2 tasks - -100000 290101 000001 290109 200000 - - - - Custom_Command - Disable Sleep States - caracal - sudo cpupower idle-set -D 0 - - - Custom_Command - true - Enable Sleep States - caracal - sudo cpupower idle-set -E + + + Custom_Command + Disable Sleep States + caracal + sudo cpupower idle-set -D 0 - + Initialize_eNB Initialize gNB USRP caracal @@ -50,17 +40,16 @@ datalog_rt_stats.60.2x2.yaml NR 192.168.20.2 - numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 + numactl --cpunodebind=netdev:enp94s0f0np0 --membind=netdev:enp94s0f0np0 - + IdleSleep Sleep 60 - - + Terminate_eNB true Terminate gNB @@ -68,4 +57,12 @@ NR + + Custom_Command + true + Enable Sleep States + caracal + sudo cpupower idle-set -E + + diff --git a/ci-scripts/xml_files/gnb_usrp_build.xml b/ci-scripts/xml_files/gnb_usrp_build.xml index 32043985f5..ea7cc8b8ed 100644 --- a/ci-scripts/xml_files/gnb_usrp_build.xml +++ b/ci-scripts/xml_files/gnb_usrp_build.xml @@ -21,36 +21,30 @@ --> - gnb-build-tab - Build-gNB - wrench - -100000 -000000 -010101 - - + gnb-build-tab + Build-gNB + wrench - - Create_Workspace - Create new Workspace - caracal - + + Custom_Command + Reboot USRP + true + caracal + ssh root@192.168.20.2 reboot + - - TesteNB - Build_eNB - Build gNB (USRP) - caracal - --gNB -w USRP --ninja -c -P --build-lib ldpc_cuda --build-lib ldpc_aal --cmake-opt -DASN1C_EXEC=/opt/asn1c/bin/asn1c --cmake-opt -DPHYSIM_CHECK_FILES="ThresholdsOffload.cmake" - + + Create_Workspace + Create new Workspace + caracal + - - Custom_Command - Reboot USRP - true - caracal - ssh root@192.168.20.2 reboot - + + TesteNB + Build_eNB + Build gNB (USRP) + caracal + --gNB -w USRP --ninja -c -P --build-lib ldpc_cuda --build-lib ldpc_aal --cmake-opt -DASN1C_EXEC=/opt/asn1c/bin/asn1c --cmake-opt -DPHYSIM_CHECK_FILES="ThresholdsOffload.cmake" + diff --git a/ci-scripts/xml_files/lte_oai_cn_deploy.xml b/ci-scripts/xml_files/lte_oai_cn_deploy.xml index 3e4ea86e61..ddfc4dd54d 100644 --- a/ci-scripts/xml_files/lte_oai_cn_deploy.xml +++ b/ci-scripts/xml_files/lte_oai_cn_deploy.xml @@ -21,19 +21,14 @@ --> - epc-deploy-tab - EPC-Deploy - log-in - - 000100 - - - + epc-deploy-tab + EPC-Deploy + log-in - - DeployCoreNetwork - Deploy EPC - nano-cn4g - + + DeployCoreNetwork + Deploy EPC + nano-cn4g + diff --git a/ci-scripts/xml_files/lte_oai_cn_undeploy.xml b/ci-scripts/xml_files/lte_oai_cn_undeploy.xml index b81aa01a1f..df7b4a4038 100644 --- a/ci-scripts/xml_files/lte_oai_cn_undeploy.xml +++ b/ci-scripts/xml_files/lte_oai_cn_undeploy.xml @@ -21,19 +21,14 @@ --> - epc-undeploy-tab - EPC-Undeploy - log-out - - 000200 - - - + epc-undeploy-tab + EPC-Undeploy + log-out - - UndeployCoreNetwork - Undeploy EPC - nano-cn4g - + + UndeployCoreNetwork + Undeploy EPC + nano-cn4g + diff --git a/ci-scripts/xml_files/physim_4g_deploy_run.xml b/ci-scripts/xml_files/physim_4g_deploy_run.xml index cd34037760..3f1f9d10e2 100644 --- a/ci-scripts/xml_files/physim_4g_deploy_run.xml +++ b/ci-scripts/xml_files/physim_4g_deploy_run.xml @@ -21,26 +21,21 @@ --> - build-tab - Physical Simulators Check - wrench - - 800813 - 010201 - - + build-tab + Physical Simulators Check + wrench - - Create_Workspace - Create new Workspace - avra - + + Create_Workspace + Create new Workspace + avra + - - Deploy_Run_OC_PhySim - Deploy and run physical simulator on openshift - physims-4g - avra - + + Deploy_Run_OC_PhySim + Deploy and run physical simulator on openshift + physims-4g + avra + diff --git a/ci-scripts/xml_files/physim_5g_deploy_run.xml b/ci-scripts/xml_files/physim_5g_deploy_run.xml index 1967003124..edc317ea27 100644 --- a/ci-scripts/xml_files/physim_5g_deploy_run.xml +++ b/ci-scripts/xml_files/physim_5g_deploy_run.xml @@ -21,26 +21,21 @@ --> - build-tab - Physical Simulators Check - wrench - - 800813 - 010201 - - + build-tab + Physical Simulators Check + wrench - - Create_Workspace - Create new Workspace - avra - + + Create_Workspace + Create new Workspace + avra + - - Deploy_Run_OC_PhySim - Deploy and run physical simulator on openshift - physims-5g - avra - + + Deploy_Run_OC_PhySim + Deploy and run physical simulator on openshift + physims-5g + avra + diff --git a/ci-scripts/xml_files/physim_gracehopper.xml b/ci-scripts/xml_files/physim_gracehopper.xml index f04ae2541f..533696d28c 100644 --- a/ci-scripts/xml_files/physim_gracehopper.xml +++ b/ci-scripts/xml_files/physim_gracehopper.xml @@ -21,26 +21,21 @@ --> - physim-tab - PhySim - wrench - - 800813 - 010201 - - + physim-tab + PhySim + wrench - - Create_Workspace - Create new Workspace - localhost - + + Create_Workspace + Create new Workspace + localhost + - - Build_Deploy_Docker_PhySim - Build and Deploy PhySim - localhost - -R 5g -E "nr_dlsim|nr_ulsim|ldpctest" -j32 - + + Build_Deploy_Docker_PhySim + Build and Deploy PhySim + localhost + -R 5g -E "nr_dlsim|nr_ulsim|ldpctest" -j32 + diff --git a/ci-scripts/xml_files/physim_timed_gracehopper.xml b/ci-scripts/xml_files/physim_timed_gracehopper.xml index 7658279088..9844f6ebb3 100644 --- a/ci-scripts/xml_files/physim_timed_gracehopper.xml +++ b/ci-scripts/xml_files/physim_timed_gracehopper.xml @@ -21,26 +21,21 @@ --> - physim-timed-tab - PhySim with timing check - wrench - - 800813 - 010202 - - + physim-timed-tab + PhySim with timing check + wrench - - Create_Workspace - Create new Workspace - localhost - + + Create_Workspace + Create new Workspace + localhost + - - Build_Deploy_Docker_PhySim - Build and Deploy PhySim with timing check - localhost - -R 5g -R "nr_dlsim|nr_ulsim|ldpctest" -E physim.5g.nr_dlsim.mcs.mimo.test9 -j1 - + + Build_Deploy_Docker_PhySim + Build and Deploy PhySim with timing check + localhost + -R 5g -R "nr_dlsim|nr_ulsim|ldpctest" -E physim.5g.nr_dlsim.mcs.mimo.test9 -j1 + diff --git a/ci-scripts/xml_files/sa_cn5g_20897_closure.xml b/ci-scripts/xml_files/sa_cn5g_20897_closure.xml index eeab1b32dc..0e8d8db1ba 100644 --- a/ci-scripts/xml_files/sa_cn5g_20897_closure.xml +++ b/ci-scripts/xml_files/sa_cn5g_20897_closure.xml @@ -24,12 +24,8 @@ cn5g-closure CN5G-Closure log-out - - 060000 - - - + UndeployCoreNetwork Terminate 5G Core oc-cn5g-20897 diff --git a/ci-scripts/xml_files/sa_cn5g_20897_start.xml b/ci-scripts/xml_files/sa_cn5g_20897_start.xml index 9c29b83563..e88e84ad88 100644 --- a/ci-scripts/xml_files/sa_cn5g_20897_start.xml +++ b/ci-scripts/xml_files/sa_cn5g_20897_start.xml @@ -24,15 +24,11 @@ cn5g-start-tab CN5G-Start log-in - - 000100 - - - - + DeployCoreNetwork Initialize 5G Core oc-cn5g-20897 + diff --git a/ci-scripts/xml_files/sa_cn5g_closure.xml b/ci-scripts/xml_files/sa_cn5g_closure.xml index beb490dbed..ac02a57431 100644 --- a/ci-scripts/xml_files/sa_cn5g_closure.xml +++ b/ci-scripts/xml_files/sa_cn5g_closure.xml @@ -21,18 +21,14 @@ --> - cn5g-closure - CN5G-Closure - log-out - -060000 - - + cn5g-closure + CN5G-Closure + log-out - - UndeployCoreNetwork - Terminate 5G Core - oc-cn5g - + + UndeployCoreNetwork + Terminate 5G Core + oc-cn5g + diff --git a/ci-scripts/xml_files/sa_cn5g_start.xml b/ci-scripts/xml_files/sa_cn5g_start.xml index a49a2cda18..1a166ef21e 100644 --- a/ci-scripts/xml_files/sa_cn5g_start.xml +++ b/ci-scripts/xml_files/sa_cn5g_start.xml @@ -21,18 +21,14 @@ --> - cn5g-start-tab - CN5G-Start - log-in - -000100 - - - + cn5g-start-tab + CN5G-Start + log-in + + + DeployCoreNetwork + Initialize 5G Core + oc-cn5g + - - DeployCoreNetwork - Initialize 5G Core - oc-cn5g - diff --git a/ci-scripts/xml_files/t2_offload_physim_enc_dec.xml b/ci-scripts/xml_files/t2_offload_physim_enc_dec.xml index 73631a7a3c..afac50ba16 100644 --- a/ci-scripts/xml_files/t2_offload_physim_enc_dec.xml +++ b/ci-scripts/xml_files/t2_offload_physim_enc_dec.xml @@ -20,35 +20,30 @@ --> - test-t2-offload-enc-dec - Test T2 Offload - tasks - - 010204 - 111111 - 402010 - - + test-t2-offload-enc-dec + Test T2 Offload + tasks - - Custom_Command - Disable Sleep States - caracal - sudo cpupower idle-set -D 0 - + + Custom_Command + Disable Sleep States + caracal + sudo cpupower idle-set -D 0 + - - Custom_Command - true - Enable Sleep States - caracal - sudo cpupower idle-set -E - + + Build_Deploy_Source_PhySim + Build and Deploy PhySim T2 Offload tests + caracal + -R 5g-offload -j1 + + + + Custom_Command + true + Enable Sleep States + caracal + sudo cpupower idle-set -E + - - Build_Deploy_Source_PhySim - Build and Deploy PhySim T2 Offload tests - caracal - -R 5g-offload -j1 - From 0166bbd49347b312f0956a1f1fe3ae68b9949d4c Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Mon, 12 Jan 2026 11:50:03 +0100 Subject: [PATCH 51/53] CI: Remove requested and exclusion test parsing and validation Requested and exclusion test lists are no longer present in the XML files, so related parsing, format checks, and filtering logic have been removed. --- ci-scripts/main.py | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 50178f3468..731298839f 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -455,46 +455,11 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re xmlTree = ET.parse(xml_test_file) xmlRoot = xmlTree.getroot() - exclusion_tests=xmlRoot.findtext('TestCaseExclusionList',default='') - requested_tests=xmlRoot.findtext('TestCaseRequestedList',default='') if (HTML.nbTestXMLfiles == 1): HTML.htmlTabRefs.append(xmlRoot.findtext('htmlTabRef',default='test-tab-0')) HTML.htmlTabNames.append(xmlRoot.findtext('htmlTabName',default='Test-0')) all_tests=xmlRoot.findall('testCase') - exclusion_tests=exclusion_tests.split() - requested_tests=requested_tests.split() - - #check that exclusion tests are well formatted - #(6 digits or less than 6 digits followed by +) - for test in exclusion_tests: - if (not re.match('^[0-9]{6}$', test) and - not re.match('^[0-9]{1,5}\\+$', test)): - logging.error('exclusion test is invalidly formatted: ' + test) - sys.exit(1) - else: - logging.info(test) - - #check that requested tests are well formatted - #(6 digits or less than 6 digits followed by +) - #be verbose - for test in requested_tests: - if (re.match('^[0-9]{6}$', test) or - re.match('^[0-9]{1,5}\\+$', test)): - logging.info('test group/case requested: ' + test) - else: - logging.error('requested test is invalidly formatted: ' + test) - sys.exit(1) - - #get the list of tests to be done - todo_tests=[] - for test in requested_tests: - if (test_in_list(test, exclusion_tests)): - logging.info('test will be skipped: ' + test) - else: - #logging.info('test will be run: ' + test) - todo_tests.append(test) - signal.signal(signal.SIGINT, receive_signal) HTML.CreateHtmlTabHeader() From 3893d5c8ef3396858a11242f1b2e899ad30cdfa9 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Tue, 13 Jan 2026 20:07:46 +0100 Subject: [PATCH 52/53] CI: harmonize test case identifier Remove unused testCase_id definitions and replace all occurrences of test_id with test_idx across the ci-scripts folder. --- ci-scripts/cls_ci_helper.py | 4 ++-- ci-scripts/cls_cluster.py | 7 ++----- ci-scripts/cls_native.py | 3 +-- ci-scripts/cls_oai_html.py | 8 ++++---- ci-scripts/cls_static_code_analysis.py | 3 --- ci-scripts/main.py | 16 ++++++++-------- ci-scripts/ran.py | 2 -- ci-scripts/tests/build.py | 2 +- 8 files changed, 18 insertions(+), 27 deletions(-) diff --git a/ci-scripts/cls_ci_helper.py b/ci-scripts/cls_ci_helper.py index b8fff32a5e..6b67057c92 100644 --- a/ci-scripts/cls_ci_helper.py +++ b/ci-scripts/cls_ci_helper.py @@ -24,14 +24,14 @@ from typing import NamedTuple import logging class TestCaseCtx(NamedTuple): - test_id: int + test_idx: int logPath: str def Default(logPath): return TestCaseCtx(112233, logPath) def baseFilename(self): # typically, the test ID is of form 001234 (6 digits) - return f"{self.logPath}/{self.test_id:06d}" + return f"{self.logPath}/{self.test_idx:06d}" def archiveArtifact(cmd, ctx, remote_path): base = os.path.basename(remote_path) diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index 8a9919c700..dc97c80acd 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -164,7 +164,6 @@ class Cluster: def PullClusterImage(self, HTML, node, images, tag_prefix): logging.debug(f'Pull OC image {images} to server {node}') - self.testCase_id = HTML.testCase_id with cls_cmd.getConnection(node) as cmd: succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, CI_OC_RAN_NAMESPACE) if not succeeded: @@ -211,8 +210,6 @@ class Cluster: logging.debug(f'Building on cluster triggered from server: {node}') self.cmd = cls_cmd.RemoteCmd(node) - self.testCase_id = HTML.testCase_id - # Workaround for some servers, we need to erase completely the workspace self.cmd.cd(lSourcePath) # to reduce the amount of data send to OpenShift, we @@ -412,7 +409,7 @@ class Cluster: # the groovy scripts expects all logs in # //ci-scripts, so copy it there with cls_cmd.LocalCmd() as c: - c.run(f'mkdir -p {os.getcwd()}/test_log_{ctx.test_id}/') - c.run(f'cp -r {ctx.logPath} {os.getcwd()}/test_log_{ctx.test_id}/') + c.run(f'mkdir -p {os.getcwd()}/test_log_{ctx.test_idx}/') + c.run(f'cp -r {ctx.logPath} {os.getcwd()}/test_log_{ctx.test_idx}/') return status diff --git a/ci-scripts/cls_native.py b/ci-scripts/cls_native.py index d96f60bdca..e1b42acf5b 100644 --- a/ci-scripts/cls_native.py +++ b/ci-scripts/cls_native.py @@ -34,9 +34,8 @@ DPDK_PATH = '/opt/dpdk-t2-22.11.0' class Native(): - def Build(ctx, node, test_case, HTML, directory, options): + def Build(ctx, node, HTML, directory, options): logging.debug(f'Building on server: {node}') - HTML.testCase_id = test_case with cls_cmd.getConnection(node) as ssh: base = f"{directory}/cmake_targets" diff --git a/ci-scripts/cls_oai_html.py b/ci-scripts/cls_oai_html.py index cb1ca56542..6e29063192 100644 --- a/ci-scripts/cls_oai_html.py +++ b/ci-scripts/cls_oai_html.py @@ -67,7 +67,7 @@ class HTMLManagement(): self.htmlUEFailureMsg = '' self.startTime = int(round(time.time() * 1000)) - self.testCase_id = '' + self.testCaseIdx = '' self.desc = '' #----------------------------------------------------------- @@ -191,7 +191,7 @@ class HTMLManagement(): self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') - self.htmlFile.write(' \n') + self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') @@ -259,7 +259,7 @@ class HTMLManagement(): currentTime = int(round(time.time() * 1000)) - self.startTime self.htmlFile.write(' \n') self.htmlFile.write(' \n') - self.htmlFile.write(' \n') + self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') if (str(status) == 'OK'): @@ -374,7 +374,7 @@ class HTMLManagement(): addOrangeBK = False self.htmlFile.write(' \n') self.htmlFile.write(' \n') - self.htmlFile.write(' \n') + self.htmlFile.write(' \n') self.htmlFile.write(' \n') self.htmlFile.write(' \n') if (str(status) == 'OK'): diff --git a/ci-scripts/cls_static_code_analysis.py b/ci-scripts/cls_static_code_analysis.py index 63b5b5b6dd..5ed52e4027 100644 --- a/ci-scripts/cls_static_code_analysis.py +++ b/ci-scripts/cls_static_code_analysis.py @@ -88,7 +88,6 @@ class StaticCodeAnalysis(): raise ValueError(f"{lSourcePath=} {node=}") logging.debug('Building on server: ' + node) cmd = cls_cmd.getConnection(node) - self.testCase_id = HTML.testCase_id # on RedHat/CentOS .git extension is mandatory result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository) if result is not None: @@ -187,8 +186,6 @@ class StaticCodeAnalysis(): raise ValueError(f"{lSourcePath=} {node=}") logging.debug('Building on server: ' + node) cmd = cls_cmd.getConnection(node) - self.testCase_id = HTML.testCase_id - check_options = '' if self.ranAllowMerge: check_options = f'--build-arg MERGE_REQUEST=true --build-arg SRC_BRANCH={self.ranBranch}' diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 731298839f..797e008ab3 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -98,7 +98,7 @@ def ExecuteActionWithParam(action, ctx, node): if proxy_commit is not None: CONTAINERS.proxyCommit = proxy_commit if action == 'Build_eNB': - success = cls_native.Native.Build(ctx, node, HTML.testCase_id, HTML, RAN.eNBSourceCodePath, RAN.Build_eNB_args) + success = cls_native.Native.Build(ctx, node, HTML, RAN.eNBSourceCodePath, RAN.Build_eNB_args) elif action == 'Build_Image': success = CONTAINERS.BuildImage(ctx, node, HTML) elif action == 'Build_Proxy': @@ -308,7 +308,7 @@ def receive_signal(signum, frame): def ShowTestID(ctx, desc): logging.info(f'\u001B[1m----------------------------------------\u001B[0m') - logging.info(f'\u001B[1m Test ID: {ctx.test_id} \u001B[0m') + logging.info(f'\u001B[1m Test #{ctx.test_idx} \u001B[0m') logging.info(f'\u001B[1m {desc} \u001B[0m') logging.info(f'\u001B[1m----------------------------------------\u001B[0m') @@ -470,16 +470,16 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re for index, test in enumerate(all_tests, start=1): if test_runner_abort: task_set_succeeded = False - test_case_id = f"{index:06d}" - ctx = TestCaseCtx(int(test_case_id), logPath) - HTML.testCase_id = test_case_id + test_case_idx = f"{index:06d}" + ctx = TestCaseCtx(int(test_case_idx), logPath) + HTML.testCaseIdx = test_case_idx desc = test.findtext('desc') node = test.findtext('node') if not force_local else 'localhost' always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes'] may_fail = test.findtext('may_fail') in ['True', 'true', 'Yes', 'yes'] HTML.desc = desc action = test.findtext('class') - if not CheckClassValidity(xml_class_list, action, test_case_id): + if not CheckClassValidity(xml_class_list, action, test_case_idx): task_set_succeeded = False continue ShowTestID(ctx, desc) @@ -491,9 +491,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re try: test_succeeded = ExecuteActionWithParam(action, ctx, node) if not test_succeeded and may_fail: - logging.warning(f"test ID {test_case_id} action {action} may or may not fail, proceeding despite error") + logging.warning(f"test ID {test_case_idx} action {action} may or may not fail, proceeding despite error") elif not test_succeeded: - logging.error(f"test ID {test_case_id} action {action} failed ({test_succeeded}), skipping next tests") + logging.error(f"test ID {test_case_idx} action {action} failed ({test_succeeded}), skipping next tests") task_set_succeeded = False except Exception as e: s = traceback.format_exc() diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index e440fc3a62..04384ad4f4 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -67,7 +67,6 @@ class RANManagement(): self.eNBOptions = ['', '', ''] self.eNBmbmsEnables = [False, False, False] self.eNBstatuses = [-1, -1, -1] - self.testCase_id = '' self.runtime_stats= '' self.datalog_rt_stats={} self.datalog_rt_stats_file='datalog_rt_stats.default.yaml' @@ -88,7 +87,6 @@ class RANManagement(): raise ValueError(f"{node=}") logging.debug('Starting eNB/gNB on server: ' + node) - self.testCase_id = HTML.testCase_id lSourcePath = self.eNBSourceCodePath cmd = cls_cmd.getConnection(node) diff --git a/ci-scripts/tests/build.py b/ci-scripts/tests/build.py index 013486a560..8701b17a8c 100644 --- a/ci-scripts/tests/build.py +++ b/ci-scripts/tests/build.py @@ -17,7 +17,7 @@ import cls_cmd class TestBuild(unittest.TestCase): def setUp(self): self.html = cls_oai_html.HTMLManagement() - self.html.testCase_id = "000000" + self.html.testCaseIdx = "000000" self.cont = cls_containerize.Containerize() self._d = tempfile.mkdtemp() logging.warning(f"temporary directory: {self._d}") From dab44db9aa910aaed8d041e35e1c59483daa5ee0 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Tue, 13 Jan 2026 20:49:23 +0100 Subject: [PATCH 53/53] CI: Update ShowTestID to include the source file and line Replace xml.etree.ElementTree with lxml.etree for to enable line tracking. Update ShowTestID to include the source file and line number for each test. --- ci-scripts/main.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 797e008ab3..1995ff545b 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -58,7 +58,7 @@ import re # reg import time # sleep import os import subprocess -import xml.etree.ElementTree as ET +import lxml.etree as ET import logging import signal import traceback @@ -306,10 +306,10 @@ def receive_signal(signum, frame): logging.warning("received signal again, exiting") sys.exit(1) -def ShowTestID(ctx, desc): +def ShowTestID(ctx, desc, file, line): logging.info(f'\u001B[1m----------------------------------------\u001B[0m') - logging.info(f'\u001B[1m Test #{ctx.test_idx} \u001B[0m') - logging.info(f'\u001B[1m {desc} \u001B[0m') + logging.info(f'\u001B[1m Test #{ctx.test_idx} ({file}:{line}) \u001B[0m') + logging.info(f'\u001B[1m {desc} \u001B[0m') logging.info(f'\u001B[1m----------------------------------------\u001B[0m') #----------------------------------------------------------- @@ -482,7 +482,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re if not CheckClassValidity(xml_class_list, action, test_case_idx): task_set_succeeded = False continue - ShowTestID(ctx, desc) + file = os.path.basename(xml_test_file) + line = test.find('class').sourceline + ShowTestID(ctx, desc, file, line) if not task_set_succeeded and not always_exec: msg = f"skipping test due to prior error" logging.warning(msg)
Relative Time (s)Test IdTest IndexTest DescTest OptionsTest Status
' + format(currentTime / 1000, '.1f') + '' + self.testCase_id + '' + self.testCaseIdx + '' + self.desc + '' + str(options) + '
' + format(currentTime / 1000, '.1f') + '' + self.testCase_id + '' + self.testCaseIdx + '' + self.desc + '' + str(options) + '